全部产品
Search
文档中心

云服务器 ECS:配置网卡多队列的网络中断亲和性

更新时间:Feb 28, 2024

多队列是指网络接口卡具有能力在多个发送和接收队列上并行处理网络数据包。在使用网卡多队列时,通常需要配置网络中断亲和性(IRQ Affinity),将不同的队列中断分配给特定的CPU处理,而不是由任意的CPU处理,这有助于减少CPU之间的争用并提高网络性能。本文介绍如何配置Linux系统的网卡多队列的网络中断亲和性和修改网卡多队列数。

前提条件

  • 您的实例规格支持网卡多队列功能。

    支持多队列的实例规格请参见实例规格族,多队列数值大于1时,表示支持网卡多队列。

  • 您的镜像支持网卡多队列功能。

    说明
    • 一些早期上架的公共镜像(内核版本小于2.6)可能不支持网卡多队列,建议您使用最新的公共镜像。

    • 除Red Hat Enterprise Linux以外的镜像已默认支持网络中断亲和性,无需再配置。Red Hat Enterprise Linux镜像支持但未开启网卡多队列的网络中断亲和性,您需要按照本文进行配置。

操作步骤

下述操作以Red Hat 9.2镜像系统为例,介绍如何通过ecs_mq脚本自动配置网卡多队列的网络中断亲和性。

  1. 远程连接Linux实例。

    具体操作,请参见通过密码或密钥认证登录Linux实例

  2. (可选)关闭irqbalance服务。

    由于irqbalance服务会动态调整IRQ Affinity,配置ecs_mq脚本会和irqblanace产生冲突,建议关闭irqbalance服务。

    systemctl stop irqbalance.service
  3. 执行以下命令,下载最新版本的网卡多队列的自动配置脚本ecs_mq

    wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/ecs_mq/ecs_mq_2.0.tgz

    最新版ecs_mq相对于旧版ecs_mq修复的问题如下:

    • 根据网卡设备PCIe的NUMA(非统一内存访问)位置,来优先绑定对应的NUMA上的CPU。

    • 优化了多网络设备调优的逻辑。

    • 根据网卡队列数目和CPU数目的比例来进行不同规格的网卡中断绑定逻辑。

    • 优化了根据CPU中sibling的位置进行中断绑定。

    • 解决了旧版绑定中可能跨越NUMA导致的内存访问延迟问题。

    • 默认打开新版开关,同时支持切换新版和旧版的ecs_mq选项开关,切换命令如下:

      • 切换为旧版ecs_mqecs_mq_rps_rfs old

      • 切换为新版ecs_mqecs_mq_rps_rfs new

    说明

    新版ecs_mq相对于旧版ecs_mq,在网络性能测试中,针对大部分PPS、BPS,网络性能提升可达到5%~30%。

  4. 执行以下命令,解压ecs_mq脚本。

    tar -xzf ecs_mq_2.0.tgz
  5. 执行以下命令,更换工作路径。

    cd ecs_mq/
  6. 执行以下命令,运行ecs_mq脚本。

    bash install.sh <操作系统名称> <操作系统主版本号>
    说明

    请您根据实际环境替换命令中的<操作系统名称><操作系统主版本号>

    以Red Hat Enterprise Linux 9.2镜像系统为例:

    bash install.sh redhat 9
  7. 执行以下命令,启动ecs_mq脚本。

    systemctl start ecs_mq

    启动脚本后,系统自动启动网络中断亲和性。

修改网卡多队列数

如果您仅需要自定义网卡的队列数,无需配置网络中断亲和性,您可以参考如下步骤手动修改网卡。下述操作以支持多队列的Alibaba Cloud Linux 3操作系统为例,介绍如何修改网卡多队列数。本示例假设ECS实例主网卡的名称为eth0,辅助弹性网卡名称为eth1。

  1. 远程连接Linux实例。

    具体操作,请参见通过密码或密钥认证登录Linux实例

  2. 执行以下命令,查看主网卡支持多队列的情况。

    ethtool -l eth0

    若系统返回信息中有两个Combined,则表示主网卡已开启支持多队列,您可以按需继续执行下述操作自定义配置主网卡的多队列数。

    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个队列
  3. 执行以下命令,设置主网卡使用2个队列功能。

    sudo ethtool -L eth0 combined 2
  4. 执行以下命令,查看辅助弹性网卡eth1支持多队列的情况。

    ethtool -l eth1

    若系统返回信息中有两个Combined,则表示辅助弹性网卡已开启支持多队列,您可以按需继续执行下述操作自定义配置辅助弹性网卡的多队列数。

    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个队列
  5. 执行以下命令,设置辅助弹性网卡使用4个队列功能。

    sudo ethtool -L eth1 combined 4
说明

根据测试结果,在相同的网络PPS和网络带宽条件下,相较于单个队列,使用两个队列的网络性能提升可达到50%~100%,而使用四个队列的性能提升则更加显著。如何测试网络性能,请参见网络性能测试最佳实践

相关文档

如果您需要了解网络中断亲和性的更多信息,请参见IRQ Affinity