DPDK MLX5驱动程序-QP创建失败

时间:2019-01-16 21:15:28

标签: networking dpdk mellanox

我正在使用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

我尝试过:

  • 增加大页面数量(最大64x1G)
  • 以不同方式更改池大小
  • DPDK 18.05和18.11
  • 将TX / RX描述符的数量从32768更改为16384

,但没有成功。

您可以看到我的port_init函数here(对于DPDK 18.11)。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

该问题与MLX5驱动程序的TX内联功能有关,仅当队列数> = 8时才启用。 TX内联使用DMA将数据包直接发送到主机内存缓冲区。

使用TX内联时,如果使用了大量的描述符,则基础动词库(在QP创建期间从DPDK调用)中的某些检查会失败。因此,一种解决方法是使用更少的描述符。

我使用32768个描述符,因为dev_info.rx_desc_lim.nb_max中的广告值更高。

使用1024个描述符可以解决此问题。