NXP MCU 技术william hill官网
直播中

李晨灵

7年用户 1416经验值
私信 关注
[问答]

DPDK 22.11.1 LTS应用程序对rte_pktmbuf_alloc的调用失败怎么解决?

我遇到了一些奇怪的行为,我认为这可能是由 DPAA2 DPDK 轮询模式驱动程序引起的。我有一个 DPDK 22.11.1 LTS 应用程序(在 LX2160A SoC 上),它执行以下操作:
1. 从输入队列接收 mbuf 队列,并处理每个 mbuf:
2. 使用 rte_pktmbuf_alloc 为 mbuf 分配一个尾部。此分配发生在用于分配接收到的数据包的同一池中。
3. 使用 rte_pktmbuf_chain(rx, trailer) 将预告片链接到接收到的 mbuf
4. 通过第二个 dpaa2 端口传输 mbuf 链。


我看到的问题是对 rte_pktmbuf_alloc 的调用失败(在处理了几千个数据包之后)并出现恐慌:
“PANIC in __rte_mbuf_raw_sanity_check():”
assert “m->next == ((void *)0)” 失败。

此健全性检查是检查从池中分配的 mbuf 的一致性(包括它们是否将“下一个”指针设置为 NULL,这是应该的)。当以前的操作使用 rte_pktmbuf_chain API 创建 mbuf 链时,我只看到这种恐慌行为。

我认为问题是 PMD 将链接的 mbuf 释放回池(传输后),而没有先将下一个字段设置为 NULL。当使用调用 __rte_mbuf_raw_sanity_check 的 API 从池中进行分配时,这会导致恐慌。与熟悉 DPDK PMD 代码的人确认这一点将非常有帮助)。

如果 NXP 的某个人可以帮助解决这个问题,我可以寻找一个可重现的例子。  

更多回帖

发帖
×
20
完善资料,
赚取积分