如何使用Pktgen生成64B包长100Mpps流量?脚本性能受限求优化
问题排查与优化建议
一、脚本存在的明显错误
你当前的lua脚本存在参数配置错位的问题,是性能不达标的核心原因之一:
-- 原错误配置 pktgen.set(sendport, "size", burst_cnt); -- 你把包长参数设为了128,而非你想要的64 pktgen.set(sendport, "burst", 64); -- 你把单次发送的突发包数设为了64,而非你定义的128
修正后的配置为:
pktgen.set(sendport, "size", pkt_size); pktgen.set(sendport, "burst", burst_cnt);
二、运行参数优化
- 核心隔离与绑定:不要将逻辑核0分配给pktgen使用,核0默认处理系统中断与调度任务,会带来额外开销。建议提前在系统内核启动参数中添加
isolcpus=1-8 nohz_full=1-8 rcu_nocbs=1-8隔离指定核心,运行命令修改为:sudo pktgen -l 1-8 -n 4 -- -N -P -m "[1-4].0" -f script.lua - 关闭多余功能:测试性能时去掉
-T参数,该参数用于开启终端动态UI显示,会占用大量CPU资源,影响转发性能。 - 多队列映射:ConnectX-5 100G网卡单队列最高只能达到约40Mpps的64B小包转发性能,你当前35Mpps正好是单队列单核的性能水平。建议将发送端口0绑定到多个核心的多队列上,比如
[1-4].0表示给端口0分配4个队列,分别绑定核1~4,充分利用多核能力。
三、系统与网卡层面优化
- 大页配置:使用1G大页替代默认的2M大页,至少配置16G以上的1G大页,减少TLB miss开销,提升内存访问效率。
- 网卡参数调整:用ethtool关闭网卡的LRO、GRO、TSO等大包offload功能,关闭网卡节能模式,将PCIe最大 payload 设置为4096。
- 驱动与编译优化:使用对应版本的MLNX_OFED官方驱动,编译DPDK和pktgen时开启
-O3最高优化等级,开启mlx5 PMD的多队列、快速发送等特性。
调整后64B小包的发送性能可以达到140~180Mpps,接近网卡标称的200Mpps上限。
内容的提问来源于stack exchange,提问作者SoliRaven
相关产品推荐
相关产品推荐

