DPDK端口数必须是偶数
DPDK Number of ports must be even
我花了一些时间试图弄清楚如何修复“端口数必须是偶数”错误。我看过 this answer,它解释了如何在 VM 中 运行 DPDK。我想知道是否有不需要的解决方案。
我的平台:Debian 10,Linux 5.8(在笔记本电脑上),带有 e1000e NIC 驱动程序
我想做的事:使框架 (basicfwd) 应用正常工作
我的问题:rte_eth_dev_count_avail returns 0
到目前为止我做了什么:I followed the documentation 并尝试为我的以太网设备设置 vfio_pci 驱动程序。
两件事:
当我将设备与 vfio_pci 驱动程序绑定时,它会丢失其 IP
界面
我无法创建 VF 设备,因为我无法写入 /sys/bus/pci/devices/ 即使我 su root
骨架程序无法使用此功能,因此我尝试使用其他驱动程序。
我将设备绑定到 uio_pci_generic 驱动程序。它确实绑定到它,但该应用程序仍然无法运行。这是 dpdk-devbind.py --status
输出:
Network devices using DPDK-compatible driver
============================================
0000:00:1f.6 'Device 0d4f' drv=uio_pci_generic unused=e1000e
启动程序时发生了什么:
$ sudo ./build/examples/dpdk-skeleton -l 0-3 -n 4 -a 0000:00:1f.6
EAL: Detected 8 lcore(s)
EAL: Detected 1 NUMA nodes
EAL: Detected static linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'VA'
EAL: Probing VFIO support...
EAL: No legacy callbacks, legacy socket not created
EAL: Error - exiting with code: 1
Cause: Error: number of ports must be even
感谢阅读,如有任何帮助我们将不胜感激!
在 VM 中,我可以通过以下步骤绑定 e1000
- 使用
82540EM Gigabit Ethernet Controller
启动 VM
- 下载并构建 DPDK 21.02
- insmod igb_uio 或 modprobe uio_pci_generic
- 与 vfio-pci 的绑定失败
vfio-pci: probe of 0000:00:08.0 failed with error -22
- 使用
./a.out -l 1 --log-level=pmd,8
启动应用程序
构建应用程序:gcc basicfwd.c $(pkg-config --libs --cflags --static libdpdk
日志:
e1000_null_phy_generic(): e1000_null_phy_generic
e1000_read_phy_reg_m88(): e1000_read_phy_reg_m88
e1000_null_ops_generic(): e1000_null_ops_generic
e1000_read_phy_reg_mdic(): e1000_read_phy_reg_mdic
e1000_null_phy_generic(): e1000_null_phy_generic
e1000_read_phy_reg_m88(): e1000_read_phy_reg_m88
e1000_null_ops_generic(): e1000_null_ops_generic
e1000_read_phy_reg_mdic(): e1000_read_phy_reg_mdic
e1000_null_phy_generic(): e1000_null_phy_generic
e1000_setup_copper_link_generic(): Unable to establish link!!!
e1000_setup_link_generic(): Initializing the Flow Control address, type and timer regs
e1000_set_fc_watermarks_generic(): e1000_set_fc_watermarks_generic
e1000_clear_hw_cntrs_82540(): e1000_clear_hw_cntrs_82540
e1000_clear_hw_cntrs_base_generic(): e1000_clear_hw_cntrs_base_generic
e1000_check_for_copper_link_generic(): e1000_check_for_copper_link
e1000_phy_has_link_generic(): e1000_phy_has_link_generic
e1000_read_phy_reg_m88(): e1000_read_phy_reg_m88
e1000_null_ops_generic(): e1000_null_ops_generic
e1000_read_phy_reg_mdic(): e1000_read_phy_reg_mdic
e1000_null_phy_generic(): e1000_null_phy_generic
e1000_read_phy_reg_m88(): e1000_read_phy_reg_m88
e1000_null_ops_generic(): e1000_null_ops_generic
e1000_read_phy_reg_mdic(): e1000_read_phy_reg_mdic
e1000_null_phy_generic(): e1000_null_phy_generic
e1000_null_ops_generic(): e1000_null_ops_generic
eth_em_dev_init(): port_id 0 vendorID=0x8086 deviceID=0x100e
注意:未修改的骨架需要偶数个端口才能正常工作。
因此 e1000 和 DPDK 可用性没有问题
[EDIT-1] 与 Jeremy 进行了实时调试,该问题现在在具有物理 NIC(未模拟的 e1000)的物理机器上重现。检查 PCIe 详细信息,物理 NIC 不在支持的列表中 Intel DPDK NIC。请求使用 DPDK 推荐的物理网卡。
我花了一些时间试图弄清楚如何修复“端口数必须是偶数”错误。我看过 this answer,它解释了如何在 VM 中 运行 DPDK。我想知道是否有不需要的解决方案。
我的平台:Debian 10,Linux 5.8(在笔记本电脑上),带有 e1000e NIC 驱动程序
我想做的事:使框架 (basicfwd) 应用正常工作
我的问题:rte_eth_dev_count_avail returns 0
到目前为止我做了什么:I followed the documentation 并尝试为我的以太网设备设置 vfio_pci 驱动程序。
两件事:
当我将设备与 vfio_pci 驱动程序绑定时,它会丢失其 IP 界面
我无法创建 VF 设备,因为我无法写入 /sys/bus/pci/devices/ 即使我
su root
骨架程序无法使用此功能,因此我尝试使用其他驱动程序。
我将设备绑定到 uio_pci_generic 驱动程序。它确实绑定到它,但该应用程序仍然无法运行。这是 dpdk-devbind.py --status
输出:
Network devices using DPDK-compatible driver
============================================
0000:00:1f.6 'Device 0d4f' drv=uio_pci_generic unused=e1000e
启动程序时发生了什么:
$ sudo ./build/examples/dpdk-skeleton -l 0-3 -n 4 -a 0000:00:1f.6
EAL: Detected 8 lcore(s)
EAL: Detected 1 NUMA nodes
EAL: Detected static linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'VA'
EAL: Probing VFIO support...
EAL: No legacy callbacks, legacy socket not created
EAL: Error - exiting with code: 1
Cause: Error: number of ports must be even
感谢阅读,如有任何帮助我们将不胜感激!
在 VM 中,我可以通过以下步骤绑定 e1000
- 使用
82540EM Gigabit Ethernet Controller
启动 VM
- 下载并构建 DPDK 21.02
- insmod igb_uio 或 modprobe uio_pci_generic
- 与 vfio-pci 的绑定失败
vfio-pci: probe of 0000:00:08.0 failed with error -22
- 使用
./a.out -l 1 --log-level=pmd,8
启动应用程序
构建应用程序:gcc basicfwd.c $(pkg-config --libs --cflags --static libdpdk
日志:
e1000_null_phy_generic(): e1000_null_phy_generic
e1000_read_phy_reg_m88(): e1000_read_phy_reg_m88
e1000_null_ops_generic(): e1000_null_ops_generic
e1000_read_phy_reg_mdic(): e1000_read_phy_reg_mdic
e1000_null_phy_generic(): e1000_null_phy_generic
e1000_read_phy_reg_m88(): e1000_read_phy_reg_m88
e1000_null_ops_generic(): e1000_null_ops_generic
e1000_read_phy_reg_mdic(): e1000_read_phy_reg_mdic
e1000_null_phy_generic(): e1000_null_phy_generic
e1000_setup_copper_link_generic(): Unable to establish link!!!
e1000_setup_link_generic(): Initializing the Flow Control address, type and timer regs
e1000_set_fc_watermarks_generic(): e1000_set_fc_watermarks_generic
e1000_clear_hw_cntrs_82540(): e1000_clear_hw_cntrs_82540
e1000_clear_hw_cntrs_base_generic(): e1000_clear_hw_cntrs_base_generic
e1000_check_for_copper_link_generic(): e1000_check_for_copper_link
e1000_phy_has_link_generic(): e1000_phy_has_link_generic
e1000_read_phy_reg_m88(): e1000_read_phy_reg_m88
e1000_null_ops_generic(): e1000_null_ops_generic
e1000_read_phy_reg_mdic(): e1000_read_phy_reg_mdic
e1000_null_phy_generic(): e1000_null_phy_generic
e1000_read_phy_reg_m88(): e1000_read_phy_reg_m88
e1000_null_ops_generic(): e1000_null_ops_generic
e1000_read_phy_reg_mdic(): e1000_read_phy_reg_mdic
e1000_null_phy_generic(): e1000_null_phy_generic
e1000_null_ops_generic(): e1000_null_ops_generic
eth_em_dev_init(): port_id 0 vendorID=0x8086 deviceID=0x100e
注意:未修改的骨架需要偶数个端口才能正常工作。
因此 e1000 和 DPDK 可用性没有问题
[EDIT-1] 与 Jeremy 进行了实时调试,该问题现在在具有物理 NIC(未模拟的 e1000)的物理机器上重现。检查 PCIe 详细信息,物理 NIC 不在支持的列表中 Intel DPDK NIC。请求使用 DPDK 推荐的物理网卡。