Можно ли использовать несколько очередей с DPDK vdev rx_pcap

Я не мог сказать из документации, можно ли использовать vdev rx_pcap имитировать RSS с помощью файла pcap, используя несколько ядер.

После прочтения это предложение показалось интересным:

Для простоты использования DPDK EAL также был расширен, чтобы разрешить создание устройств псевдо-Ethernet, использующих один или несколько из этих драйверов, во время запуска приложения во время инициализации EAL.

Для этого в EAL необходимо передать параметр –vdev =. Для этого требуются опции take, позволяющие выделить и прозрачно использовать Ethernet на основе кольца и pcap для приложения. Это можно использовать, например, для тестирования на виртуальной машине, где нет портов Ethernet.

Устройства на основе Pcap можно создавать с помощью параметра виртуального устройства –vdev.

Вот как я читаю один файл 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

Можно ли вообще поменять max_rx_queues на vdev rx_pcap или есть альтернатива лучше?


person Nagev    schedule 06.11.2020    source источник


Ответы (1)


Количество доступных для порта очередей зависит от конфигурации сетевого адаптера и драйвера ОС. Следовательно, ожидать, что PCAP PMD эмулирует файл RXPCAP, поскольку устройство RX будет иметь несколько очередей RX, неверно. Вам нужно будет начать использовать фактический интерфейс из ОС, которая имеет несколько очередей.

Пояснение ниже:

Согласно функции NIC DPDK, RSS на PMD PCAP не поддерживается. Таким образом, возможность получения пакетов на основе 3 кортежей IP или 5 кортежей IP + TCP | UDP | SCTP в нескольких очередях изначально отсутствует и должна быть реализована в ПО.

Согласно PCAP PMD, если нужно читать с физического порта, мы используйте вариант rx_iface, а не rx_pcap. Аналогично для отправки через физический интерфейс необходимо использовать параметр tx_iface, а не tx_pcap.

Если вам необходимо было захватить пакет RX или TX с определенного порта DPDK, вам следует посмотреть приложение DPDK PDUMP, которое использует rte_pdump API. В документации PDUMP четко объясняется, как захватывать пакеты из определенных очередей.

Если нужно читать пакеты с помощью PCAP PMD, используйте rx_iface в основном приложении. Затем для записи пакетов из желаемой очереди портов в файл PCAP используйте dpdk-pdump в качестве вторичного приложения с опцией --pdump 'port=[your desired DPDK port],queue=[your desired DPDK port queue],rx-dev=/tmp/rx.pcap.

person Vipin Varghese    schedule 07.11.2020