單個CPU處理網路中斷存在瓶頸,您可以將ECS執行個體中的網卡中斷分散給不同的CPU處理。經測試,在網路PPS和網路頻寬的測試中,與1個隊列相比,2個隊列最多可提升50%到1倍,4個隊列的效能提升更大。

支援多隊列的ECS執行個體規格

各種執行個體規格對網卡多隊列的支援現狀,詳見 執行個體規格類型系列

支援多隊列的鏡像

目前,由阿里雲官方提供的公共鏡像中,以下鏡像支援多隊列:

说明 鏡像是否支援多隊列與作業系統的位元無關。
  • CentOS 6.8/6.9/7.2/7.3/7.4
  • Ubuntu 14.04/16.04
  • Debian 8.9
  • SUSE Linux Enterprise Server 12 SP1
  • Windows 2012 R2和Windows 2016:尚未公開支援,可邀測

SUSE Linux Enterprise Server 12 SP2即將上線。

在 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系統的驅動安裝過程如下。

  1. 提交工單,索取並下載驅動安裝包。
  2. 解壓驅動安裝包。您會看到幾個檔案夾,Windows 2012/2016應使用Win8/amd64檔案夾下的驅動。
  3. 升級網卡驅動:
    1. 選擇 裝置管理員 > 網路介面卡
    2. 按右鍵 Red Hat VirtIO Ethernet Adapter,選擇 更新驅動程式軟體
    3. 選擇本地剛才解壓的驅動目錄的Win8/admin64目錄,更新驅動即可。
  4. 完成驅動升級後,建議重啟Windows系統。

至此,您就可以開始使用網卡多隊列功能了。