DPDK: проблема с возможностями разгрузки Rx

Я пытаюсь установить среду для тестирования программ, написанных на языке P4 , используя t4p4s в качестве компилятора. Когда программа P4 компилируется с помощью t4p4s, создается программа C/C++ с использованием DPDK, которая, в свою очередь, компилируется и запускается.

Компиляция программы работает нормально. Полученный исполняемый файл запускается следующим образом:

      ./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 это работает со всеми сетевыми интерфейсами, которые я пробовал до сих пор (виртуальные устройства Ethernet, как показано в приведенной выше команде, встроенный порт Ethernet и сетевой адаптер 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

У меня тоже была эта проблема на Raspberry Pis, но она исправилась после перезапуска или достаточного количества попыток. На виртуальной машине эта проблема постоянна.

Вопросы:

В обоих случаях я использую виртуальные сетевые устройства для интерфейсов. В обоих случаях используется один и тот же драйвер и программное обеспечение NIC. Как я могу узнать, в чем разница между виртуальной машиной и Raspberry Pi? Ведь если бы не было разницы то работало бы в обоих случаях.

Что ошибка пытается сказать мне? Я пытался найти его в Интернете безрезультатно, и мои знания о DPDK очень ограничены.

Что я могу попробовать, чтобы решить эту проблему?

1 ответ

Решил!

Просматривая файлы, чтобы найти запрошенный @stackinside список программ, я обнаружил аргумент t4p4s, называемый «vethmode». Таких аргументов множество, и мне еще предстоит найти для них полную документацию. Включение этого приводит к макросу T4P4S_VETH_MODEопределяется при компиляции программы на C. Это, в свою очередь, изменяет состав a, который передается некоторое время спустя.

Для полноты картины вот соответствующий файл .
В строке 40 находится struct rte_eth_confопределяется/инициализируется.
Строка 244 — это начало функции, в которой вызов rte_eth_dev_configure(строка 261) терпит неудачу.

Другие вопросы по тегам