在DPDK testpmd中如何配置两张网卡间的环路转发模式?
Hyper-V环境netvsc PMD测试无收发报文解决方案
1. 前置环境校验
- 确认已加载uio_hv_generic内核模块:执行
modprobe uio_hv_generic加载,用lsmod | grep uio_hv_generic验证加载状态 - 确认两张测试网卡已绑定到uio_hv_generic驱动,未被内核网络栈占用:执行
dpdk-devbind.py --status查看绑定状态,若仍绑定到内核驱动,先执行ip link set 网卡名 down关闭内核态网卡,再用dpdk-devbind.py --bind=uio_hv_generic 网卡PCI地址完成绑定 - 确认Hyper-V层面已为两张虚拟机网卡开启MAC地址欺骗选项:默认Hyper-V会丢弃源MAC非虚拟机自身配置MAC的报文,未开启会导致转发报文被vswitch直接丢弃
- 确认internal virtual switch未配置额外的端口隔离、ACL规则限制两张网卡之间的报文转发
2. Testpmd启动参数调整
当前启动参数缺少必要的大页配置校验,调整后的启动命令参考:
./app/dpdk-testpmd -l 2,3 --socket-mem 1024 -- --total-num-mbufs=2048 -i --portmask=0x3 --port-topology=loop
- 新增
--socket-mem 1024参数确保分配足够大页内存,避免mbuf分配失败导致无收发 - 启动后先执行
show port info all确认两个端口均被识别为netvsc PMD驱动,端口状态为up,若端口状态为down,先执行set promisc all on开启混杂模式,再执行port start all手动拉起端口
3. 转发测试配置调整
默认io转发模式需要先收到报文才会转发,start tx_first默认只会发送一次burst报文,无后续报文触发转发自然看不到计数,按以下步骤操作验证:
- 进入testpmd交互模式后,先设置转发模式为io模式:
set fwd io - 开启报文发送校验:
set txpkts 64固定发送64字节报文 - 执行
start tx_first 32连续发送32次burst报文,触发双向转发 - 等待5秒后执行
show port stats all查看计数,正常情况下port0的Tx计数等于port1的Rx计数,port1的Tx计数等于port0的Rx计数
如果还是无计数,可临时配置转发模式为set fwd macswap,再重新执行启动命令验证,该模式对二层转发的兼容性更好,适配Hyper-V vswitch的转发规则。
内容的提问来源于stack exchange,提问作者lxyscls
相关产品推荐
相关产品推荐

