1. 程式人生 > >網卡多隊列

網卡多隊列

ubuntu 解壓 cpuinfo 網卡 har chan hat 表示 ice

網卡多隊列

內容來自:https://help.aliyun.com/document_detail/52559.html

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

支持多隊列的 ECS 實例規格

各種實例規格對網卡多隊列的支持現狀,詳見 實例規格族。

支持多隊列的鏡像

目前,由阿裏雲官方提供的公共鏡像中,支持多隊列的鏡像如下表所示。鏡像是否支持多隊列與操作系統的位數無關。

鏡像名稱是否支持多隊列?備註
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

  • 對於有多個網卡的用戶,可以對多個網卡分別進行設置:

    1. [[email protected] ~]# ethtool -l eth0
    2. Channel parameters for eth0:
    3. Pre-set maximums:
    4. RX: 0
    5. TX: 0
    6. Other: 0
    7. Combined: 2 # 這一行表示最多支持設置2個隊列
    8. Current hardware settings:
    9. RX: 0
    10. TX: 0
    11. Other: 0
    12. Combined: 1 #表示當前生效的是1個隊列
    13. [[email protected] ~]# ethtool -L eth0 combined 2 # 設置eth0當前使用2個隊列
  • 建議開啟 irqbalance 服務,讓系統自動調整網卡中斷在多個 CPU 核上的分配。運行命令:systemctl start irqbalance (CentOS 7.2 已默認開啟)。

  • 開啟多隊列後,如果網絡性能提升仍不如您的預期,您可以考慮開啟 RPS 特性。參考如下 Shell 腳本:

    1. #!/bin/bash
    2. cpu_num=$(grep -c processor /proc/cpuinfo)
    3. quotient=$((cpu_num/8))
    4. if [ $quotient -gt 2 ]; then
    5. quotient=2
    6. elif [ $quotient -lt 1 ]; then
    7. quotient=1
    8. fi
    9. for i in $(seq $quotient)
    10. do
    11. cpuset="${cpuset}f"
    12. done
    13. for rps_file in $(ls /sys/class/net/eth*/queues/rx-*/rps_cpus)
    14. do
    15. echo $cpuset > $rps_file
    16. 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 系統。

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

網卡多隊列