
# 开启网卡多队列功能
#### 操作场景
随着网络IO的带宽不断提升，单核CPU处理网络中断存在瓶颈，不能完全满足网卡的需求，通过开启网卡多队列功能，您可以将弹性云服务器中的网卡中断分散给不同的CPU处理，以满足网卡的需求，从而提升网络PPS和带宽性能。
假设以下场景所述的弹性云服务器满足规格和虚拟化类型要求：
- 使用[网卡多队列支持列表]中的公共镜像创建的弹性云服务器，默认已开启网卡多队列，无需执行本节操作。
- 对于私有镜像场景，如果您的外部镜像文件的操作系统在[网卡多队列支持列表]范围内，需要按照如下流程开启网卡多队列：
  1. [将外部镜像文件导入镜像服务控制台]。
  
  2. [为私有镜像添加网卡多队列标签]。
  
  3. [使用私有镜像创建弹性云服务器]。
  
  4. [执行网卡多队列的配置脚本]。
   
![](https://support.huaweicloud.com/usermanual-ecs/public_sys-resources/note_3.0-zh-cn.png)
云服务器开启网卡多队列功能后，如果后续有新增或删除网卡，切换VPC等操作，需要重新对云服务器设置网卡多队列，详细操作请参考[执行网卡多队列的配置脚本]。
 #### 网卡多队列支持列表
网卡多队列的支持情况和实例规格、虚拟化类型、镜像的操作系统有关，只有同时满足这些要求，弹性云服务器才能开启网卡多队列功能。
- 支持网卡多队列的实例规格请参见[规格清单](https://support.huaweicloud.com/productdesc-ecs/zh-cn_topic_0159822360.html)。
  ![](https://support.huaweicloud.com/usermanual-ecs/public_sys-resources/note_3.0-zh-cn.png)
  网卡多队列数为大于1的值，表示支持网卡多队列。
  
- 虚拟化类型必须为KVM。
- [表2]所列的Linux公共镜像，支持网卡多队列。
  ![](https://support.huaweicloud.com/usermanual-ecs/public_sys-resources/note_3.0-zh-cn.png)
  - Windows操作系统弹性云服务器的驱动pvdriver有一套动态调整网卡队列数的策略，会根据vCPU数计算队列数并进行动态调整，因此无需对windows网卡多队列的队列数进行设置。
  
  - Windows 2008公共镜像已下线，可通过私有镜像支持。
  
  - Linux操作系统弹性云服务器建议将操作系统内核版本升级至2.6.35及以上，否则不支持网卡多队列。 建议您使用命令**uname -r**查询内核版本，如果低于2.6.35请联系技术支持升级内核。
    
    
表1Windows弹性云服务器网卡多队列支持列表 
| 镜像                                                          | 是否支持多队列 | 是否默认开启多队列 |
|:---|:---|:---|
| 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                       | 是       | 是         |
   
 表2Linux弹性云服务器网卡多队列支持列表 
| 镜像                                                 | 是否支持多队列 | 是否默认开启多队列 |
|:---|:---|:---|
| 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操作系统镜像添加网卡多队列标签，开启网卡多队列功能，可能会引起操作系统启动速度变慢等问题。
用户可以选择以下任一种方式设置镜像的网卡多队列属性。
**方式1** ：
1. 登录[IMS控制台](https://console.huaweicloud.com/ecm/?#/ims/manager/imageList/selfImage)。
2. 单击"私有镜像"页签，在对应镜像所在行的"操作"列下，单击"修改"。
3. 设置镜像的网卡多队列属性。
 
**方式2** ：
1. 登录[IMS控制台](https://console.huaweicloud.com/ecm/?#/ims/manager/imageList/selfImage)。
2. 单击"私有镜像"页签，在镜像列表中，单击镜像名称，进入镜像详情页面。
3. 单击右上角的"修改"，在弹出的"修改镜像"对话框中，设置镜像的网卡多队列属性。
 
**方法3：**通过API为镜像添加网卡多队列标签hw_vif_multiqueue_enabled
1. 获取Token的方法请参考[认证鉴权](https://support.huaweicloud.com/api-ims/ims_03_0303.html)。
2. "更新镜像信息"的API使用方法请参考[更新镜像信息（OpenStack原生）](https://support.huaweicloud.com/api-ims/ims_03_0704.html)。
3. 在请求消息头中增加"X-Auth-Token"。 "X-Auth-Token"的取值为步骤[1]中获取的Token。
   
4. 在请求消息头中增加"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支持网卡多队列修改样例   
   ![](https://support.huaweicloud.com/usermanual-ecs/zh-cn_image_0193026956.png "点击放大") 
 #### 使用私有镜像创建弹性云服务器
使用注册好的私有镜像创建弹性云服务器。在配置参数时，需要注意以下两点：
- 区域：必须选择私有镜像所在的区域。
- 镜像：选择"私有镜像"，并在下拉列表中选择需要的镜像。
 
 #### 执行网卡多队列的配置脚本
Windows操作系统使用的半虚拟化驱动pvdriver有一套动态调整网卡队列数的策略，会根据vCPU数计算队列数并进行动态调整，因此无需对windows网卡多队列的队列数进行设置。
Linux操作系统提供了自动开启网卡多队列功能的配置脚本，配置成功后，弹性云服务器支持网卡多队列功能。
![](https://support.huaweicloud.com/usermanual-ecs/public_sys-resources/note_3.0-zh-cn.png)
自动开启网卡多队列功能的配置脚本当前仅支持处理eth0类型的网卡。
1. 登录弹性云服务器，查看网卡支持和已开启的队列数。 **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"字段取值相同且大于1，则表示网卡已开启多队列，无需执行以下操作。**
   
2. 执行以下命令，下载配置脚本"multi-queue-hw"。 **wget *下载地址URL***
   下载地址：<https://ecs-instance-driver.obs.cn-north-1.myhuaweicloud.com/multi-queue-hw>
   
3. 执行以下命令，添加执行权限。 **chmod +x multi-queue-hw**
   
4. 执行以下命令，将脚本"multi-queue-hw"放到目录/etc/init.d下。 **mv multi-queue-hw /etc/init.d**
   
5. 执行以下命令，运行脚本"multi-queue-hw"。 **/etc/init.d/multi-queue-hw start**
   运行脚本后，立即生效。但关机后，网卡多队列功能将自动失效。
   
6. 为了使网卡多队列功能开机自动生效，各个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**
     
    
 
#### 查看网卡队列数
以Linux系统ECS为例，介绍查看网卡队列数的操作指导。
![](https://support.huaweicloud.com/usermanual-ecs/public_sys-resources/note_3.0-zh-cn.png)
Windows系统ECS的网卡队列数您可以通过调用[查询云服务器网卡信息](https://support.huaweicloud.com/api-ecs/ecs_02_0505.html)接口查看。
通过该接口的响应参数"multiqueue_num"可获得ECS的网卡队列数。
1. 登录弹性云服务器。
2. 执行以下命令，查看网卡支持和已开启的队列数。 **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个队列
```
