全部產品
Search
文件中心

Elastic Compute Service:配置網卡多隊列的網路中斷親和性及修改網卡多隊列數

更新時間:Sep 21, 2024

多隊列是指網路介面卡具有在多個發送和接收隊列上平行處理網路資料包的能力。在使用網卡多隊列時,通常需要配置網路中斷親和性(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,已預設開啟,則無需再配置。

  1. 遠端連線Linux執行個體。

    具體操作,請參見通過密碼或密鑰認證登入Linux執行個體

  2. (可選)關閉irqbalance服務。

    由於irqbalance服務會動態調整IRQ Affinity,配置ecs_mq指令碼會和irqbalance產生衝突,建議關閉irqbalance服務。

    systemctl stop irqbalance.service
  3. 執行以下命令,下載最新版本的網卡多隊列的自動設定指令碼ecs_mq

    wget https://ecs-image-tools.oss-cn-hangzhou.aliyuncs.com/ecs_mq/ecs_mq_2.0.tgz

    最新版ecs_mq修複的問題

    最新版ecs_mq相對於舊版ecs_mq修複的問題如下:

    • 根據網卡裝置PCIe的NUMA(非統一記憶體訪問)位置,來優先綁定對應的NUMA上的CPU。

    • 最佳化了多網路裝置調優的邏輯。

    • 根據網卡隊列數目和CPU數目的比例來進行不同規格的網卡中斷綁定邏輯。

    • 最佳化了根據CPU中sibling的位置進行中斷綁定。

    • 解決了舊版綁定中可能跨越NUMA導致的記憶體訪問延遲問題。

    • 預設開啟新版開關,同時支援切換新版和舊版的ecs_mq選項開關,切換命令如下:

      • 切換為舊版ecs_mqecs_mq_rps_rfs old

      • 切換為新版ecs_mqecs_mq_rps_rfs new

    說明

    新版ecs_mq相對於舊版ecs_mq,在網路效能測試中,針對大部分PPS、BPS,網路效能提升可達到5%~30%。

  4. 執行以下命令,解壓ecs_mq指令碼。

    tar -xzf ecs_mq_2.0.tgz
  5. 執行以下命令,更換工作路徑。

    cd ecs_mq/
  6. 執行以下命令,運行ecs_mq指令碼。

    bash install.sh redhat 9
    說明

    請您根據實際環境替換命令中的 redhat 和 9為您自己的<作業系統名稱><作業系統主要版本號>

  7. 執行以下命令,啟動ecs_mq指令碼。

    systemctl start ecs_mq

    啟動指令碼後,系統自動啟動網路中斷親和性。

修改網卡多隊列數

下述操作以支援多隊列的Alibaba Cloud Linux 3作業系統為例,介紹如何修改網卡多隊列數。

說明

根據測試結果,在相同的網路PPS和網路頻寬條件下,相較於單個隊列,使用兩個隊列的網路效能提升可達到50%~100%,而使用四個隊列的效能提升則更加顯著。如何測試網路效能,請參見網路效能測試方法。您可以根據實際需要,修改網卡多隊列數。

  1. 遠端連線Linux執行個體。

    具體操作,請參見通過密碼或密鑰認證登入Linux執行個體

  2. 執行ip address show命令,查看網路設定相關資訊。

    image

  3. 執行以下命令,查看主網卡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個隊列
  4. 執行以下命令,設定主網卡使用2個隊列功能。

    sudo ethtool -L eth0 combined 2
  5. 執行以下命令,查看輔助彈性網卡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個隊列
  6. 執行以下命令,設定輔助彈性網卡使用4個隊列功能。

    sudo ethtool -L eth1 combined 4

相關文檔

如果您需要瞭解網路中斷親和性的更多資訊,請參見IRQ Affinity

如果您需要瞭解如何建立彈性網卡的,請參見建立輔助彈性網卡

如果您需要瞭解如何綁定彈性網卡,請參見綁定輔助彈性網卡