單個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系統的驅動安裝過程如下。
- 提交工單,索取並下載驅動安裝包。
- 解壓驅動安裝包。您會看到幾個檔案夾,Windows 2012/2016應使用Win8/amd64檔案夾下的驅動。
- 升級網卡驅動:
- 選擇 。
- 按右鍵 Red Hat VirtIO Ethernet Adapter,選擇 更新驅動程式軟體。
- 選擇本地剛才解壓的驅動目錄的Win8/admin64目錄,更新驅動即可。
- 完成驅動升級後,建議重啟Windows系統。
至此,您就可以開始使用網卡多隊列功能了。