dpdk 的 mbuf 数量和环长度

dpdk number of mbuf and ring length

我尝试使用基本转发来接收数据包,不需要转发出去。

澄清一些参数:#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,因为不需要forward out。

有两件事:

  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 初始化函数的 return 代码,这样我们就知道我们的程序在哪里失败,而不是等待它崩溃。