我正在使用Mellanox ConnectX-5 100G开发DPDK程序。
我的程序启动了N个工作线程(每个内核一个),每个工作线程都处理自己的专用TX和RX队列,因此我需要设置N个TX和N个RX队列。
我正在使用Flow Director和rte_flow API将入口流量发送到不同的队列。
对于每个RX队列,我使用以下命令创建一个mbuf池:
n = 262144
cache size = 512
priv_size = 0
data_room_size = RTE_MBUF_DEFAULT_BUF_SIZE
对于N <= 4,一切正常,但是对于N = 8,rte_eth_dev_start
返回:
Unknown error -12
以及以下日志消息:
net_mlx5: port 0 Tx queue 0 QP creation failure
net_mlx5: port 0 Tx queue allocation failed: Cannot allocate memory
我尝试过:
,但没有成功。
您可以看到我的port_init函数here(对于DPDK 18.11)。
感谢您的帮助!
答案 0 :(得分:0)
该问题与MLX5驱动程序的TX内联功能有关,仅当队列数> = 8时才启用。 TX内联使用DMA将数据包直接发送到主机内存缓冲区。
使用TX内联时,如果使用了大量的描述符,则基础动词库(在QP创建期间从DPDK调用)中的某些检查会失败。因此,一种解决方法是使用更少的描述符。
我使用32768个描述符,因为dev_info.rx_desc_lim.nb_max
中的广告值更高。
使用1024个描述符可以解决此问题。