dpdk的mbuf数和环长

时间:2018-02-13 10:52:03

标签: dpdk

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

澄清一些参数:

使用的#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,因为不需要前向输出。

1 个答案:

答案 0 :(得分:0)

有两件事:

  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

  3. 最后但并非最不重要。我们应该经常检查DPDK init函数的返回代码,这样我们就知道程序失败的地方,然后等待它崩溃。