Драйвер DPDK MLX5 - ошибка создания QP

Я разрабатываю программу DPDK с использованием Mellanox ConnectX-5 100G.

Моя программа запускает N рабочих (по одному на ядро), и каждый рабочий имеет свои собственные выделенные очереди TX и RX, поэтому мне нужно настроить N TX и N RX очередей.

Я использую API-интерфейс flow Director и rte_flow для отправки входящего трафика в разные очереди.

Для каждой очереди RX я создаю пул mbuf с:

n = 262144
cache size = 512
priv_size = 0
data_room_size = RTE_MBUF_DEFAULT_BUF_SIZE

Для N<=4 все работает нормально, но с N=8, rte_eth_dev_start возвращает:Unknown error -12

и следующее сообщение журнала:

net_mlx5: port 0 Tx queue 0 QP creation failure
net_mlx5: port 0 Tx queue allocation failed: Cannot allocate memory

Я старался:

  • увеличить количество огромных страниц (до 64x1G)
  • изменить размер пула разными способами
  • оба DPDK 18.05 и 18.11
  • изменить количество дескрипторов TX/RX с 32768 на 16384

но безуспешно

Вы можете увидеть мою функцию port_init здесь (для DPDK 18.11).

Спасибо за вашу помощь!

0 ответов

Эта проблема связана с функцией вставки TX драйвера MLX5, которая включается только тогда, когда количество очередей>=8. TX inline использует DMA для отправки пакета непосредственно в буфер памяти хоста.

С TX-инлайнингом есть некоторые проверки, которые не проходят в базовой библиотеке глаголов (которая вызывается из DPDK во время создания QP), если используется большое количество дескрипторов. Таким образом, обходной путь должен использовать меньше дескрипторов.

Я использовал 32768 дескрипторов, так как объявленное значение в dev_info.rx_desc_lim.nb_max выше.

Проблема решена с использованием 1024 дескрипторов.

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