如何用Pktgen结合DPDK生成100GbE流量及驱动相关疑问
问题解答
1. 启动100GbE流量生成的必要操作
按以下步骤逐一排查配置,确保每个环节正确:
(1)确认DPDK基础环境就绪
- 大页内存配置:执行
grep HugePages_Total /proc/meminfo查看已分配大页数量,100G网卡建议至少分配4096个2M大页。若不足,编辑/etc/default/grub,在GRUB_CMDLINE_LINUX后添加:
执行default_hugepagesz=2M hugepagesz=2M hugepages=4096 amd_iommu=on iommu=ptupdate-grub后重启服务器生效。 - 加载vfio-pci驱动:执行
modprobe vfio-pci,再用lsmod | grep vfio确认模块已加载。 - 绑定网卡到vfio-pci:
- 用
lspci -d 8086:查找Intel E810网卡的PCI地址(E810常见PCI ID为8086:1592),输出类似01:00.0 Ethernet controller: Intel Corporation Ethernet Controller E810-C for QSFP。 - 用DPDK工具解绑原驱动(如ice)并绑定到vfio-pci:
dpdk-devbind.py --bind=vfio-pci 01:00.0 - 执行
dpdk-devbind.py --status确认网卡状态为drv=vfio-pci unused=ice。
- 用
(2)正确启动Pktgen
针对双AMD EPYC的NUMA架构,必须将网卡与同NUMA节点的核心绑定才能跑满100G带宽,示例启动命令(假设网卡在NUMA节点0,核心0-7归属于该节点):
./pktgen -l 0-7 -n 4 --socket-mem 2048,2048 --file-prefix pktgen -- -P -m "[0-3:4-7].0"
参数说明:
-l 0-7:指定使用的CPU核心范围-n 4:匹配服务器内存通道数--socket-mem 2048,2048:给NUMA节点0和1各分配2G大页内存-P:开启端口混杂模式-m "[0-3:4-7].0":将端口0的接收队列绑定到核心0-3,发送队列绑定到核心4-7
(3)Pktgen内部配置与流量触发
进入Pktgen交互界面后:
- 输入
show port info all,确认端口状态为Link up - 100000 Mbps Full Duplex - 配置目标MAC:
set mac dst 0 <目标设备MAC地址> - 设置包长:
set size 0 1500(可根据需求调整) - 设置发送速率:
set rate 0 100(100%带宽发送) - 启动流量:输入
start 0,再用show port stats 0查看发送统计,确认tx-packets数值持续增长
2. 网卡绑定vfio-pci后接口不显示的原因
- 脱离内核网络栈管理:当网卡绑定到vfio-pci后,原Linux内核驱动(如ice)会被解绑,
ifconfig/ip addr等工具依赖内核驱动识别接口,因此无法看到该接口——此时网卡已完全由DPDK用户态驱动接管,不再属于内核网络栈。 - DPDK工具无法识别的额外原因:
- PCI地址输入错误:重新用
lspci确认网卡的PCI地址,确保绑定命令中的地址正确。 - IOMMU未开启:AMD EPYC需在BIOS中开启IOMMU功能,同时grub参数需添加
amd_iommu=on iommu=pt,否则vfio-pci无法正常接管网卡。 - DPDK环境变量未配置:未设置
RTE_SDK和RTE_TARGET环境变量,导致dpdk-devbind.py无法正确识别DPDK驱动接管的网卡,执行以下命令配置:export RTE_SDK=/path/to/your/dpdk-21.11.0 export RTE_TARGET=x86_64-native-linux-gcc
- PCI地址输入错误:重新用
内容的提问来源于stack exchange,提问作者adastra
相关产品推荐
相关产品推荐

