DPDK testpmd通过vhost-user向QEMU virtio虚拟机发报文全丢问题求助
排查步骤
1. 确认虚拟机侧RX队列有可用缓冲区
你当前仅在虚拟机内开启了网卡混杂模式,没有运行任何收包程序占用virtio RX队列的描述符,会导致virtio vring中没有可用的接收缓冲区,host侧vhost PMD发送时找不到可写入的内存空间,所有报文直接被统计为TX丢弃。
修复操作:在虚拟机内执行如下命令启动收包程序,占用RX队列缓冲区:
# 任选其一即可 tcpdump -i eth0 # 若虚拟机内也安装了DPDK,也可运行testpmd收包
2. 配置testpmd txonly模式的目标MAC地址
DPDK 19.08版本testpmd的txonly模式默认生成的报文目的MAC并非虚拟机virtio网卡的MAC,即使虚拟机开了混杂模式,也建议明确指定对端MAC避免底层过滤逻辑丢包:
在testpmd交互终端执行:
testpmd> set eth-peer 0 52:54:00:00:00:14 testpmd> port stop 0 testpmd> port start 0
3. 关闭发送侧校验和卸载验证
部分版本vhost PMD默认开启TX校验和卸载,若txonly生成的报文未正确填充校验和字段会被直接丢弃,可临时关闭校验和卸载验证:
testpmd> port config 0 tx_offload csum off testpmd> port stop 0 testpmd> port start 0
4. 验证测试
重新执行txonly发送测试:
testpmd> set fwd txonly testpmd> start
运行30秒后停止查看统计,正常情况下TX-packets会有计数,TX-dropped计数为0或仅个位数。
内容的提问来源于stack exchange,提问作者weiping
相关产品推荐
相关产品推荐

