多隊列是指網路介面卡具有在多個發送和接收隊列上平行處理網路資料包的能力。在使用網卡多隊列時,通常需要配置網路中斷親和性(IRQ Affinity),將不同的隊列中斷分配給特定的CPU處理,而不是由任意的CPU處理,這有助於減少CPU之間的爭用並提高網路效能。本文介紹如何配置Linux系統的網卡多隊列的網路中斷親和性和修改網卡多隊列數。
前提條件
您的執行個體規格支援網卡多隊列功能。
支援多隊列的執行個體規格請參見執行個體規格類型系列,多隊列數值大於1時,表示支援網卡多隊列。
您的鏡像支援網卡多隊列功能。
重要一些早期上架的公用鏡像(核心版本小於2.6)可能不支援網卡多隊列,建議您使用最新的公用鏡像。
除Red Hat Enterprise Linux以外的鏡像已預設支援網路中斷親和性,無需再配置。
Red Hat Enterprise Linux鏡像支援但未開啟網卡多隊列的網路中斷親和性,您需要按照本文進行配置。
修改網卡多隊列數和配置網路中斷親和性是用於最佳化網路效能的不同方法,您需要根據系統的實際負載情況,通過測試不同的配置組合,觀察系統效能(如輸送量、延遲等指標),合理分配多隊列到不同的CPU核心,並相應地設定中斷親和性,確保負載平衡。
配置網路中斷親和性
下述操作以Red Hat 9.2鏡像系統為例,介紹如何通過ecs_mq
指令碼自動設定網卡多隊列的網路中斷親和性。如果您的系統鏡像並非Red Hat Enterprise Linux,已預設開啟,則無需再配置。
遠端連線Linux執行個體。
具體操作,請參見通過密碼或密鑰認證登入Linux執行個體。
(可選)關閉irqbalance服務。
由於irqbalance服務會動態調整IRQ Affinity,配置
ecs_mq
指令碼會和irqbalance產生衝突,建議關閉irqbalance服務。systemctl stop irqbalance.service
執行以下命令,下載最新版本的網卡多隊列的自動設定指令碼
ecs_mq
。wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/ecs_mq/ecs_mq_2.0.tgz
執行以下命令,解壓
ecs_mq
指令碼。tar -xzf ecs_mq_2.0.tgz
執行以下命令,更換工作路徑。
cd ecs_mq/
執行以下命令,運行
ecs_mq
指令碼。bash install.sh redhat 9
說明請您根據實際環境替換命令中的 redhat 和 9為您自己的
<作業系統名稱>
和<作業系統主要版本號>
。執行以下命令,啟動
ecs_mq
指令碼。systemctl start ecs_mq
啟動指令碼後,系統自動啟動網路中斷親和性。
修改網卡多隊列數
下述操作以支援多隊列的Alibaba Cloud Linux 3作業系統為例,介紹如何修改網卡多隊列數。
根據測試結果,在相同的網路PPS和網路頻寬條件下,相較於單個隊列,使用兩個隊列的網路效能提升可達到50%~100%,而使用四個隊列的效能提升則更加顯著。如何測試網路效能,請參見網路效能測試方法。您可以根據實際需要,修改網卡多隊列數。
遠端連線Linux執行個體。
具體操作,請參見通過密碼或密鑰認證登入Linux執行個體。
執行
ip address show
命令,查看網路設定相關資訊。執行以下命令,查看主網卡eth0支援多隊列的情況。
ethtool -l eth0
根據返回結果查看是否支援網卡多隊列:
如果 "Pre-set maximums" 下的 "Combined" 值大於1,表示網卡支援多隊列。
您可以根據這個最大值來設定當前的隊列數:
執行命令
sudo ethtool -L eth0 combined N
,其中N
是您希望設定的隊列數,且N
應該小於或等於 "Pre-set maximums" 下的 "Combined" 值。“Current hardware settings”下的“Combined”值表示當前生效的隊列數。
本例中返回表示最多支援2個隊列,且當前生效的是1個隊列:
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個隊列
執行以下命令,設定主網卡使用2個隊列功能。
sudo ethtool -L eth0 combined 2
執行以下命令,查看輔助彈性網卡eth1支援多隊列的情況。
ethtool -l eth1
通過返回資訊可以看到,輔助彈性網卡已開啟支援多隊列。您可以按需繼續執行下述操作自訂配置輔助彈性網卡的多隊列數。
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個隊列
執行以下命令,設定輔助彈性網卡使用4個隊列功能。
sudo ethtool -L eth1 combined 4
相關文檔
如果您需要瞭解網路中斷親和性的更多資訊,請參見IRQ Affinity。
如果您需要瞭解如何建立彈性網卡的,請參見建立輔助彈性網卡。
如果您需要瞭解如何綁定彈性網卡,請參見綁定輔助彈性網卡。