我正在使用 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
对于 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
我试过了:
- 增加 Hugepages 的数量(最多 64x1G)
- 以不同方式更改池大小
- DPDK 18.05 和 18.11
- 将 TX/RX 描述符的数量从 32768 更改为 16384
但没有成功。
你可以在这里查看我的 port_init 函数(对于 DPDK 18.11)。
谢谢你的帮助!