10.4 Executing DPDK Applications on Host
이 섹션에서는 Host와 VM 환경 모두에서 DPDK와 관련 애플리케이션을 실행하는 방법에 대해 설명한다.
10.4.1 Booting up the Target board
Universal Update Utility(UUU)는 Windows나 Linux OS 호스트에서 실행되며, i.MX 보드의 다른 디바이스에 이미지를 다운로드하는 데 사용된다. 자세한 내용은 i.MX Linux User's Guide(IMXLUG)의 "Universal update utility" 섹션을 참조한다.
DPDK를 포함하여 대상(예: eMMC나 SD 카드)에 rootfs를 uuu를 사용하여 로드한다. Yocto에서 생성한 <rootfs.tar.zst>에는 DPDK가 포함되어 있다. 자세한 내용은 i.MX Linux User's Guide(IMXLUG)의 "How to boot the i.MX boards" 섹션을 참조한다.
10.4.2 Device tree file
ENETFEC용 사용자 공간 모드: i.MX 플랫폼의 경우, DPDK 관련 Device Tree 파일을 보드 부팅에 사용해야 한다. 이 Device Tree 파일은 사용자 공간 애플리케이션에 네트워크 인터페이스를 제공하도록 구성된다. 또한, 위에서 언급한 Device Tree 구성이 사용되면, 모든 이더넷 포트는 사용자 공간에서만 사용할 수 있다. 일부 포트를 Linux Kernel에 할당하려면, Device Tree 파일을 변경해야 한다.
사용자는 아래 방법을 사용하여 기본 imx8mx-evk.dtb를 imx8mxevk-dpdk.dtb로 대체하여, i.MX 8 플랫폼에서 DPDK를 지원할 수 있다.
i.MX 8M Mini용 U-Boot에서 아래 커맨드를 실행한다:
U-Boot > setenv fdtfile imx8mm-evk-dpdk.dtb
U-Boot > saveenv
U-boot > boot
i.MX 8M Plus용 U-Boot에서 아래 커맨드를 실행한다:
U-Boot > setenv fdtfile imx8mp-evk-dpdk.dtb
U-Boot > saveenv
U-boot > boot
참고:
사용 가능한 메모리에 따라, 커맨드 라인에서 시스템에 hugepage를 추가한다.
echo 448 > /sys/kernel/mm/hugepages/hugepages2048kB/ nr_hugepages Check it with: cat /proc/meminfo
10.4.3 Prerequisite for running DPDK applications
이 섹션에서는 대상 플랫폼이 부팅되고 Linux shell에 로그인된 이후의 절차를 설명한다. 이 섹션은 i.MX 8M Mini와 i.MX 8M Plus 플랫폼에 적용되며, 아래와 같이 구성된다:
- Generic Setup에는 DPDK 샘플 애플리케이션이나 외부 DPDK 애플리케이션을 실행하기 전에 실행할 일반적인 단계가 포함되어 있다.
- 애플리케이션별 섹션에는 DPDK 예제와 관련 애플리케이션을 실행하는 방법에 대한 단계가 포함되어 있다.
자세한 내용은 아래 섹션을 참조한다:
- Test Environment Setup
- Troubleshooting
Test Environment Setup
다양한 샘플 애플리케이션 실행 단계는 아래 섹션에서 설명한다. 아래 그림은 DUT(Device Under Test)와 Packet Generator(Spirent 패킷 생성기)를 포함하는 설정을 보여준다. 이는 아래 섹션에서 제공되는 커맨드에 적용된다. 설정에는 DUT와 패킷 생성기 유닛 사이의 일대일 링크가 포함된다. DUT에서 실행하는 DPDK 애플리케이션은 트래픽을 전달할 것으로 예상된다.
10.4.4 DPDK Example Applications
DPDK 예제 애플리케이션 바이너리는 Flexbuild에서 생성된 rootfs의 /usr/local/bin 폴더에서 사용할 수 있다.
참고:
- 아래 커맨드 스니펫은 /usr/share/dpdk/examples에 있거나 적절한 PATH 변수가 설정되어 있는 동안 실행된다고 가정한다. 또한, DPDK 바이너리는 수정 없이 i.MX 8M Mini와 i.MX 8M Plus 플랫폼 모두에서 실행할 수 있다.
- 선택된 소수의 DPDK 예제 애플리케이션만 기본적으로 루트 파일 시스템에 배포된다. 배포되지 않은 예제 애플리케이션의 경우, DPDK 소스 코드를 사용하여 컴파일해야 한다. 자세한 내용은 DPDK 라이브러리와 애플리케이션의 Standalone 빌드를 참조한다.
- i.MX 8 플랫폼의 경우, i.MX 8M Mini와 i.MX 8M Plus는 1개의 코어만 지원하므로, 0x1이 있는 -c은 모든 DPDK 애플리케이션에 허용되는 코어 마스크이다. 또한, 사용자는 DPDK 애플리케이션용 Ethernet 디바이스를 활성화하기 위해 net_enetfec 값과 함께 -vdev 인수를 제공해야 한다.
l2fwd – Layer 2 forwarding application
Layer 2 정보를 기반으로 여러 포트 사이의 포워딩을 보여주는 샘플 애플리케이션이다.
dpdk-l2fwd -c 0x1 -n 1 --vdev 'net_enetfec' -- -p 0x1
위 커맨드에서 -c는 DPDK에 할당된 코어의 코어 마스크를 나타낸다. -p는 애플리케이션에서 사용할 포트의 포트 마스크이다. 다른 커맨드 라인 파라미터도 제공될 수 있다. 전체 목록은 L2 Forwarding Sample Application(in Real and Virtualized Environments)을 참조한다.
참고:
DPDK L2fwd 애플리케이션은 주기적으로 I/O 통계를 출력한다. 이러한 예약된 출력으로 인해 CPU 코어가 중단되는 것을 방지하기 위해 명령줄 끝에 -T 0 옵션을 추가할 수 있다.
dpdk-l3fwd – Layer 3 forwarding application
Layer 3 정보를 기반으로 여러 포트 사이의 포워딩을 보여주는 샘플 애플리케이션이다.
dpdk-l3fwd -c 0x1 --vdev='net_enetfec' -n 1 -- -p 0x1 --config="(0,0,0)" -P --parse-ptype
위 커맨드에서 -c는 DPDK에 할당된 코어의 코어 마스크를 나타낸다. -p는 애플리케이션에서 사용할 포트의 포트 마스크이다. --config (Port, Queue, Core)는 코어를 각 포트의 대기열에 연결하기 위해 애플리케이션에서 사용하는 구성이다. 다른 커맨드 라인 파라미터도 제공될 수 있다. 전체 목록은 L3 Forwarding Sample Application을 참조한다.
dpdk-testpmd
기능 테스트에 사용되는 샘플 애플리케이션으로, 트래픽 생성기와 보드 연결이 적절한지 확인한다. 패킷이 특정 인터페이스에서 나가는지 확인하기 위해, tx_only 모드에서 testpmd를 실행할 수 있다. testpmd 애플리케이션과 지원되는 인수에 대한 자세한 내용은 웹 문서를 참조한다.
TX 전용:
dpdk-testpmd -c 0x1 -n 1 --vdev='net_enetfec' -- -i --
portmask=0x1 –n b ports=1 --forward-mode=rxonly
RX 전용:
dpdk-testpmd -c 0x1 -n 1 --vdev='net_enetfec' -- -i --
portmask=0x1 –n b ports=1 --forward-mode=txonly
IO용:
dpdk-testpmd -c 0x1 -n 1 --vdev=’net_enetfec’ -- -i --
portmask=0x1 –nb ports=1 --forward-mode=io