OVS-DPDK搭配Intel SR-IOV虚拟功能(VF)使用时发包报错问题咨询
OVS-DPDK对接Intel X710 SR-IOV VF端口TX报错问题分析
问题复现操作步骤
- 网卡端口绑定UIO驱动:物理功能(PF)端口绑定
igb_uio,虚拟功能(VF)端口绑定vfio_pci - 将绑定完成的DPDK端口添加到OVS,命名为
dpdkport - 向OVS添加vhostuser端口
- 配置流规则,将报文从vhostuser端口转发到
dpdkport - 运行pktgen或testpmd等DPDK报文生成工具向vhostuser端口发流,报文经OVS转发后通过
dpdkport发送到物理网卡
问题现象
上述流程对接PF端口时运行完全正常,切换为SR-IOV VF端口后报文发送全部失败。通过ovs-ofctl dump-ports查看端口统计,TX方向错误数暴涨,无成功发送报文。
错误日志
执行命令:
ovs-ofctl dump-ports ovs-br0 dpdk-p0
返回结果:
OFPST_PORT reply (xid=0x4): 1 ports port "dpdk-p0": rx pkts=0, bytes=0, drop=0, errs=0, frame=?, over=?, crc=? tx pkts=0, bytes=0, drop=0, errs=317971312, coll=?
根因排查方向
1. VF权限配置问题
X710的VF默认未开启杂合模式、VLAN过滤允许、MAC地址修改权限,如果OVS转发的报文目的MAC不是VF的默认MAC、或者带VLAN标签,会被VF硬件直接丢弃,表现为TX err计数上涨。
解决办法:在PF所在宿主机执行命令配置VF权限,以PF为eth0、VF编号为0为例:
ip link set eth0 vf 0 trust on ip link set eth0 vf 0 spoofchk off ip link set eth0 vf 0 promisc on
2. DPDK驱动兼容性问题
确认使用的DPDK版本与i40e PMD驱动版本匹配X710网卡的固件版本,X710 VF在老版本DPDK中存在TX队列初始化异常的已知问题,建议将网卡固件升级到6.8以上版本,DPDK升级到19.11 LTS及以上版本。
3. OVS DPDK端口配置问题
检查OVS添加DPDK端口时的配置参数,是否指定了错误的队列数、MTU值:
- VF的队列数不能超过该VF分配的最大队列数,X710单个VF默认最大队列数为4
- 如果发送报文长度超过VF配置的MTU,也会被直接丢弃触发TX err
4. 大页配置一致性问题
确认OVS、DPDK报文生成工具使用的大页尺寸、大页内存节点一致,跨NUMA节点访问大页内存会导致报文传输失败,VXLAN/GRE等隧道报文还会因为分片错误触发硬件丢弃。
内容的提问来源于stack exchange,提问作者Micheal XIV
相关产品推荐
相关产品推荐

