如何在阿里云Linux或Windows ECS 实例上配置网卡多队列
发布时间:2017-06-15 18:02
多队列网卡是一种技术,最初是用来解决网络IO QoS (quality of service)问题的,后来随着网络IO的带宽的不断提升,单核CPU不能完全处满足网卡的需求,通过多队列网卡驱动的支持,将各个队列通过中断绑定到不同的核上,以满足网卡的需求。
单个 CPU 处理网络中断存在瓶颈,您可以将 ECS 实例中的网卡中断分散给不同的 CPU 处理。经测试,在网络 PPS 和网络带宽的测试中,与 1 个队列相比,2 个队列最多可提升 50% 到 1 倍,4 个队列的性能提升更大。
支持多队列的 ECS 实例规格
目前,以下 ECS 实例规格支持网卡多队列。
实例规格
|
vCPU
|
内存(GiB)
|
本地存储(GiB)
|
GPU
|
多队列个数
|
ecs.n5.8xlarge
|
32
|
64
|
无
|
无
|
2
|
ecs.n5.4xlarge
|
16
|
32
|
无
|
无
|
2
|
ecs.n5.16xlarge
|
64
|
128
|
无
|
无
|
4
|
ecs.c4.4xlarge
|
16
|
32
|
无
|
无
|
2
|
ecs.cm4.4xlarge
|
16
|
64
|
无
|
无
|
2
|
ecs.cm4.6xlarge
|
24
|
96
|
无
|
无
|
4
|
ecs.i1.8xlarge
|
32
|
128
|
2 × 832
|
无
|
2
|
ecs.i1.4xlarge
|
16
|
64
|
2 × 416
|
无
|
2
|
ecs.i1.14xlarge
|
56
|
224
|
2 × 1456
|
无
|
4
|
ecs.se1.4xlarge
|
16
|
128
|
无
|
无
|
2
|
ecs.se1.8xlarge
|
32
|
256
|
无
|
无
|
2
|
ecs.se1.14xlarge
|
56
|
480
|
无
|
无
|
4
|
ecs.sn2.13xlarge
|
56
|
224
|
无
|
无
|
4
|
ecs.gn4.14xlarge
|
56
|
96
|
无
|
2 × NVIDIA M40
|
4
|
ecs.ga1.14xlarge
|
56
|
160
|
1 × 1400
|
4 × AMD S7150
|
4
|
支持多队列的镜像
目前,由阿里云官方提供的公共镜像中,支持多队列的镜像如下表所示。镜像是否支持多队列与操作系统的位数无关。
镜像名称
|
是否支持多队列?
|
备注
|
Windows 2012 R2
|
是
|
尚未公开支持,可邀测
|
Windows 2016
|
是
|
尚未公开支持,可邀测
|
CentOS 7.2
|
是
|
无
|
CentOS 6.8
|
是
|
无
|
Ubuntu 16.04
|
是
|
无
|
Ubuntu 14.04
|
是
|
无
|
Debian 8.6
|
是
|
无
|
SUSE Linux Enterprise Server 12 SP1
|
是
|
无
|
OpenSUSE 13.1
|
是
|
无
|
CoreOS
|
是
|
无
|
在 Linux ECS 实例上配置网卡多队列
推荐使用较新的 Linux 发行版(如 CentOS 7.2)配置网卡多队列。
这里以 CentOS 7.2 为例介绍如何配置网卡多队列,假设是 2 个队列,网卡 interface 名称为 eth0。
-
查看网卡是否支持多队列。运行命令:ethtool -l eth0。
-
设置网卡当前使用多队列。运行命令:ethtool -L eth0 combined 2。
-
对于有多个网卡的用户,可以对多个网卡分别进行设置:
-
[root@localhost ~]# ethtool -l eth0
-
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个队列
-
[root@localhost ~]# ethtool -L eth0 combined 2# 设置eth0当前使用2个队列
-
建议开启 irqbalance 服务,让系统自动调整网卡中断在多个 CPU 核上的分配。运行命令:systemctl start irqbalance (CentOS 7.2 已默认开启)。
-
开启多队列后,如果网络性能提升仍不如您的预期,您可以考虑开启 RPS 特性。参考如下 Shell 脚本:
-
#!/bin/bash
-
cpu_num=$(grep -c processor /proc/cpuinfo)
-
quotient=$((cpu_num/8))
-
if[ $quotient -gt 2];then
-
quotient=2
-
elif[ $quotient -lt 1];then
-
quotient=1
-
fi
-
for i in $(seq $quotient)
-
do
-
cpuset="${cpuset}f"
-
done
-
for rps_file in $(ls /sys/class/net/eth*/queues/rx-*/rps_cpus)
-
do
-
echo $cpuset > $rps_file
-
done
在 Windows ECS 实例上配置网卡多队列
注意:目前,Windows 用户采用邀测的方式。Windows 系统使用网卡多队列后其网络性能也会提升,但是提升效果不如 Linux 系统。
如果您使用的是 Windows 系统,您需要下载并安装驱动程序,才能使用网卡多队列功能。
Windows 系统的驱动安装过程如下。
-
提交工单,索取并下载驱动安装包。
-
解压驱动安装包。您会看到几个文件夹,Windows 2012/2016 应使用 Win8/amd64 文件夹下的驱动。
-
升级网卡驱动:
-
选择 设备管理器 > 网络适配器;
-
右键单击 Red Hat VirtIO Ethernet Adapter,选择 更新驱动程序软件;
-
选择本地刚才解压的驱动目录的 Win8/admin64 目录,更新驱动即可。
-
完成驱动升级后,建议重启 Windows 系统。
至此,您就可以开始使用网卡多队列功能了。