Приложение DPDK зависает после получения более 8000 rte_mbuff

Здравствуйте участники stackoverflow

Я разрабатываю проект с DPDK, но столкнулся с глупой проблемой, которая для меня не очевидна. Я хочу найти правильный подход к решению моей текущей проблемы.

Я отправляю и получаю 4 КБ rte_mbuf между удаленным и локальным узлом, это само по себе работает нормально, однако, когда я комбинирую реализацию со сторонней библиотекой, DPDK перестает получать данные примерно после получения 8000 пакетов.

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

Я понятия не имею, как решить проблему этой ситуации. но ситуация, которую я упомянул, может быть воспроизведена. Он всегда останавливается примерно на 8000 полученных пакетов. и абсолютно никаких ошибок в dpdk (пользовательский интерфейс). Единственная проблема заключается в том, что rte_rx_queue перестает возвращать пакеты после 8000 пакетов.

Будет ли хороший подход к выявлению проблемы в этом случае?


person Sungho Hong    schedule 13.08.2018    source источник


Ответы (1)


Будет ли хороший подход к выявлению проблемы в этом случае?

Лучше всего начать со статистики. Взгляните на rte_eth_stats_get().

Нам нужно проверить, увеличивается ли какой-либо счетчик после остановки приложения DPDK. Могу поспорить, что счетчик rx_nombuf все еще растет, что может означать, что ваш мемпул исчерпан. .

Если мы передаем mbuf во внешнюю библиотеку, мы должны убедиться, что каждый mbuf освобождается после возврата из библиотеки.

person Andriy Berestovskyy    schedule 13.08.2018