语境
我正在尝试运行数据包生成器 MoonGen,但它要求我将 NIC 绑定到 VFIO-PCI 驱动程序。因此,我必须先将 NIC 从其当前驱动程序解除绑定,然后将其与 VFIO-PCI 驱动程序重新绑定。
解除绑定
我首先解除 PCI 地址为 0000:03:00.1 的 NIC 与当前驱动程序 mlx5_core 的绑定:
$ echo -n "0000:03:00.1" > /sys/bus/pci/drivers/mlx5_core/unbind
dmesg 在另一个窗口中运行,报告:
[Aug30 23:36] mlx5_3:wait_for_async_commands:735:(pid 1605): done with all pending requests
[ +0.048579] (0000:03:00.1): E-Switch: cleanup
这让我相信一切都进展顺利,并且使用 DPDK 的 devbind 模块和 ifconfig 提供的工具,我确信我的 NIC 已解除绑定。
捆绑
现在,我尝试通过提示将我的 NIC 与 VFIO-PCI 驱动程序绑定:
$ echo -n "0000:03:00.1" > /sys/bus/pci/drivers/vfio-pci/bind
返回了错误消息:
bash: echo: write error: No such device
查看 dmesg 报告,其中指出:
[Aug31 03:37] vfio-pci: probe of 0000:03:00.1 failed with error -22
问题
研究了错误信息一段时间后,我还是没搞明白它的含义。有人知道发生了什么吗?
答案1
事实证明,问题是我必须为我的 Mellanox MT27710 ConnectX-4 NIC 预先安装 Mellanox OFED。
对于有同样问题且拥有 NIC 或其他 Mellanox NIC(仅限于 MLX4 和 MLX5,因为它们是唯一与 DPDK 兼容的 Mellanox NIC)的任何人,https://community.mellanox.com/s/article/how-to-install-mellanox-ofed-on-linux--rev-4-4-2-0-7-0-x是关于如何解决此问题的宝贵资源。