dpdk число mbuf и длина кольца

Я попытался использовать базовую пересылку для получения пакетов, без пересылки.

Чтобы уточнить некоторые параметры: #define NUM_MBUFS используется

rte_pktmbuf_pool_create("MBUF_POOL", NUM_MBUFS * nb_ports, MBUF_CACHE_SIZE, 0, RTE_MBUF_DEFAULT_BUF_SIZE, rte_socket_id());

и #define RX_RING_SIZE 65536 используется:

rte_eth_rx_queue_setup(port, q, RX_RING_SIZE, rte_eth_dev_socket_id(port), NULL, mbuf_pool);

Я хочу выделить больше буфера для RX Ring. Итак, я перехожу на:

#define NUM_MBUFS 131071
#define RX_RING_SIZE 65536

Но, похоже, не работает: получаю ошибку: Ошибка сегментации (дамп ядра). Что условно установить NUM_MBUF и RX_RING_SIZE, кстати, мой TX_RING_SIZE маленький, всего 64, так как пересылать не нужно.


person zigzag    schedule 13.02.2018    source источник


Ответы (1)


Есть две вещи:

  1. Сначала мы должны вызвать rte_eth_dev_info_get(), чтобы вернуть структуру rte_eth_dev_info.

  2. Затем мы должны убедиться, что аргументы, которые мы передаем rte_eth_rx_queue_setup(), выровнены с ограничениями, которые выставляет нижний PMD, то есть количество очередей, которые мы пытаемся настроить, не превышает max_rx/tx_queues, а количество дескрипторов не превышает rx/tx_desc_lim.nb_max

И последний по порядку но не по значимости. Мы всегда должны проверять код возврата функций инициализации DPDK, чтобы мы знали, где происходит сбой нашей программы, а не дожидаемся ее сбоя.

person Andriy Berestovskyy    schedule 13.02.2018
comment
У меня rx_desc_lim.nb_max - 4096, но когда я настраиваю очередь: rte_eth_dev_adjust_nb_rx_tx_desc и rte_eth_rx_queue_setup, он возвращает успех (0). Это нормальное поведение? - person zigzag; 14.02.2018
comment
@zigzag конечно, это нормально. В OP было RX_RING_SIZE, переданное непосредственно rte_eth_rx_queue_setup(), поэтому я подумал, что это может быть проблемой. Вот пример инициализации порта. Так что с rte_eth_dev_adjust_nb_rx_tx_desc() все еще вылетает? - person Andriy Berestovskyy; 14.02.2018
comment
Да, я вызвал rte_eth_dev_adjust_nb_rx_tx_desc (), но все равно вылетает. - person zigzag; 14.02.2018
comment
@zigzag, поэтому, если rte_eth_dev_adjust_nb_rx_tx_desc и rte_eth_rx_queue_setup работают нормально и возвращают 0, это означает, что он вылетает позже, верно? Вы должны предоставить полный пример или отладить, где происходит сбой , как описано в Руководстве программиста DPDK. - person Andriy Berestovskyy; 14.02.2018