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

DPDK MLX5 driver - QP creation failure

我正在使用 Mellanox ConnectX-5 100G 开发 DPDK 程序。

我的程序启动了 N 个 worker(每个内核一个),每个 worker 处理自己专用的 TX 和 RX 队列,因此我需要设置 N TX 和 N RX 队列。

我正在使用流导向器和 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 returns: 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)。

感谢您的帮助!

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

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

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

问题已使用 1024 个描述符解决。