开启网卡多队列功能-九游平台
操作场景
随着网络io的带宽不断提升,单核cpu处理网络中断存在瓶颈,不能完全满足网卡的需求,通过开启网卡多队列功能,您可以将弹性云服务器中的网卡中断分散给不同的cpu处理,以满足网卡的需求,从而提升网络pps和带宽性能。
假设以下场景所述的弹性云服务器满足规格和虚拟化类型要求:
- 使用网卡多队列支持列表中的公共镜像创建的弹性云服务器,默认已开启网卡多队列,无需执行本节操作。
- 对于私有镜像场景,如果您的外部镜像文件的操作系统在网卡多队列支持列表范围内,需要按照如下流程开启网卡多队列:

云服务器开启网卡多队列功能后,如果后续有新增或删除网卡,切换vpc等操作,需要重新对云服务器设置网卡多队列,详细操作请参考执行网卡多队列的配置脚本。
网卡多队列支持列表
网卡多队列的支持情况和实例规格、虚拟化类型、镜像的操作系统有关,只有同时满足这些要求,弹性云服务器才能开启网卡多队列功能。
- 支持网卡多队列的实例规格请参见“规格清单”。
网卡多队列数为大于1的值,表示支持网卡多队列。
- 虚拟化类型必须为kvm。
- 表2所列的linux公共镜像,支持网卡多队列。
- windows操作系统弹性云服务器的驱动pvdriver有一套动态调整网卡队列数的策略,会根据vcpu数计算队列数并进行动态调整,因此无需对windows网卡多队列的队列数进行设置。
- windows 2008公共镜像已下线,可通过私有镜像支持。
- linux操作系统弹性云服务器建议将操作系统内核版本升级至2.6.35及以上,否则不支持网卡多队列。
建议您使用命令uname -r查询内核版本,如果低于2.6.35请联系九游平台的技术支持升级内核。
镜像 |
是否支持多队列 |
是否默认开启多队列 |
---|---|---|
windows server 2008 r2 standard/enterprise/datacenter 64bit |
是 |
是 |
windows server 2008 enterprise sp2 64bit |
是 |
是 |
windows server 2008 web r2 64 bit |
是 |
是 |
windows server 2008 r2 enterprise 64bit_withgpudriver |
是 |
是 |
windows server 2012 r2 standard 64bit_withgpudriver |
是 |
是 |
windows server 2012 r2 standard/datacenter 64 bit |
是 |
是 |
windows server 2016 standard/datacenter 64 bit |
是 |
是 |
windows server 2019 datacenter 64 bit |
是 |
是 |
镜像 |
是否支持多队列 |
是否默认开启多队列 |
---|---|---|
ubuntu 14.04/16.04/18.04/20.04 server 64bit |
是 |
是 |
opensuse 42.2/15.* 64bit |
是 |
是 |
suse enterprise 12 sp1/sp2 64bit |
是 |
是 |
centos 6.8/6.9/7.*/8.* 64bit |
是 |
是 |
debian 8.0.0/8.8.0/8.9.0/9.0.0/10.0.0/10.2.0 64bit |
是 |
是 |
fedora 24/25/30 64bit |
是 |
是 |
euleros 2.2/2.3/2.5 64bit |
是 |
是 |
将外部镜像文件导入镜像服务控制台
- 如果为“支持”,执行使用私有镜像创建弹性云服务器。
- 如果为“不支持”,执行为镜像添加网卡多队列标签。
为镜像添加网卡多队列标签
windows操作系统暂未商用支持网卡多队列,如果对windows操作系统镜像添加网卡多队列标签,开启网卡多队列功能,可能会引起操作系统启动速度变慢等问题。
用户可以选择以下任一种方式设置镜像的网卡多队列属性。
- 登录管理控制台。
- 单击“
”,选择“计算 > 镜像服务”。
- 单击“私有镜像”页签,在对应镜像所在行的“操作”列下,单击“修改”。
- 设置镜像的网卡多队列属性。
- 登录管理控制台。
- 单击“
”,选择“计算 > 镜像服务”。
- 单击“私有镜像”页签,在镜像列表中,单击镜像名称,进入镜像详情页面。
- 单击右上角的“修改”,在弹出的“修改镜像”对话框中,设置镜像的网卡多队列属性。
方法3:通过api为镜像添加网卡多队列标签hw_vif_multiqueue_enabled
- 获取token的方法请参考“认证鉴权”。
- “更新镜像信息”的api使用方法请参考“更新镜像信息(openstack原生)”。
- 在请求消息头中增加“x-auth-token”。
“x-auth-token”的取值为步骤1中获取的token。
- 在请求消息头中增加“content-type”。
“content-type”取值为application/openstack-images-v2.1-json-patch
请求的uri格式为:
patch /v2/images/{image_id}
请求的body体如下所示。[ { "op":"add", "path":"/hw_vif_multiqueue_enabled", "value": "true" } ]
支持网卡多队列修改样例如图1所示。
图1 支持网卡多队列修改样例
使用私有镜像创建弹性云服务器
- 区域:必须选择私有镜像所在的区域。
- 镜像:选择“私有镜像”,并在下拉列表中选择需要的镜像。
执行网卡多队列的配置脚本
windows操作系统使用的半虚拟化驱动pvdriver有一套动态调整网卡队列数的策略,会根据vcpu数计算队列数并进行动态调整,因此无需对windows网卡多队列的队列数进行设置。
linux操作系统提供了自动开启网卡多队列功能的配置脚本,配置成功后,弹性云服务器支持网卡多队列功能。

自动开启网卡多队列功能的配置脚本当前仅支持处理eth0类型的网卡。
- 登录弹性云服务器,查看网卡支持和已开启的队列数。
ethtool -l 网卡
示例:
[root@localhost ~]# ethtool -l eth0 #查询网卡eth0的队列数 channel parameters for eth0: pre-set maximums: rx: 0 tx: 0 other: 0 combined: 4 #表示此网卡最多支持设置4个队列 current hardware settings: rx: 0 tx: 0 other: 0 combined: 1 #表示当前已开启的是1个队列
如果返回信息中,两个“combined”字段取值相同,则表示网卡已开启多队列,无需执行以下操作。
- 执行以下命令,下载配置脚本“multi-queue-hw”。
wget 下载地址url
下载地址:
- 执行以下命令,添加执行权限。
chmod x multi-queue-hw
- 执行以下命令,将脚本“multi-queue-hw”放到目录/etc/init.d下。
mv multi-queue-hw /etc/init.d
- 执行以下命令,运行脚本“multi-queue-hw”。
/etc/init.d/multi-queue-hw start
运行脚本后,立即生效。但关机后,网卡多队列功能将自动失效。
- 为了使网卡多队列功能开机自动生效,各个os需要增加开机启动配置:
- centos/redhat/fedora/euleros/suse/opensuse使用如下命令,增加开机启动项,使网卡多队列配置开机:
chkconfig multi-queue-hw on
- ubuntu使用如下命令,增加开机启动项:
update-rc.d multi-queue-hw defaults 90 10
- debian使用如下命令,增加开机启动项:
systemctl enable multi-queue-hw
- centos/redhat/fedora/euleros/suse/opensuse使用如下命令,增加开机启动项,使网卡多队列配置开机:
查看网卡队列数
以linux系统ecs为例,介绍查看网卡队列数的操作指导。

windows系统ecs的网卡队列数您可以通过调用查询云服务器网卡信息接口查看。
通过该接口的响应参数“multiqueue_num”可获得ecs的网卡队列数。
- 登录弹性云服务器。
- 执行以下命令,查看网卡支持和已开启的队列数。
ethtool -l 网卡
示例:
[root@localhost ~]# ethtool -l eth0 #查询网卡eth0的队列数 channel parameters for eth0: pre-set maximums: rx: 0 tx: 0 other: 0 combined: 4 #表示此网卡最多支持设置开启4个队列 current hardware settings: rx: 0 tx: 0 other: 0 combined: 4 #表示当前开启的是4个队列
相关文档
意见反馈
文档内容是否对您有帮助?
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨