代码之家  ›  专栏  ›  技术社区  ›  Nagev

多队列可以与DPDK vdev rx_pcap一起使用吗

  •  0
  • Nagev  · 技术社区  · 5 年前

    我从照片上看不出来 documentation 如果可以使用vdev rx_pcap,使用多个内核,用pcap文件模拟RSS。

    读了这篇文章后,这似乎是一个有趣的命题:

    为了便于使用,DPDK EAL也进行了扩展,以允许 使用其中一个或多个驱动程序的伪以太网设备 在EAL初始化期间的应用程序启动时创建。

    为此,必须将vdev=参数传递给EAL。这需要 选择允许分配环网和基于pcap的以太网的选项,并 由应用程序透明地使用。这可以用来,例如, 用于在没有以太网端口的虚拟机上进行测试。

    基于Pcap的设备可以使用虚拟设备vdev创建 选项

    以下是我如何读取一个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
    

    这很好,我得到了 文件_tx.pcap 生成。但如果我尝试将接收队列的数量设置为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
    

    有可能改变吗 max_rx_queues 对于vdev rx_pcap,还是有更好的替代方案?

    0 回复  |  直到 5 年前
        1
  •  1
  •   Vipin Varghese    5 年前

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

    解释如下:

    根据DPDK NIC Feature PMD上没有对PCRSS的支持。因此,基于3 IP元组或5 IP+TCP | UDP | SCTP元组在多个队列上接收数据包的选项在本机上不存在,并且 需要在软件中实现 .

    A每 PCAP PMD 如果需要从物理端口读取数据,我们有使用选项 rx_iface 而不是 rx_pcap .同样,要通过物理接口发送,必须使用选项 tx_iface 而不是 tx_pcap .

    如果您的需求是从特定的DPDK端口捕获RX或TX数据包,那么您应该查看使用 rte_pdump 应用程序编程接口。这个 PDUMP Documentation 还清楚地解释了如何从特定队列抓取数据包。

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