每个 NIC 队列一个缓冲池

One buffer pool per NIC queue

据我所知,DPDK 代码示例对整个应用程序(或给定端口的所有队列)使用单个 rte_mempool。

假设所有 EAL 线程只与它们自己的 RX/TX 队列交互,是否建议每个 lcore/queue 有一个内存池以进一步减少争用?

内存池使用 per-lcore 缓存,因此它们可以非常有效地处理争用。

当然,添加更多的内存池仍然可能会带来一些性能优势,但它也会增加内存占用,因此该程序可能不再适合 L3。

所以答案是:这取决于,它必须被衡量。相反,我建议将每个 lcore 缓存增加到 Tx + RX 描述符的数量。这应该保证在不对源代码进行重大更改的情况下lcores之间没有争用。

始终对您的更改进行基准测试,这是性能优化的主要规则;)