網卡多隊列
網卡多隊列
內容來自: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
。 -
對於有多個網卡的用戶,可以對多個網卡分別進行設置:
[[email protected] ~]# 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個隊列
[[email protected] ~]# 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 系統。
至此,您就可以開始使用網卡多隊列功能了。
網卡多隊列