如何在DPDK test-pmd中实现NIC队列的负载均衡
解决DPDK test-pmd中VMXNET3队列负载不均的实操步骤
一、修正test-pmd启动参数
当前启动参数存在portmask与portlist的冲突,先调整为正确的启动命令,同时开启RSS分流规则:
sudo ./dpdk-testpmd -l 0-7 -n 4 -- -i --portlist=0,1 --nb-cores=6 --txq=8 --rxq=8 --rss-ip --rss-udp --rss-tcp
参数说明:
-l 0-7:核0作为主核,核1-7用于数据包处理--portlist=0,1:明确启用两块VMXNET3网卡对应的Port0和Port1--nb-cores=6:分配6个从核负责队列的数据包转发--txq=8 --rxq=8:保持每个端口8个收发队列的配置--rss-*:开启基于IP、UDP、TCP报文的RSS硬件分流
二、test-pmd shell内配置队列映射与RSS
- 检查当前端口RSS状态:
show port rss all
- 配置RSS哈希密钥(增强哈希随机性,两块端口保持一致):
set port rss key 0 0x0102030405060708090a0b0c0d0e0f10 set port rss key 1 0x0102030405060708090a0b0c0d0e0f10
- 为端口启用指定协议的RSS分流:
set port rss ip 0 enable set port rss udp 0 enable set port rss tcp 0 enable set port rss ip 1 enable set port rss udp 1 enable set port rss tcp 1 enable
- 手动绑定RX队列到不同核(避免队列集中在单一核):
针对Port0的8个RX队列:
set port rx queue mapping 0 0 1 set port rx queue mapping 0 1 2 set port rx queue mapping 0 2 3 set port rx queue mapping 0 3 4 set port rx queue mapping 0 4 5 set port rx queue mapping 0 5 6 set port rx queue mapping 0 6 7 set port rx queue mapping 0 7 1
针对Port1的8个RX队列:
set port rx queue mapping 1 0 2 set port rx queue mapping 1 1 3 set port rx queue mapping 1 2 4 set port rx queue mapping 1 3 5 set port rx queue mapping 1 4 6 set port rx queue mapping 1 5 7 set port rx queue mapping 1 6 1 set port rx queue mapping 1 7 2
- 验证队列映射配置:
show port rx queue mapping all
三、启动转发并确认负载均衡
- 启动转发:
start
- 查看队列统计,确认流量分散:
show port stats all show port xstats all
重要提示
- 确保VMware ESXi层面已为虚拟机网卡开启RSS功能,VMXNET3依赖硬件RSS实现队列分流
- 测试流量需包含不同五元组(源IP/端口、目的IP/端口),单一五元组的流量只会被哈希到一个队列
内容的提问来源于stack exchange,提问作者Fateen Najib Indramustika
相关产品推荐
相关产品推荐

