我尝试使用基本转发来接收数据包,不需要转发。
澄清一些参数:
使用的#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,因为不需要前向输出。
答案 0 :(得分:0)
有两件事:
首先,我们应该致电rte_eth_dev_info_get()
以获取rte_eth_dev_info
结构。
然后我们必须确保传递给rte_eth_rx_queue_setup()
的参数与PMD暴露下的限制一致,即我们尝试配置的队列数不超过max_rx/tx_queues
并且描述符的数量不超过rx/tx_desc_lim.nb_max
最后但并非最不重要。我们应该经常检查DPDK init函数的返回代码,这样我们就知道程序失败的地方,然后等待它崩溃。