DPDK:Rx 卸载功能有问题
DPDK: Problem with Rx offloads capabilities
我正在尝试设置环境以测试在 P4 language, using t4p4s 中编写的程序作为编译器。当用t4p4s编译一个P4程序时,会生成一个使用DPDK的C/C++程序,依次编译并运行.
编译程序工作正常。生成的可执行文件是 运行,如下所示:
./build/l2switch -c 0xc -n 4 --no-pci --vdev net_pcap0,rx_iface_in=veth3-s,tx_iface=veth3-s,tx_iface=veth3-s --vdev net_pcap1,rx_iface_in=veth5-s,tx_iface=veth5-s,tx_iface=veth5-s -- -p 0x3 --config "\"(0,0,2)(1,0,3)\""
在 Raspberry Pi 上,这适用于我迄今为止尝试过的每个网络接口(上面命令中看到的虚拟以太网设备、内置以太网端口和 Realtek USB NIC)。
在使用虚拟以太网设备的 Ubuntu 21.04 VM 中,出现以下错误:
--- Init switch
EAL: Detected CPU lcores: 4
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
TELEMETRY: No legacy callbacks, legacy socket not created
2 :::: Allocating DPDK mbuf pool on socket 0
2 :::: Init ports
2 :::: Init port 0
2 :::: Creating queues: nb_rxq=1 nb_txq=2
Ethdev port_id=0 requested Rx offloads 0xe doesn't match Rx offloads capabilities 0x0 in rte_eth_dev_configure()
EAL: Error - exiting with code: 1
Cause: Cannot configure device: err=-22, port=0
我也曾在 Raspberry Pi 上遇到过这个问题,但它会在重新启动或多次尝试后自行修复。在 VM 上,此问题一直存在。
问题:
在这两种情况下,我都使用虚拟以太网设备作为接口。两种情况都使用相同的驱动程序和软件 NIC。我怎样才能找出 VM 和 Raspberry Pi 之间的区别?毕竟,如果没有区别,那么这两种情况都适用。
错误试图告诉我什么?我试过在网上搜索它无济于事,我对DPDK的了解非常有限。
如何解决这个问题?
解决了!
在查看文件以查找@stackinside 请求的程序列表时,我发现了一个名为“vethmode”的 t4p4s 参数。有很多这样的论点,我还没有找到它们的完整文档。打开它会导致在编译 C 程序时定义宏 T4P4S_VETH_MODE
。这反过来又改变了 struct rte_eth_conf
的组成,该 struct rte_eth_conf
稍后传递给 rte_eth_dev_configure
。
为了完整起见,here is the relevant file。
第 40 行 struct rte_eth_conf
是 defined/initialized.
第 244 行是调用 rte_eth_dev_configure
(第 261 行)失败的函数的开始。
我正在尝试设置环境以测试在 P4 language, using t4p4s 中编写的程序作为编译器。当用t4p4s编译一个P4程序时,会生成一个使用DPDK的C/C++程序,依次编译并运行.
编译程序工作正常。生成的可执行文件是 运行,如下所示:
./build/l2switch -c 0xc -n 4 --no-pci --vdev net_pcap0,rx_iface_in=veth3-s,tx_iface=veth3-s,tx_iface=veth3-s --vdev net_pcap1,rx_iface_in=veth5-s,tx_iface=veth5-s,tx_iface=veth5-s -- -p 0x3 --config "\"(0,0,2)(1,0,3)\""
在 Raspberry Pi 上,这适用于我迄今为止尝试过的每个网络接口(上面命令中看到的虚拟以太网设备、内置以太网端口和 Realtek USB NIC)。
在使用虚拟以太网设备的 Ubuntu 21.04 VM 中,出现以下错误:
--- Init switch
EAL: Detected CPU lcores: 4
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: VFIO support initialized
TELEMETRY: No legacy callbacks, legacy socket not created
2 :::: Allocating DPDK mbuf pool on socket 0
2 :::: Init ports
2 :::: Init port 0
2 :::: Creating queues: nb_rxq=1 nb_txq=2
Ethdev port_id=0 requested Rx offloads 0xe doesn't match Rx offloads capabilities 0x0 in rte_eth_dev_configure()
EAL: Error - exiting with code: 1
Cause: Cannot configure device: err=-22, port=0
我也曾在 Raspberry Pi 上遇到过这个问题,但它会在重新启动或多次尝试后自行修复。在 VM 上,此问题一直存在。
问题:
在这两种情况下,我都使用虚拟以太网设备作为接口。两种情况都使用相同的驱动程序和软件 NIC。我怎样才能找出 VM 和 Raspberry Pi 之间的区别?毕竟,如果没有区别,那么这两种情况都适用。
错误试图告诉我什么?我试过在网上搜索它无济于事,我对DPDK的了解非常有限。
如何解决这个问题?
解决了!
在查看文件以查找@stackinside 请求的程序列表时,我发现了一个名为“vethmode”的 t4p4s 参数。有很多这样的论点,我还没有找到它们的完整文档。打开它会导致在编译 C 程序时定义宏 T4P4S_VETH_MODE
。这反过来又改变了 struct rte_eth_conf
的组成,该 struct rte_eth_conf
稍后传递给 rte_eth_dev_configure
。
为了完整起见,here is the relevant file。
第 40 行 struct rte_eth_conf
是 defined/initialized.
第 244 行是调用 rte_eth_dev_configure
(第 261 行)失败的函数的开始。