关于Mellanox ConnectX-5 100GB网卡接收队列数量为服务器核心数两倍的问题咨询
关于Mellanox ConnectX-5 100GB网卡接收队列数量为服务器核心数两倍的问题咨询
嗨,我来帮你搞定这个队列数不匹配的问题~首先得搞清楚原因:Mellanox ConnectX-5用的mlx5驱动,默认会根据系统在线CPU数量初始化收发队列,哪怕你禁用了SMT,驱动的默认逻辑有时候还是会把队列数设为物理核心数的两倍,这就是你看到64个RX队列的由来。
下面给你两种解决思路,临时生效和永久生效的都有:
1. 临时调整队列数(重启后失效)
先确认当前队列配置,把<你的网卡名称>换成实际网卡名(比如ens1f0),执行命令:
ethtool -l <你的网卡名称>
这个命令会显示当前RX/TX队列数,以及网卡支持的最大队列数。
接着把队列数改成和核心数一致的32:
ethtool -L <你的网卡名称> rx 32 tx 32
再用ethtool -l <你的网卡名称>验证一下,确认队列数已经调整成功。
2. 永久设置队列数(重启后依然生效)
如果想让配置在重启后保持不变,可以通过udev规则实现:
- 创建规则文件:
/etc/udev/rules.d/90-mellanox-queues.rules - 在文件里添加以下内容(记得替换
<你的网卡名称>):SUBSYSTEM=="net", ACTION=="add", DRIVERS=="mlx5_core", ATTR{name}=="<你的网卡名称>", RUN+="/sbin/ethtool -L %k rx 32 tx 32" - 保存后重新加载udev规则,让配置立即生效:
udevadm control --reload-rules && udevadm trigger
最后补充个小建议:调整完队列数后,检查下irqbalance服务状态,它能把网卡中断请求合理分配到各个核心,让性能更均衡。用systemctl status irqbalance查看状态,没启动的话就用systemctl start irqbalance && systemctl enable irqbalance开启并设置开机自启。
备注:内容来源于stack exchange,提问作者Anh Phan




