正常情况下, ODP 在对eth口收发包时, 要先在脚本中对eth口进行绑定:
vfio-devbind.sh -b vfio-pci 0002:02:00.0
0002:02:00.0 表示eth0 的bdf 号.
有一个问题, 这样操作后, eth0在linux的ifconfig就不能显示了, 就不能配置IP 用于socket了.
如何能ODP 使用了也还可以用于socket 呢?
用以下配置虚拟一个设备出来:
echo 1 > /sys/class/net/eth0/device/sriov_numvfs
ODP 绑定的时候用:(如果不绑定, 这个会在ifconfig -a中显示出来, 作为普通的eth口使用)
vfio-devbind.sh -b vfio-pci 0002:02:00.1
这样可以实现.
注意:
ODP 在初始化eth port的时候, 不能打开混杂模式, 不然ODP, 和 socket都不能正常使用.
说明一下, 为什么要关闭混杂模式:
之前设置的原因, 主要是ODP 的demo 代码中就有这一行.没有去掉. 能用的情况下, 就忽略了.
后边发生了问题, 看源码发现sriov VF中设置了混杂模式后, 是对底层硬件npc 资源进行了设置, 这个npc 资源对于PF, VF 都在用, 这样就导致 了eth0 的VF 配置了混杂模式后, 把PF 应该要收的包也收了. 这样原因就找到了.
博客内容讲述了在使用ODP(Offload Data Plane)时遇到的问题,即在对eth口进行vfio绑定后,eth0在ifconfig下消失,无法配置IP用于socket通信。解决方案是通过启用sriov并创建虚拟功能VF,将VF绑定给ODP使用,而保留PF用于常规socket通信。需要注意的是,初始化ethport时不能开启混杂模式,因为这会导致PF和VF之间的资源冲突。
549

被折叠的 条评论
为什么被折叠?



