基于DPDK的网卡三层单端口自发自收转发性能测试

测试目的

使用DPDK自带L3fwd测试程序测试网卡单端口自发自收下数据包三层转发性能。

预置条件

  1. 测试流量生成工具(Test Center)。
  2. 适配网卡的网卡驱动。
  3. 服务器已经安装Linux操作系统并安装对应网卡的DPDK l3fwd应用,并优化BIOS配置。

    按照测试组网3将测试仪与被测服务器网卡端口分别连接(测试拓扑参考附录,组网3.1)。

  4. 操作系统下可进行调优设置,如修改内存巨页、设置CPU 节能选项、设置PCIe内核引导选项、设置内核iommu引导选项设置NUMA选项、关闭超线程等。
  5. DPDK测试可优化L3fwd setting,参考如下

    Modified /l3fwd/main.c:85:

    #define RTE_TEST_RX_DESC_DEFAULT 2048

    #define RTE_TEST_TX_DESC_DEFAULT 2048 (DPDK RTE套件里的描述符,用来放报文的一张儿缓存)

    Modified /l3fwd/l3fwd.h:47:

    #define MAX_PKT_BURST 64

    注:描述符大小与网卡的cache有关,各网卡值可不相同。

测试步骤

  1. 编译L3fwd测试用例。
  2. 启动运行L3fwd测试程序。
  3. 测试模型采用:

    Traffic_Gen_Nic1->eth0-Test_Device-eth0->Traffic_Gen_Nic1

  4. 以单端口模式运行L3fwd: ./build/l3fwd -l 1,2,3,4 -n 4 -- -P -p 0x1 --config=”(0,0,1),(0,1,2),(0,2,3),(0,3,4)”

    其中 -p 0x1 表示使用绑定网口中的第一个口进行测试;-l lcore 指程序要用到的内核,之间用逗号隔开;-n NUM:十进制整数表示内存通道数量; --config 配置端口及端口队列绑定对应的Cpu core;-l指定内核自行设置、-n 内存通道数可自行设置、--config可自行配置端口绑定CPU核数。

  5. 用包发生器指定对应端口的IP地址向被测试的设备端口注入流量,流量的包长为64B。包发生器发包的过程中逐包变化数据包的目的IP地址跳变,构造不同的业务流量,通过测试仪表检测在丢包率设为0.001%情况下的网络吞吐,记录转发性能数据及平均时延。
  6. 使用流程生成设备向被测设备的端口注入流量,将数据包大小换为128B、256B、512B,1024,1280,1518,重复执行上述步骤,设置CPU核数使被测设备直至取达到线速(或无法超越的某带宽最大值)的结果。
  7. 分别在ARM服务器平台和x86服务器平台重复以上步骤进行测试。

预期结果

  1. 记录网卡单端口自发自收情况下不同大小的数据包的时候丢包率≤1.0E-5、平均时延抖动≤600ns/200ns时的最大吞吐量转发性能数据。(丢包率及抖动指标需确认)
  2. 记录预期结果所使用的CPU核数。

测试结果

-

备注

  • 考察对象:
    • 考察单核最大网络处理性能。
    • 考察多核最大网络处理性能,以及所需的核数比例(例如,8C/64C)。
  • 测试

    ./l3fwd -c 0xX –n X -- -q X -p 0xX –config=”(X,X,X),(X,X,X)”

    参数解析:

    L3fwd [EAL options] -- -p --config(a,b,c)

    EAL options:

    DPDK EAL的默认参数,必须参数为-c COREMASK -n NUM。

    COREMASK:一个十六进制位掩码表示分配的逻辑内核数量。

    NUM:一个十进制整数表示内存通道数量。

    --: EAL命令行参数和程序运行参数分隔符

    -q:为每端口配置的队列数

    -p PORTMASK

    PORTMASK:一个十六进制位掩码表示分配的端口数量。

    -P 参数:(可选参数),开启混杂模式,开启后发任意目的mac地址包都能收到,不开启则端口只能收到目的mac地址为本端口mac地址的包。

    --config 配置端口及端口队列绑定对应的Cpu core

    其中:a: 端口号,b:端口队列号, c:cpu core number

    isolcpus Linux 内核参数来将其与通用的Linux调度程序隔离开来。

  • 测试仪的基本设置考虑:

    Spirent等测试仪向服务器打流量,测试时长1分钟,记录丢包率≤1.0E-5时的吞吐量A1、平均转发时延B1(采用二分法在4Gbps到10Gbps区间打流,A1=丢包率≤1.0E-5、平均时延抖动≤600ns/200ns时的最大吞吐量,B1=同一次测试中前三次成功打流(Result为PASSED)的平均转发时延的平均值(如不足三次,取全部PASSED的值计算))。另外,单端口自发自收和单流双端口的端口转发设置是通过在测试仪表端配置DESTINATION的IP路由与L3fwd程序里面的端口路由一致,来设置哪个网口去转发出从测试仪表接收到的流。

  • dpdk的网卡内核态驱动换成igb要求(具体以网卡要求为准):

    sudo modprobe uio

    sudo insmod /dpdk-stable-19.11.3/build/kmod/igb_uio.ko

    sudo /dpdk-stable-19.11.3/usertools/dpdk-devbind.py -b igb_uio 41:00.0 61:00.0(所有被测的网卡bus总线号)