Я разрабатываю программу 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).
Спасибо за вашу помощь!