DPDK 샘플 응용 프로그램 사용자 가이드 (40) 인터넷 프로 토 콜 (IP) 파이프라인 응용 프로그램
☆ ☆ ☆ ☆ ☆ ☆ 이해: ★ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆
40.1. 응용 프로그램 개요 인터넷 프로 토 콜 (IP) 파이프 응용 은 다 핵 cpu 에서 패키지 처리 응용 프로그램 을 신속하게 개발 하 는 캐리어 가 되 는 데 목적 을 둔다.OpenFlow 와 P4 설계 원칙 에 따라 이 프로그램 을 사용 하여 입력 / 출력 포트, 표 와 작업 에서 파이프 라 는 기능 블록 을 모듈 화 할 수 있 습 니 다.여러 파 이 프 는 패키지 대기 열 을 통 해 서로 연결 되 어 완전한 응용 프로그램 (슈퍼 파이프) 을 만 들 수 있 습 니 다.파 이 프 는 응용 프로그램 스 레 드 에 매 핑 되 고 모든 파 이 프 는 하나의 스 레 드 로 실 행 됩 니 다. 모든 스 레 드 는 하나 이상 의 파 이 프 를 실행 할 수 있 습 니 다.포트, 테이블, 작업 에서 파 이 프 를 만 들 고 여러 파 이 프 를 연결 하여 실행 라인 에 파 이 프 를 비 추 는 가능성 은 무궁무진 하기 때문에 이 프로그램 은 진정한 응용 프로그램 생 성기 로 볼 수 있다.파 이 프 는 명령 행 인터페이스 (CLI) 를 통 해 생 성 되 고 관리 합 니 다. 표준 TCP 클 라 이언 트 (예 를 들 어 telnet, netcat, 사용자 정의 스 크 립 트 등) 는 보통 응용 프로그램 에 연결 되 어 네트워크 를 통 해 명령 을 보 내 고 응답 을 기다 린 다음 명령 을 수행 합 니 다.모든 응용 대상 은 CLI 명령 을 통 해 만 들 고 관리 합 니 다. 파이프 포트 를 만 드 는 '기본' 대상: 메모리 탱크, 링크 (즉 네트워크 인터페이스), SW 대기 열, 데이터 관리자 등 입 니 다.작업 개요: 파이프 입력 / 출력 포트 와 테이블 이 실행 할 동작 을 정의 하 는 데 사 용 됩 니 다.파이프 구성 요소: 입력 / 출력 포트, 표, 파이프, 파이프 에서 실행 라인 에 대한 맵 입 니 다.
40.2. 프로그램 시작 명령 실행:
ip_pipeline [EAL_ARGS] -- [-s SCRIPT_FILE] [-h HOST] [-p PORT]
응용 프로그램 시작 매개 변 수 는:
-s SCRIPT_FILE
선택 가능: 예, 기본 값: 인자 가 존재 하지 않 습 니 다. 프로그램 이 시 작 될 때 실행 되 는 CLI 스 크 립 트 파일 의 경로 입 니 다.이 인자 가 존재 하지 않 으 면 시작 할 때 CLI 스 크 립 트 파일 을 실행 하지 않 습 니 다.-h Host
선택 할 수 있 습 니 다. 기본 값: 0.0.0.0 매개 변수: IP 파이프 프로그램 을 실행 하 는 호스트 의 IP 주 소 는 원 격 TCP 기반 클 라 이언 트 (telnet, netcat 등) 연결 에 사 용 됩 니 다.-p Port
선택 가능: 예, 기본 값: 8086 매개 변수: ip 파 이 프 를 실행 하고 있 는 TCP 포트 번호 입 니 다.원 격 TCP 클 라 이언 트 (예 를 들 어 telnet, netcat 등) 는 이 포트 번 호 를 사용 하여 호스트 프로그램 에 연결 해 야 합 니 다.응용 프로그램 과 환경 추상 층 (EAL) 옵션 을 실행 하 는 일반적인 정 보 는 DPDK 입문 안내서 (DPDK Getting Started Guide) 를 참조 하 십시오.2 층 퍼 가기 설정 을 실행 하 는 ip 파이프 프로그램 을 실행 하 는 예제 명령 입 니 다.
$ ./build/ip_pipeline -c 0x3 -- -s examples/route_ecmp.cli
프로그램 이 성공 적 으로 시작 되 고 다음 과 같이 표시 되 어야 합 니 다.
EAL: Detected 40 lcore(s)
EAL: Detected 2 NUMA nodes
EAL: Multi-process socket /var/run/.rte_unix
EAL: Probing VFIO support...
EAL: PCI device 0000:02:00.0 on NUMA socket 0
EAL: probe driver: 8086:10fb net_ixgbe
...
원 격 클 라 이언 트 (예 를 들 어 telnet) 를 실행 하고 ip 파이프 응용 프로그램 과 통신 합 니 다.
$ telnet 127.0.0.1 8086
상기 telnet 클 라 이언 트 를 실행 할 때 명령 프롬프트 가 표 시 됩 니 다.
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Welcome to IP Pipeline!
pipeline>
응용 프로그램 과 telnet 클 라 이언 트 가 실행 되 기 시작 하면 메 시 지 는 클 라 이언 트 에서 응용 프로그램 으로 보 낼 수 있 습 니 다.모든 단계 에서 quit 명령 을 사용 하여 telnet 클 라 이언 트 를 중지 할 수 있 습 니 다.
40.3. 응용 프로그램 단계 40.3.1 이 단 계 를 초기 화하 고 EAL 층 을 초기 화하 고 응용 프로그램 에 지정 한 인 자 를 분석 합 니 다.이 밖 에 응용 프로그램 대상 의 데이터 구조 (즉 링크) 도 초기 화 되 었 다.초기 화 오류 가 발생 하면 오류 메 시 지 를 표시 하고 프로그램 을 종료 합 니 다.40.3.2 실행 시 메 인 스 레 드 는 CLI 입력 에 따라 모든 프로그램 대상 을 만 들 고 관리 합 니 다.모든 데이터 평면 스 레 드 는 이전에 순환 순서에 따라 파 이 프 를 하나 이상 실행 합 니 다.모든 데이터 평면 스 레 드 는 시간 대별 모드 에서 두 가지 작업 을 수행 합 니 다. 1. 패키지 처리 작업: 파이프 입력 포트 에서 읽 은 입력 패키지 의 돌발 사건 을 처리 합 니 다.2. 메시지 처리 작업: 데이터 평면 스 레 드 는 주기 적 으로 패키지 처리 임 무 를 중단 하고 메 인 스 레 드 가 보 낸 요청 메 시 지 를 문의 합 니 다.예 를 들 어 현재 데이터 평면 스 레 드 에서 파 이 프 를 추가 / 삭제 하고 현재 데이터 평면 스 레 드 가 가지 고 있 는 특정 파이프 의 주어진 표 에서 규칙 을 추가 / 삭제 하 며 통계 정 보 를 읽 습 니 다.
40.4. 예
Name
Table(s)
Actions
Messages
L2fwd
Stub
Forward
Mempool create Link create Pipeline create Pipeline port in/out Pipeline table Pipeline port in table Pipeline enable Pipeline table rule add
Flow classification
Exact match Key = byte array (16 bytes) Offset = 278 Table size = 64K
Forward
1.Mempool create 2.Link create 3.Pipeline create 4.Pipeline port in/out 5.Pipeline table 6.Pipeline port in table 7.Pipeline enable 8.Pipeline table rule add default 9.Pipeline table rule add
KNI
Stub
Forward
Mempool create Link create Pipeline create Pipeline port in/out Pipeline table Pipeline port in table Pipeline enable Pipeline table rule add
Firewall
ACL Key = n-tuple Offset = 270 Table size = 4K
Allow/Drop
Mempool create Link create Pipeline create Pipeline port in/out Pipeline table Pipeline port in table Pipeline enable Pipeline table rule add default Pipeline table rule add
IP routing
LPM (IPv4) Key = IP dest addr Offset = 286 Table size = 4K
Forward
Mempool Create Link create Pipeline creat Pipeline port in/out Pipeline table Pipeline port in table Pipeline enable Pipeline table rule add default Pipeline table rule add
Equal-cost multi-path routing (ECMP)
LPM (IPv4) Key = IP dest addr Offset = 286 Table size = 4K Array Key = Array index Offset = 256 Size = 4K
Forward, load balance, encap ether
Mempool Create Link create Pipeline create Pipeline port in/out Pipeline table (LPM) Pipeline table (Array) Pipeline port in table (LPM) Pipeline enable Pipeline table rule add default Pipeline table rule add(LPM) Pipeline table rule add(Array)
40.5. Command Line Interface (CLI) 40.5.1. 링크 링크 설정
link
dev |port
rxq
txq promiscuous on | off
[rss ... ]
메모: PCI 장치 이름 은 Domain: Bus: Device. Function 형식 을 사용 해 야 합 니 다.
40.5.2. Mempool Mempool 생 성
mempool buffer
pool cache cpu
40.5.3. 소프트웨어 큐 생 성 소프트웨어 큐
swq size cpu
40.5.4. Traffic manager (유량 관리자 TM) 에 유량 관리자 서브 포트 설정 파일 추가
tmgr subport profile
데이터 관리자 파이프 설정 파일 추가
tmgr pipe profile
유량 관리자 포트 만 들 기
tmgr
rate
spp
pps
qsize
fo mtu cpu
유량 관리자 서브 포트 설정
tmgr
subport
profile
유량 관리자 파이프 설정
tmgr
subport
pipe from to
profile
40.5.5. Tap Create tap port
tap
40.5.6. Kni kni 포트 만 들 기
kni
link
mempool
[thread ]
40.5.7. Cryptodev Create cryptodev port
cryptodev
dev
queue
40.5.8 작업 프로필 은 파이프 입력 포트 에 작업 개요 파일 을 만 듭 니 다.
port in action profile
[filter match | mismatch offset mask key port ]
[balance offset mask port ... ]
pipeline 표 에 작업 개요 파일 만 들 기
table action profile
ipv4 | ipv6
offset
fwd
[balance offset mask outoffset ]
[meter srtcm | trtcm
tc
stats none | pkts | bytes | both]
[tm spp pps ]
[encap ether | vlan | qinq | mpls | pppoe]
[nat src | dst
proto udp | tcp]
[ttl drop | fwd
stats none | pkts]
[stats pkts | bytes | both]
[sym_crypto cryptodev
mempool_create mempool_init ]
[time]
40.5.9. 파이프 라인 생 성 파이프
pipeline
period
offset_port_id
cpu
파이프 입력 포트 만 들 기
pipeline port in
bsz
link rxq
| swq
| tmgr
| tap mempool mtu
| kni
| source mempool file bpp
[action ]
[disabled]
파이프 출력 포트 만 들 기
pipeline port out
bsz
link txq
| swq
| tmgr
| tap
| kni
| sink [file pkts ]
파이프 시트 만 들 기
pipeline table
match
acl
ipv4 | ipv6
offset
size
| array
offset
size
| hash
ext | lru
key
mask
offset
buckets
size
| lpm
ipv4 | ipv6
offset
size
| stub
[action ]
파이프 입력 포트 를 표 에 연결 합 니 다.
pipeline port in table
특정 파이프 입력 포트, 출력 포트 또는 표 의 통계 정 보 를 표시 합 니 다.
pipeline port in stats read [clear]
pipeline port out stats read [clear]
pipeline table stats read [clear]
특정 파이프 인 스 턴 스 를 위해 주어진 입력 포트 를 사용 합 니 다.
pipeline port out disable
특정 파이프 인 스 턴 스 의 주어진 입력 포트 를 사용 하지 않 습 니 다.
pipeline port out disable
표 에 특정 파이프 인 스 턴 스 의 기본 규칙 을 추가 합 니 다.
pipeline table rule add
match
default
action
fwd
drop
| port
| meta
| table
특정 파이프 인 스 턴 스 를 위 한 규칙 추가
pipeline table rule add
match
acl
priority
ipv4 | ipv6
| array
| hash
raw
| ipv4_5tuple
| ipv6_5tuple
| ipv4_addr
| ipv6_addr
| qinq
| lpm
ipv4 | ipv6
action
fwd
drop
| port
| meta
| table
[balance ... ]
[meter
tc0 meter policer g y r
[tc1 meter policer g y r
tc2 meter policer g y r
tc3 meter policer g y r ]]
[tm subport pipe ]
[encap
ether
| vlan
| qinq
| mpls unicast | multicast
label0
특정 파이프 인 스 턴 스 를 위해 표 에 일괄 규칙 을 추가 합 니 다.
pipeline table rule add bulk
Where:
- file_name = path to file
- File line format = match action
특정 파이프 인 스 턴 스 의 표 규칙 을 삭제 합 니 다.
pipeline table rule delete
match
특정 파이프 인 스 턴 스 의 기본 표 규칙 을 삭제 합 니 다.
pipeline table rule delete
match
default
특정 파이프 인 스 턴 스 를 위 한 계량기 설정 파일 추가
pipeline table meter profile
add srtcm cir cbs ebs
| trtcm cir pir cbs pbs
표 에서 특정 파이프 인 스 턴 스 의 계기 설정 파일 을 삭제 합 니 다.
pipeline table
meter profile delete
특정 파이프 인 스 턴 스 의 표 나 데이터 관리자 작업 에 dscp 표를 업데이트 합 니 다.
pipeline table dscp
Where:
- file_name = path to file
- exactly 64 lines
- File line format = , with as: g | y | r
40.5.10 파이프 가 특정한 데이터 평면 스 레 드 로 지정 한 파이프 인 스 턴 스 를 사용 하거나 사용 하지 않 습 니 다.
thread pipeline enable
특정 데이터 평면 스 레 드 의 주어진 파이프 인 스 턴 스 를 사용 하지 않 습 니 다.
thread pipeline disable