多队列能否与DPDK vdev一起使用rx_pcap

Can multi-queue be used with DPDK vdev rx_pcap

我无法从 documentation 判断是否可以使用 vdev rx_pcap 来模拟带有 pcap 文件的 RSS,使用多核。

这似乎是一个有趣的命题,看完之后:

For ease of use, the DPDK EAL also has been extended to allow pseudo-Ethernet devices, using one or more of these drivers, to be created at application startup time during EAL initialization.

To do so, the –vdev= parameter must be passed to the EAL. This takes take options to allow ring and pcap-based Ethernet to be allocated and used transparently by the application. This can be used, for example, for testing on a virtual machine where there are no Ethernet ports.

Pcap-based devices can be created using the virtual device –vdev option.

这就是我读取一个 PCAP 文件并写入另一个 PCAP 文件的方式,将他们的示例与 dpdk-testpmd 应用程序一起使用:

sudo build/app/dpdk-testpmd -l 0-3 --vdev 'net_pcap0,rx_pcap=file_rx.pcap,tx_pcap=file_tx.pcap' -- --port-topology=chained --no-flush-rx

这很好用,我生成了 file_tx.pcap。但是如果我尝试将 RX 队列的数量设置为 4,它告诉我我不能:

$ sudo build/app/dpdk-testpmd -l 0-3 --vdev 'net_pcap0,rx_pcap=file_rx.pcap,tx_pcap=file_tx.pcap' -- --port-topology=chained --no-flush-rx --rxq=4
EAL: Detected 4 lcore(s)
EAL: Detected 1 NUMA nodes
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: No available hugepages reported in hugepages-1048576kB
EAL: Probing VFIO support...
EAL: VFIO support initialized
EAL:   Invalid NUMA socket, default to 0
EAL:   Invalid NUMA socket, default to 0
Fail: input rxq (4) can't be greater than max_rx_queues (1) of port 0
EAL: Error - exiting with code: 1
  Cause: rxq 4 invalid - must be >= 0 && <= 1

是否可以为 vdev rx_pcap 更改 max_rx_queues,或者是否有更好的选择?

端口上可用的队列数取决于 OS 中的 NIC 配置和驱动程序。因此期望 PCAP PMD 模拟 RXPCAP 文件作为 RX 设备将有多个 RX 队列是不正确的。您需要开始使用来自 OS 的实际界面,它有多个队列。

解释如下:

根据 DPDK NIC Feature,PCAP PMD 不支持 RSS。因此,在多个队列上基于 3 个 IP 元组或 5 个 IP+TCP|UDP|SCTP​​ 元组接收数据包的选项本身不存在,需要在 SW.[=21= 中实现]

根据 PCAP PMD 如果需要从物理端口读取,我们使用选项 rx_iface 而不是 rx_pcap。类似地,要在物理接口上发送,必须使用选项 tx_iface 而不是 tx_pcap.

如果您的要求是从特定的 DPDK 端口捕获 RX 或 TX 数据包,您应该查看使用 rte_pdump API 的 DPDK PDUMP 应用程序。 PDUMP Documentation 也清楚地解释了如何从特定队列中抓取数据包。

如果需要使用PCAP PMD 读取数据包,请在主要应用程序中使用rx_iface。然后将来自所需 port-queue 的数据包写入 PCAP 文件,使用 dpdk-pdump 作为辅助应用程序,并带有选项 --pdump 'port=[your desired DPDK port],queue=[your desired DPDK port queue],rx-dev=/tmp/rx.pcap.