我正在使用 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 驱动程序绑定。我做了以下步骤:
- ifdown INTERFACE_NAME
- modprobe uio_pci_generic(或 insmod igb_ko)
- 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'。所以我尝试手动绑定它。我做了以下步骤来手动绑定网卡:
- ifdown INTERFACE_NAME
- modprobe uio_pci_generic(或 insmod igb_ko)
- echo "PCI_ID_OF_NIC" > /sys/bus/pci/drivers/e1000/unbind
- 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