Драйвер DPDK MLX5 - ошибка создания QP - PullRequest
0 голосов
/ 17 января 2019

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

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

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

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

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

Для N <= 4 все работает нормально, но с N = 8, <code>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).

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

1 Ответ

0 голосов
/ 10 апреля 2019

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...