Ampere Computing Logo
Contact Sales
Ampere Computing Logo
Customer reference board (CRB) platforms from Ampere

DPDK 配置和优化指南

针对 Ampere Altra 系列处理器

如何基于Ampere Altra 处理器构建DPDK

DPDK是数据平面开发工具包,它由一些库组成,可以加速在各种CPU架构上运行的数据包处理工作负载。可以运行在x86、POWER和ARM处理器上,并在开源BSD许可证下获得许可。

Pktgen-DPDK是一个由DPDK驱动的流量生成器。

本指南是为想要了解如何构建DPDK并使用Ampere® Altra®处理器设置测试环境的应用程序架构师和构建工程师编写的。

Pktgen-DPDK 的硬件配置

硬件的配置如下所示。


Pktgen-DPDK.jpg


Packet Generator:

  • Ampere Altra Q80-30
  • Mellanox ConnectX-6 Dx
  • CentOS 8.5
  • DPDK 23.03+ Pktgen-DPDK master

DUT:

  • Ampere Altra Max M128-30
  • Mellanox ConnectX-5 Ex
  • CentOS 8.5
  • DPDK 23.03

分组发生器和DUT使用100G网线背靠背连接。

安装搭建DPDK的前提条件

针对相应操作系统,从Mellanox的网站[1]下载Mellanox网卡的MLNX_OFED。然后,使用此命令安装MLNX_OFED。如果系统中丢失了一些包,会有提示,可能需要重新启动。

./mlnxofedinstall --add-kernel-support --upstream-libs --dpdk --skip-repo

安装构建DPDK所需的其他软件包。

sudo yum install python3 meson ninja-build python3-pyelftools numactl-devel -y

安装构建Pktgen-DPDK所需的软件包。

sudo yum install libpcap-devel -y
下载并构建DPDK

从DPDK网站https://fast.dpdk.org/rel/下载DPDK源代码,然后使用以下命令进行构建。

wget https://fast.dpdk.org/rel/dpdk-23.03.tar.gz tar zxf dpdk-23.03.tar.gz cd dpdk-23.03 meson build ninja -C build sudo ninja -C build install

DPDK库和二进制文件将安装在/usr/local/lib64和/usr/local/bin/。

下载和构建 Pktgen-DPDK

本节只适用于包生成系统。从github下载Pktgen-DPDK源代码。由于Pktgen-DPDK使用前面章节中安装的DPDK库,请选择与DPDK版本相近的版本。然后使用以下命令进行构建:

export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig git clone [https://github.com/pktgen/Pktgen-DPDK.git](https://github.com/pktgen/Pktgen-DPDK.git) cd Pktgen-DPDK make
系统健康检查和设置

在开始测试之前,应该在包生成器和DUT系统上应用一些设置。根据操作系统的不同,有些选项可能会有所不同。

系统健康检查

系统健康检查是任何测试之前要做的第一件事。使用常见的实用程序,如dmidcode、lscpu、lshw、lspci、fio、iperf/iperf3等来检查BIOS版本、CPU频率、内存DIMM数量、以太网链路速度等。确保系统的所有组件的功能和性能都能以良好的方式运行。

BIOS 设置

BIOS设置取决于您正在使用的平台。这里我们列出了一些Ampere Altra系列处理器平台上DPDK的推荐通用选项。

Advanced->ACPI Settings->Enable ACPI Auto Configuration [Disabled]

Advanced->ACPI Settings->Enable CPPC [Disabled]

Advanced->ACPI Settings->Enable LPI [Disabled]

Chipset->CPU Configuration->ANC mode [Monolithic]

Chipset->CPU Configuration-> SLC Replacement Policy [Enhanced Least Recently Used]

Chipset->CPU Configuration->L1/L2 Prefetch [Enabled]

Chipset->CPU Configuration->SLC as L3$ [Disabled]

BIOS的详细设置请参考各平台的用户手册。

大页面支持(Hugepage)

支持的大页面大小与基本内核页面大小配置不同。当内核页面大小配置为4K时,支持的大页面大小为64K、2M、32M和1G(建议使用1G的大页面)。当配置内核页大小为64K时,支持的大页面大小为2M、512M和16G(推荐使用512M或16G的大页面)。

我们在这个文档中使用512M的超大页面大小。使用如下命令设置大页面的个数:

echo 100 > /sys/devices/system/node/node0/hugepages/hugepages-524288kB/nr_hugepages

或者,你可以在内核引导选项中设置大页面,并且该设置可以在重启后保持不变:

default_hugepagesz=512M hugepagesz=512M hugepages=100

请参考内核文档了解更多关于大页面的细节:

https://www.kernel.org/doc/html/latest/admin-guide/mm/hugetlbpage.html

https://www.kernel.org/doc/html/latest/arm64/hugetlbpage.html

性能调控

如果您在BIOS中将“Enable CPPC”设置为“Disabled”,或者需要将CPU设置为性能调控模式(performance governor)以避免调频节能,则跳过此步骤。

for i in {0..128}; do echo performance > /sys/devices/system/cpu/cpu$i/cpufreq/scaling_governor done

内核启动选项

其他一些推荐的内核启动选项:

iommu.passthrough=1: Bypass the IOMMU for DMA selinux=0: Disable SELinux at boot time isolcpus=xx-yy: Isolate a given set of CPUs from disturbance nohz_full= xx-yy: Stop the ticks for the given set of CPUs rcu_nocbs=xx-yy: Set to no-callback mode for the given set of CPUs rcu_nocb_poll

请参考内核文档了解这些选项的详细信息:

https://www.kernel.org/doc/html/latest/admin-guide/kernel-parameters.html

NIC

关闭用于测试的以太网接口的暂停帧:

ethtool -A <interface> rx off tx off

设置PCIe设备的MaxReadReq为4096字节。这只是Mellanox NIC的一个例子。

setpci -s <PCIe Address> 68.w=5950

启用Mellanox网卡的 relax ordering和CQE压缩:

mst start mst status mlxconfig -d <PCIe Address> query |grep -e PCI_WR_ORDERING -e CQE_COMPRESSION mlxconfig -d <PCIe Address> set PCI_WR_ORDERING=1 mlxconfig -d <PCIe Address> set CQE_COMPRESSION=1

不同的网卡可能有不同的最佳设置,详情请参考设备的用户手册。

SLC 安装

“SLC (System Level Cache) Installation”是一种让IO子系统直接在SLC中缓存IO数据的方法,可以减少数据路径上的延迟,提高DPDK应用程序的性能。它需要一些工具程序来在Ampere Altra系列处理器上启用此功能,并且对内核有一些依赖。请联系Ampere来支持此功能。

启动 Pktgen 程序

在用作包生成器的系统上启动pktgen应用程序。在本例中,我们使用一个100G端口作为pkt发射器。

export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig cd Pktgen-DPDK ./Builddir/app/pktgen --file-prefix pktgen -a 0000:01:00.0 -l 40-59 -n 8 -- -N -T -m [42-43:44-59].0

根据Pktgen的提示启用范围。

Pktgen:/> set 0 dst mac <mac> Pktgen:/> range 0 dst mac <mac> 00:00:00:00:00:00 00:00:00:00:00:00 00:00:00:00:00:00 Pktgen:/> range 0 size 64 64 64 0 Pktgen:/> enable 0 range Pktgen:/> start 0

下图是148.8Mpps发送数据包的截图,这是100G网卡接口的线路速率。

DPDK Set up.jpg


表1给出了不同报文大小下不同以太网链路速率的速率。

Ethernet Link SpeedPacket Size (Byte)Line rate packet per second (Mpps)
10GbE6414.88
1288.45
2564.53
5122.35
25GbE6437.2
12821.11
25611.32
5125.87
100GbE64148.8
12884.46
25645.29
51223.5
启动 testpmd 程序

在被测系统上启动dpdk-testpmd应用程序。下面是一个示例(CMD-1),具有1个核心和3个rx队列/3个tx队列。

(CMD-1) dpdk-testpmd --file-prefix testpmd -l 40-79 -n 8 -a 0000:01:00.0,mprq_en=1,rxqs_min_mprq=1,rxq_cqe_comp_en=1,rxq_pkt_pad_en=1,txq_inline_max=1024,txq_inline_mpw=1024,txqs_min_inline=1,txq_mpw_en=1 -- -i --rss-ip --nb-cores=1 --burst=128 --txq=3 --rxq=3 --mbcache=512 --rxd=1024 --txd=1024 -a

在本例中,我们通过启用Mellanox ConnectX-5, ConnectX-6网卡的多包Rx队列(MPRQ),增强型多包写(eMPW)和CQE压缩来使用数据内联模式。这些特性可以在PCIe背压较大的情况下节省PCIe带宽,提高性能。但是,它会为数据复制消耗额外的CPU周期。当PCIe背压不高时,可能会影响性能。下面是另一个禁用数据内联模式的例子(CMD-2):

(CMD-2) dpdk-testpmd --file-prefix testpmd -l 40-79 -n 8 -a 0000:01:00.0,mprq_en=0,rxqs_min_mprq=1,rxq_cqe_comp_en=1,rxq_pkt_pad_en=1,txq_inline_max=0,txq_inline_mpw=0,txqs_min_inline=1,txq_mpw_en=1 -- -i --rss-ip --nb-cores=1 --burst=128 --txq=3 --rxq=3 --mbcache=512 --rxd=1024 --txd=1024 -a

CMD-1(内联模式)和CMD-2(非内联模式)单核的Rx/Tx比较如下:

CoreMppsCMD-1(inline mode)CMD-2(non-inline mode)
1Rx28.568.1
Tx28.563.2
6Rx148.8148.8
Tx148.160.2

当PPS值不高时,推荐使用CMD-2; PPS值较高时,推荐使用CMD-1。


Some useful commands of testpmd:

show port stats all – Display the statistics data of each port

show fwd stats all – Display the forward statistics of each port

clear port stats all – Clear the statistics data of each port


您可以通过增加核心数和txq/rxq数来实现线路速率。下面的截图显示Rx-pps和Tx-pps都是148.8Mpps。

testpmd_DPDK.jpg

有关dpdk-testpmd命令行选项的更多详细信息,请参考Testpmd应用程序用户指南

有关Mellanox CX5和CX6的轮询模式驱动程序(pmd)的详细信息,请参见“MLX5轮询模式驱动程序”。

参考信息
  1. https://network.nvidia.com/products/infiniband-drivers/linux/mlnx_ofed
  2. https://www.kernel.org/doc/html/latest/arm64/hugetlbpage.html
  3. https://doc.dpdk.org/guides/testpmd_app_ug/
  4. https://doc.dpdk.org/guides-19.11/nics/mlx5.html
  5. https://pktgen-dpdk.readthedocs.io/en/latest/
Created At : June 2nd 2023, 6:14:32 pm
Last Updated At : January 10th 2024, 5:57:01 pm
Ampere Logo

Ampere Computing

4655 Great America Parkway

Suite 601 Santa Clara, CA 95054

image
image
 |  |  |  |  |  | 
© 2022 Ampere Computing LLC. All rights reserved. Ampere, Altra and the A and Ampere logos are registered trademarks or trademarks of Ampere Computing.
This site is running on Ampere Altra Processors.