DPDK 应用程序在收到超过 8000 个后停止 rte_mbuff

DPDK application stalls after receiving more than 8000 rte_mbuff

大家好Whosebug的成员

我正在使用 DPDK 开发一个项目,但遇到了一个愚蠢的问题,这对我来说并不明显。 我想找出解决当前问题的正确方法。

我在远程和本地节点之间发送和接收 4kb rte_mbuf, 仅此一项就可以正常工作, 但是,当我将实现与第 3 方库结合使用时,DPDK 在大约接收到 8000 个数据包后停止接收数据。

我已经调试了所有可能的程序端,令我惊讶的是。没有发现错误,8000以内的包都被正确接收。

我不知道找出这种情况问题的方法。但我提到的情况是可以复制的。它总是在收到大约 8000 个数据包时停止。 并且在 dpdk(用户界面)中绝对没有发现错误。唯一的问题是 rte_rx_queue 在 8000 个数据包后停止返回数据包。

请问有没有什么好的方法可以确定这个案例的问题所在?

Would there be a good approach to identify the problem of this case?

最好的方法是从统计数据开始。看看rte_eth_stats_get()

我们需要检查 DPDK 应用程序停止后是否有任何计数器在增加。我敢打赌 rx_nombuf counter 还在增加,这可能意味着你的内存池已经用完了。

如果我们将 mbuf 传递给外部库,我们必须确保每个 mbuf 在 return 之后从库中释放。