多队列是指网络接口卡具有在多个发送和接收队列上并行处理网络数据包的能力。在使用网卡多队列时,通常需要配置网络中断亲和性(IRQ Affinity),将不同的队列中断分配给特定的CPU处理,而不是由任意的CPU处理,这有助于减少CPU之间的争用并提高网络性能。本文介绍如何配置Linux系统的网卡多队列的网络中断亲和性和修改网卡多队列数。
配置网络中断亲和性
下述操作以Red Hat 9.2镜像系统为例,介绍如何通过ecs_mq
脚本自动配置网卡多队列的网络中断亲和性。如果您的系统镜像并非Red Hat Enterprise Linux,已默认开启,则无需再配置。
- 远程连接Linux实例。
(可选)关闭irqbalance服务。
由于irqbalance服务会动态调整IRQ Affinity,配置ecs_mq
脚本会和irqbalance产生冲突,建议关闭irqbalance服务。systemctl stop irqbalance.service
执行以下命令,下载最新版本的网卡多队列的自动配置脚本
ecs_mq
。wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/ecs_mq/ecs_mq_2.0.tgz
最新版ecs_mq修复的问题
执行以下命令,解压
ecs_mq
脚本。tar -xzf ecs_mq_2.0.tgz
执行以下命令,更换工作路径。
cd ecs_mq/
执行以下命令,运行
ecs_mq
脚本。bash install.sh redhat 9
说明
请您根据实际环境替换命令中的 redhat 和 9为您自己的<操作系统名称>
和<操作系统主版本号>
。执行以下命令,启动
ecs_mq
脚本。systemctl start ecs_mq
启动脚本后,系统自动启动网络中断亲和性。
修改网卡多队列数
执行以下命令,查看主网卡eth0支持多队列的情况。
ethtool -l eth0
根据返回结果查看是否支持网卡多队列:
- 如果 "Pre-set maximums" 下的 "Combined" 值大于1,表示网卡支持多队列。
您可以根据这个最大值来设置当前的队列数:
执行命令sudo ethtool -L eth0 combined N
,其中N
是您希望设置的队列数,且N
应该小于或等于 "Pre-set maximums" 下的 "Combined" 值。 Current hardware settings
下的Combined
值表示当前生效的队列数。
本例中返回表示最多支持2个队列,且当前生效的是1个队列:Channel parameters for eth0: Pre-set maximums: RX: 0 TX: 0 Other: 0 Combined: 2 # 表示最多支持设置2个队列 Current hardware settings: RX: 0 TX: 0 Other: 0 Combined: 1 # 表示当前生效的是1个队列
执行以下命令,设置主网卡使用2个队列功能。
sudo ethtool -L eth0 combined 2
执行以下命令,查看辅助弹性网卡eth1支持多队列的情况。
ethtool -l eth1
通过返回信息可以看到,辅助弹性网卡已开启支持多队列。您可以按需继续执行下述操作自定义配置辅助弹性网卡的多队列数。
Channel parameters for eth1: Pre-set maximums: RX: 0 TX: 0 Other: 0 Combined: 4 # 表示网卡硬件最多可以支持4个队列 Current hardware settings: RX: 0 TX: 0 Other: 0 Combined: 1 # 表示当前网卡只使用了1个队列
执行以下命令,设置辅助弹性网卡使用4个队列功能。
sudo ethtool -L eth1 combined 4