如何解决DPDK 端口数必须是偶数
我花了一些时间试图找出如何解决“端口数必须偶数”错误。我看过 this answer ,它解释了如何在 VM 中运行 DPDK。我想知道是否有一种不需要的解决方案。
我的平台:Debian 10、Linux 5.8(在笔记本电脑上)带有 e1000e 网卡驱动
我想要做的:使骨架(basicfwd)应用程序工作
我的问题:rte_eth_dev_count_avail 返回 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 推荐的物理网卡。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。