3

我正在使用 dpdk 库来增强数据包捕获。要使用 dpdk,我们需要将至少一个 NIC 绑定到 dpdk 驱动程序。正如 dpdk 文档中所写,我可以使用 uio_pci_generic 或 igb_ko 驱动程序。

为了与 dpdk 驱动程序绑定,他们提供了一个 python 脚本: http ://www.dpdk.org/browse/dpdk/plain/tools/dpdk_nic_bind.py

我的系统中有两个英特尔 NIC,英特尔 82579LM 和英特尔 82540EM。如http://dpdk.org/doc/nics中给出的,Intel 82540EM 是带有驱动程序 e1000 的受支持的 NIC。

现在,问题是我无法将Intel 82540EM与 dpdk 驱动程序绑定。我做了以下步骤:

  1. ifdown INTERFACE_NAME
  2. modprobe uio_pci_generic(或 insmod igb_ko)
  3. dpdk_nic_bind.py --bind=uio_pci_generic PCI_ID_OF_NIC

这将打印错误'Error: bind failed for PCI_ID_OF_NIC - Cannot bind to driver uio_pci_generic'。所以我尝试手动绑定它。我做了以下步骤来手动绑定网卡:

  1. ifdown INTERFACE_NAME
  2. modprobe uio_pci_generic(或 insmod igb_ko)
  3. echo "PCI_ID_OF_NIC" > /sys/bus/pci/drivers/e1000/unbind
  4. echo "PCI_ID_OF_NIC" > /sys/bus/pci/drivers/uio_pci_generic/bind

即使这样,我也会收到“bash: echo: write error: No such device”错误。我用 Intel 82579LM 尝试了相同的步骤,它完美绑定,但不幸的是它不是受支持的 NIC。

我究竟做错了什么?

[根据评论请求编辑更新Output of lspci -vnnk 01:02.0]

Ethernet controller [0200]: Intel Corporation 82540EM Gigabit Ethernet Controller [8086:100e] (rev 02) 
Subsystem: Intel Corporation PRO/1000 MT Desktop Adapter [8086:002e] 
Kernel driver in use: e1000 
Kernel modules: e1000 

00:19.0 Ethernet controller [0200]: Intel Corporation 82579LM Gigabit Network Connection [8086:1502] (rev 04) 
Subsystem: Dell Device [1028:052c] Kernel driver in use: e1000e 
Kernel modules: e1000e
4

1 回答 1

0

我成功地使用 igb_uio 和 uio_pci_generic 将模拟 NIC 与 DPDK 一起使用。详情分享如下。

  • 带有 igb_uio 的 NIC:成功
  • 带有 uio_pci_generic 的 NIC:成功
  • Intel 82540EM:虚拟机中的模拟网卡
  • DPDK 版本:stable-18.11.6
  • 测试应用程序:l2fwd
  • 命令:./build/l2fwd -w [pcie bdf of the NIC in VM] -- -p 0x1 -T 1

通过使用完整的 PCIe [S:B:D:F] 即为echo "0000:00:19.0" > /sys/bus/pci/drivers/e1000/unbind我工作

于 2020-08-13T01:12:32.823 回答