【问题标题】:DPDK MLX5 driver - QP creation failureDPDK MLX5 驱动程序 - QP 创建失败
【发布时间】:2019-01-16 21:15:27
【问题描述】:

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

我的程序启动了 N 个 worker(每个内核一个),每个 worker 处理自己专用的 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

对于 Nrte_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

我试过了:

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

但没有成功。

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

感谢您的帮助!

【问题讨论】:

    标签: networking dpdk mellanox


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-08-24
      • 1970-01-01
      • 2016-04-26
      • 1970-01-01
      • 1970-01-01
      • 2012-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多