DPDK: Rx卸载功能的问题



我正在尝试设置环境来测试用P4语言编写的程序,使用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)"" 

在树莓派上,这适用于迄今为止我尝试过的每个网络接口(虚拟以太网设备,如上面的命令所示,内置以太网端口和Realtek USB网卡)。

在使用虚拟以太网设备的Ubuntu 21.04虚拟机中,我得到以下错误:

--- 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

我在树莓派上也有这个问题,但它会在重新启动或足够的尝试后自行修复。在虚拟机上,此问题持续存在。

问题:

在这两种情况下,我都使用虚拟以太网设备作为接口。这两种情况使用相同的驱动程序和软件网卡。如何了解虚拟机与树莓派的区别?毕竟,如果没有区别,那么在两种情况下都可以工作。

错误试图告诉我什么?我试着在网上搜索它,但无济于事,我对DPDK的了解非常有限。

我可以尝试什么来解决这个问题?

解决了!

在查看文件以查找所请求的程序清单@stackinside时,我发现了t4p4s的参数"vethmode"。有很多这样的论点,我还没有找到一个完整的文档。打开该选项会在编译C程序时定义宏T4P4S_VETH_MODE。这反过来又改变了一段时间后传递给rte_eth_dev_configurestruct rte_eth_conf的组成。

为了完整起见,下面是相关的文件。
第40行是定义/初始化struct rte_eth_conf的地方。
第244行是调用rte_eth_dev_configure(第261行)失败的函数的开始。

相关内容

  • 没有找到相关文章

最新更新