英特爾標誌英特爾® 乙太網路 700 系列
Linux效能調優指南
NEX雲端網路集團(NCNG)
修訂版 1.2
2024 年 XNUMX 月

修訂歷史

修訂 日期 評論
1.2 2024 年 XNUMX 月 · 增加了額外的電源管理指南。
· 新增了 Intel* Turbo Boost。
· 增加了網路設備積壓。
· 新增了平台特定的配置和調整。
· 新增了第四代英特爾* %eon* 可擴充處理器。
· 新增了 AMD EPYC。
· 更新了檢查系統硬體功能。
· 更新了 iPerf2。
· 更新了 iPerf3。
· 更新了 Tx/Rx 佇列。
· 更新了中斷調節。
· 更新了戒指尺寸。
· 更新平台調整(i40e 非特定)。
· 更新了 BIOS 設定。
· 更新了 C 狀態控制。
· 更新了 CPU 頻率調節。
· 更新了應用程式設定。
· 更新作業系統/核心設定。
· 更新了 IP 轉送。
· 更新了低延遲。
2023 年 XNUMX 月 本文檔的變更包括:
· 增加了相關參考。
· 新增了確保 DDP 套件正確載入。
· 新增了 iPerf2。
· 新增了 iPerf3。
· 新增了 netperf。
· 更新了 IRQ 親和性。
· 新增了 Tx/Rx 佇列。
· 更新了戒指尺寸。
· 新增了巨型幀。
· 增加了適配器綁定。
· 增加了英特爾 svr-info 工具。
1.0 2016年XNUMX月 初始版本(英特爾公開)。

介紹

本指南旨在為在 Linux 環境中使用英特爾® 乙太網路 700 系列 NIC 調整環境以實現最佳網路效能提供指導。它重點關注可能改善網路效能的硬體、驅動程式和作業系統條件和設定。需要注意的是,網路效能可能會受到多種外部因素的影響,本指南僅介紹其中最常見和最嚴重的因素。
1.1 相關參考文獻

初始清單

2.1 更新驅動程式/韌體版本
使用 ethtool -i ethx 檢查驅動程式/韌體版本。
根據需要更新以下內容:

2.2 閱讀自述文件
檢查已知問題並從 README 中取得最新的設定說明 file 包含在 i40e 來源包中。
2.3 檢查您的 PCI Express (PCIe) 插槽是否為 x8
一些 PCIe x8 插槽實際上配置為 x4 插槽。這些插槽的頻寬不足以支援雙埠和四埠設備的全線速運轉。此外,如果將支援 PCIe v3.0 的轉接器插入 PCIe v2.x 插槽,則無法取得全部頻寬。軟體設備驅動程式偵測到這種情況並在系統日誌中寫入以下訊息:
此卡可用的 PCI-Express 頻寬不足以實現最佳效能。為了獲得最佳效能,需要 x8 PCI-Express 插槽。
如果發生此錯誤,請將適配器移至真正的 PCIe v3.0 x8 插槽以解決問題。
2.4 檢查系統硬體功能
在 10 Gbps、25 Gbps 和 40 Gbps 乙太網路中,有一些最低 CPU 和系統需求。一般來說,適合您平台的現代伺服器級處理器和最佳記憶體配置應該足夠了,但需求會根據您的工作負載而有所不同。所有記憶體通道都應填充,並且應在 BIOS 中啟用記憶體效能模式。驗證您的 CPU 和記憶體配置是否能夠支援您的工作負載所需的網路效能等級。
筆記
XL710 是一個 40 GbE 控制器。使用此控制器的 2 x 40 GbE 轉接器並非設計為 2 x 40 GbE,而是具有活動備用連接埠的 1 x 40 GbE。當嘗試使用涉及兩個連接埠的線速流量時,內部交換器已飽和,並且兩個連接埠之間的組合頻寬總共限制為 XNUMX Gbps。
2.4.1 核心啟動參數
如果在 BIOS 中啟用了英特爾® 定向 I/O 虛擬化技術(Intel® VT-d),英特爾建議 IOMMU 處於直通模式,以實現最佳主機網路效能。這消除了主機流量的 DMA 開銷,同時使虛擬機器 (VM) 仍然具有 Intel® VT-d 的優勢。這是透過向內核啟動參數添加以下行來實現的:fommu-pt。
2.5 確保 DDP 包正確加載
140ea 和 140eb 基礎驅動程式不直接支援動態裝置個人化 (DDP)。要將 DDP 與 700 系列設備一起使用,需要 DDP profile 可以與 testpmd 應用程式一起應用。
有關 DDP pro 的詳細信息file以及如何應用 DDP profile 使用 700 系列裝置上的 testpmd,請參閱英特爾® 乙太網路 700 系列動態裝置個人化 (DDP) 技術指南。
驗證 DDP 是否file 已成功載入:
testpmd> ddp 取得清單 0 Profile 數量為:1
筆記
如果親file 數字為0,表示沒有載入DDP包。如果發生 DDP 套件載入錯誤,裝置將預設進入安全模式,且許多效能功能不可用。如果載入 DDP 套件時出現錯誤,則會導致效能問題。如需故障排除步驟,請參閱 Inte/* 乙太網路 700 系列動態設備個人化 (DDP) 技術指南。

基準性能測量和調整方法

3.1 網路效能基準
在開始調整練習之前,對網路效能進行良好的基線測量非常重要。通常,除了對特定應用程式/工作負載的效能進行初步測量之外,最好還使用標準網路效能基準來驗證網路設備是否處於良好狀態。
對於單系統最佳化,netperf 或 iperf 和 NetPIPE 都是可靠的開源免費工具,可讓您強調連線並診斷效能問題。
Netperf 在吞吐量和延遲測試方面都表現出色。 NetPIPE 是一種特定於延遲的工具,但可以針對任何類型的環境進行編譯。
筆記
netperf 中的 TCP_RR 測試以交易/秒的值傳回延遲。這是一個往返號碼。單向延遲可以使用以下公式計算:
延遲(微秒)=(1⁄2)/[事務數/秒] * 1,000,000
3.1.1 iPerf2
由於 iperf2 易於使用且支援在單一應用程式實例中使用多個線程,因此英特爾建議在大多數基準測試情況下使用 iperf3 而不是 iperf2。英特爾建議使用 -P 選項運行,4G 連線使用 25-4 個線程,6G 連線使用 40-XNUMX 個線程。

  • 要執行從客戶端到伺服器的單向流量:伺服器命令 examp樂:iperf2 -s
    客戶端命令範例amp樂:iperf2 -c -P
  • 若要執行從客戶端到伺服器的雙向流量(反之亦然):伺服器命令 examp樂:iperf2 –s –p
    客戶端命令範例amp樂:
    iperf2 -c -p -P -全雙工或
    iperf2 -c -p -P –d

筆記
iperf2 中的 –full-duplex 和 -d 選項都允許使用者執行雙向測試。但是,–full-duplex 選項專門針對全雙工測試。
筆記
在跨多個伺服器連接埠測試 iperf2 時,可以將 -d 標誌新增至伺服器命令中,以便從同一個終端機視窗在背景執行所有伺服器工作階段。當伺服器指令嵌入腳本中的 for 迴圈內時,也可以使用 -d 標誌。
筆記
使用單一串流/執行緒執行網路吞吐量測試時(例如amp例如:P1),AMD 處理器可能無法提供預期的吞吐量,特別是更高頻寬的 NIC(如果速度 >= 25G 頻寬)。因此,需要將應用程式固定到特定核心才能實現更高的吞吐量。請參閱第 22 頁的應用程式設定。
3.1.2 iPerf3
如果使用 iperf3,則需要應用程式的多個實例才能發揮優勢tag多執行緒、RSS 和硬體佇列。英特爾建議 2G 連線運行 4-25 個應用程式會話,4G 連線運行 6-40 個應用程式會話。每個會話都應使用 -p 選項指定一個唯一的 TCP 連接埠值。

  • 要運行從客戶端到伺服器的單向流量:
    伺服器命令範例amp樂:
    iperf3 -s -p
    客戶端命令範例amp樂:
    iperf3 -c -p
  • 要執行從客戶端到伺服器的雙向流量(反之亦然):
    伺服器命令範例amp樂:
    iperf3 –s –p
    客戶端命令範例amp樂:iperf3 -c -p -P –-bidir
  • 要啟動 iperf3 的多個實例(線程),建議使用 for 循環將線程映射到 TCP 端口,並使用 & 在後台運行 iperf3 以並行創建多個進程。
    伺服器命令範例ample、啟動4個執行緒:port=””;對於我在 {0..3} 中;執行埠=520$i; bash -c“iperf3 -s -p $port &”;完畢;客戶端指令範例ample、啟動4個線程-發送測試端口=””;對於我在 {0..3} 中;執行端口=520$i; bash -c“iperf3 -c $伺服器IP -p $端口&”;完畢;客戶端命令範例ample、啟動4個線程-接收測試端口=””;對於我在 {0..3} 中;執行端口=520$i; bash -c“iperf3 -R -c $伺服器IP -p $端口&”;完畢;對於 40G 連接,增加 for 循環以創建最多 6 個實例/線程。

筆記
使用單一串流/執行緒執行網路吞吐量測試時(例如amp例如:P1),AMD 處理器可能無法提供預期的吞吐量,尤其是更高的頻寬
NIC(如果速度> = 25G頻寬)。因此,需要將應用程式固定到特定核心才能實現更高的吞吐量。請參閱第 22 頁的應用程式設定和第 26 頁的 AMD EPYC。
3.1.3 netperf
netperf 工具是吞吐量和延遲測試的強大選擇。

  • netperf 中的 TCP_STREAM 測試測量設備的吞吐能力。伺服器命令範例ample: netserver 用戶端指令 examp例如:netperf -t TCP_STREAM -l 30 -H
  • netperf 中的 TCP_RR 測試以交易/秒的值傳回延遲。這是一個往返號碼。建議使用 -T x,x 選項,其中 x 是裝置本地的 CPU。單向延遲可以使用以下公式計算:延遲(微秒)=(1⁄2)/ [交易/秒] * 1,000,\ 伺服器指令範例ample: 網路伺服器
    客戶端命令範例amp例如:netperf -t TCP_RR -l 30 -H -T x,x
  • 要啟動 netperf 的多個實例(線程),建議使用 for 循環將線程映射到 TCP 端口,並使用 & 在後台運行 netperf 以並行創建多個進程。
    伺服器命令範例ample,啟動8個執行緒:
    連接埠=””;對於我在 {0..7} 中;執行連接埠=520$i; bash -c“netserver -L $伺服器IP -p $連接埠&”;完畢;
    客戶端命令範例ample、啟動8個執行緒:port=””;對於我在 {0..7} 中;執行埠=520$i; bash -c“netperf -H $serverIP -p $port -t TCP_STREAM -l 30 &”;完畢;

3.2 調優方法
每次專注於一個調整變化,這樣您就知道每個變化對測試有何影響。調整過程越有條理,就越容易識別和解決效能瓶頸的原因。

調整 i40e 驅動程式設定

4.1 IRQ親和性
配置 IRQ 親和性,以便不同網路佇列的中斷被關聯到不同的 CPU 核心,這會對效能產生巨大影響,尤其是多執行緒吞吐量測試。
若要設定 IRQ 親和性,請停止 irqbalance,然後使用 i40e 來源套件中的 set_irq_affinity 腳本或手動使用 pin 佇列。停用使用者空間 IRQ 平衡器以啟用佇列固定:

  • systemctl 禁用 irqbalance
  • systemctl 停止 irqbalance
    使用 i40e 來源套件中的 set_irq_affinity 腳本(建議):
  • 要使用所有核心:
    [i40epackage 路徑]/scripts/set_irq_affinity -X all ethX
  • 僅使用本機 NUMA 套接字上的核心:[path-to-i40epackage]/scripts/set_irq_affinity -X local ethX
  • 您也可以選擇一系列核心。避免使用 cpu0,因為它運行計時器任務。 [i40epackage 的路徑]/scripts/set_irq_affinity 1-2 ethX

筆記
當指定 -x 選項時,親和性腳本會啟用傳輸封包控制 (XPS) 作為固定過程的一部分。當啟用 XPS 時,英特爾建議您停用 irqbalance,因為具有 XPS 的核心平衡器可能會導致不可預測的效能。當指定 -X 選項時,親和性腳本會停用 XPS。停用 XPS 並啟用對稱佇列對於工作負載有益,因為當 Tx 和 Rx 流量在同一佇列對上得到服務時可實現最佳效能。
在 Linux 中配置對稱佇列涉及調整網路介面驅動程式參數,以便為受支援的網路介面卡啟用對稱接收佇列 (Rx) 和對稱傳輸佇列 (Tx)。
筆記

  • 對稱佇列是一種進階網路功能,並非所有 700 系列網路介面卡或驅動程式都支援它們。
  • 在嘗試配置對稱佇列之前,請確保您擁有必要的驅動程式和硬體支援。

若要配置對稱佇列,請遵循以下常規步驟:

  1. 編輯網路介面配置 File:使用文字編輯器(例如ample、vi、nano 或 gedit)來編輯網路介面配置 file。這 file 通常位於 /etc/sysconfig/network-scripts/ 目錄下,其名稱類似於 ifcfg-ethX,其中 ethX 是網路介面的名稱。
  2. 新增對稱隊列參數。將以下行新增至網路介面配置 file: ETHTOOL_OPTS=”rx-queues 8 tx-queues 8″
  3. 重新啟動網路服務。
    進行變更後,重新啟動網路服務以套用新配置。 sudo systemctl 重啟網絡

手動:

  • 使用以下命令尋找連接到每個節點的處理器:numactl –hardware lscpu
  • 找到每個處理器的位元遮罩:
  • 假設節點 0 的核心 11-0:[1,2,4,8,10,20,40,80,100,200,400,800]
  • 找到指派給連接埠的 IRQ:grep ethX /proc/interrupts 並記下 IRQ 值。例如ample, 181-192 為載入的 12 個向量。
  • 將 SMP 親和性值回顯到對應的 IRQ 條目中。請注意,需要對每個 IRQ 條目執行此操作: echo 1 > /proc/irq/181/smp_affinity echo 2 > /proc/irq/182/smp_affinity echo 4 > /proc/irq/183/smp_affinity 顯示 IRQ 親和性:
  • 顯示所有核心的 IRQ 親和性: /腳本/set_irq_affinity -s ethX
  • 僅顯示本機 NUMA 套接字上的核心: /scripts/set_irq_affinity -s 本地 ethX
  • 您也可以選擇一系列核心: /scripts/set_irq_affinity -s 40-0-8,16 ethX

筆記
set_irq_affinity 腳本在 i40e 驅動程式版本 2.16.11 及更高版本中支援 -s 標誌。
4.2 Tx/Rx隊列
驅動程式在初始化時為每個乙太網路連接埠啟用的預設佇列數等於平台中可用的 CPU 總數。這對於許多平台和工作負載配置都很有效。然而,在核心數較多和/或乙太網路連接埠密度較高的平台中,這種配置可能會導致資源爭用。因此,在某些情況下可能需要修改系統中每個連接埠的預設值。
Tx/Rx 佇列的預設數量可能會因特定型號和驅動程式版本而異。可以使用下面列出的 ethtool -L 指令調整佇列的數量。
筆記
在這些情況下,英特爾建議您將每個連接埠的預設佇列數減少到不超過適配器連接埠本機 NUMA 節點中可用的 CPU 數量。在某些情況下,當嘗試平衡高連接埠數實現上的資源時,可能需要進一步減少這個數字。
修改隊列配置:
以下前ample 將連接埠設定為 32 個 Tx/Rx 佇列:ethtool -L ethX combined 32
Examp文件輸出:
ethtool -l ethX
ethX 的頻道參數:預設最大值:
接收:96
德克薩斯州:96
其他:1
總計:96
目前硬體設定:
接收:0
德克薩斯州:0
其他:1
總計:32
4.3 中斷審核
自適應中斷調節預設為開啟狀態,旨在在低 CPU 利用率和高效能之間提供平衡的方法。但是,您可以嘗試手動調整中斷設定以適合您的使用情況。
0-235 微秒的範圍提供了每秒 4,310 到 250,000 次中斷的有效範圍。 rx-μsecs-high 的值可以在同一個 ethtool 指令中獨立於 rx-μsecs 和 tx-μsecs 進行設置,也獨立於自適應中斷調節演算法。底層硬體支援 2 微秒間隔的粒度,因此相鄰的值可能會導致相同的中斷率。

  • 若要關閉自適應中斷調整:ethtool -C ethX adapted-rx off adapted-tx off
  • 要開啟自適應中斷調節:ethtool -C ethX adapted-rx on adapted-tx on

對於一般調整來說,一個好的起點是 84 μs,或 ~12000 次中斷/秒。如果您看到 rx_dropped 計數器在流量期間運行(使用 ethtool -S ethX),那麼您的 CPU 可能太慢,適配器環大小(ethtool -G)的緩衝區不足以容納 84 μs 的封包,或者中斷率太低。

  • 若要將中斷調節設定為兩次中斷之間 84 μs 的固定中斷率(12000 次中斷/秒):ethtool -C ethX adapted-rx off adapted-tx off rx-usecs 84 tx-usecs 84 如果 CPU 使用率未達到最大值,則下一個要嘗試的值是 62 μscs XNUMX 如果 CPU 使用率未達到最大值,則下一個要嘗試的值是 XNUMX μs。這會使用更多的 CPU,但它的服務緩衝區更快,並且需要更少的描述符(環大小,ethtool -G)。
  • 將中斷調節設定為中斷間隔固定為 62 微秒(每秒 16000 次中斷)。 ethtool -C ethX 自適應接收關閉 自適應發送關閉 接收-微秒 62 發送-微秒 62
    如果 rx_dropped 計數器在流量期間增加(使用 ethtool -S ethX),則可能是您的 CPU 太慢、適配器環大小的緩衝區不足(ethtool -G),或者中斷率太低。如果 CPU 使用率沒有達到最大值,則可以透過降低 ITR 值來增加中斷率。這會使用更多的 CPU,但服務緩衝速度更快,並且需要更少的描述符(環大小,ethtool -G)。
    如果您的 CPU 已達到 100%,則不建議增加中斷率。在某些情況下,例如 CPU 密集型工作負載,您可能需要增加 μs 值,以便為其他應用程式提供更多的 CPU 時間。
    如果您需要低延遲效能和/或有足夠的 CPU 用於網路處理,您可以完全停用中斷審核,這使得中斷盡快觸發。
  • 若要停用中斷調節,請執行 ethtool -C ethX adapted-rx off adapted-tx off rx-usecs 0 tx-usecs 0

筆記
當停用中斷調節運行時,每個佇列上的中斷率可能會非常高。考慮包括 rx-usec-high 參數來設定中斷率的上限。以下命令可停用自適應中斷調節,並允許最多 5 微秒的時間,然後指示接收或傳輸已完成。它不會導致每秒發生多達 200,000 次中斷,而是透過 rx-usec-high 參數將每秒的總中斷數限制為 50,000 次。 # ethtool -C ethX adapted-rx off adapted-tx off rx-usecs-high 20 rx-usecs 5 txusecs 5 嘗試將發送/接收/高優先級合併計時器調整得更高(80/100/150/200)或更低(25/20/10/5)或更低(XNUMX/XNUMX/XNUMX/XNUMX)或更低(XNUMX/XNUMX/XNUMX/XNUMX)或更低(XNUMX/XNUMX/XNUMX/XNUMX)或更低(XNUMX/XNUMX/XNUMX/XNUMX)或更低(XNUMX/XNUMX/XNUMX/XNUMX)或更低(XNUMX/XNUMX)的最佳負載。
4.4 戒指尺寸
如果您在 ethtool -S ethX (rx_dropped、rx_dropped.nic) 中看到 rx_dropped 計數器,或懷疑多個活動佇列有快取壓力,您可以嘗試調整環大小的預設值。預設值為 512,最大值為 4096。

  • 檢查目前值:ethtool -g ethX
    如果懷疑緩衝不足導致當前中斷率下降,您可以先嘗試最大值,然後嘗試最小值,然後繼續進行二進制搜索,直到您看到最佳性能。
    如果懷疑存在快取壓力(許多佇列處於活動狀態),減少預設值的緩衝區可以幫助英特爾® 資料直接 I/O(英特爾® DDIO)更有效率地運作。英特爾建議每個佇列嘗試 128 或 256,但要注意可能需要透過 ethtool -C 增加中斷率以避免 rx_dropped 增加。
  • 若要將環大小設定為固定值:ethtool -G eth12 rx 256 tx 256

筆記
若要修復使用 ethtool -S ethX|grep drop 發現的 Rx 封包遺失,請考慮將環大小增加到 4096。透過實驗找到最適合工作負載的設置,但要注意較高的值會導致記憶體佔用過多。
4.5 流量控制
第 2 層流量控制會顯著影響 TCP 效能,建議在大多數工作負載下停用此功能。一個潛在的例外是突發流量,突發流量的持續時間不長。
預設情況下,流量控制是禁用的。

  • 啟用流量控制:ethtool -A ethX rx on tx on
  • 若要停用流量控制:ethtool -A ethX rx off tx off

筆記
您必須具備具有流量控制功能的連結夥伴才能成功啟用流量控制。
4.6 巨型幀
當預期的流量環境包含大量正在傳輸的資料區塊時,啟用巨型幀功能可能會有所幫助。透過將最大傳輸單元 (MTU) 變更為大於預設值 1500 的值,可以啟用巨型幀支援。此設定可能會提高吞吐量並降低大型 I/O 工作負載的 CPU 使用率。但是,它可能會影響小資料包或延遲敏感的工作負載。
筆記
必須在您的網路環境中正確配置巨型影格或更大的 MTU 設定。
使用 ifconfig 指令增加 MTU 大小。例如ample,輸入以下內容,其中是介面號碼:ifconfig mtu 9000 啟動
或者,您可以使用以下 ip 指令:ip link set mtu 9000 dev ip 連結設定 dev

平台調優(i40e 非特定)

5.1 BIOS設定

  • 啟用 Intel® VT-d 來處理虛擬化工作負載。
  • 超執行緒(邏輯處理器)會影響效能。根據您的工作量嘗試打開或關閉它。
  • 英特爾® Turbo Boost 允許 CPU 核心以高於 CPU 基本頻率的頻率運作。啟用英特爾® Turbo Boost 可以提高許多工作負載的效能,但會消耗更多電量來維持核心的更高頻率。根據你的工作量嘗試開啟/關閉 Turbo Boost。

筆記
如果平台的整體 CPU 使用率較高,則無法保證 Turbo 頻率。隨著整體 CPU 使用率的增加,更高的核心睿頻會降低。
5.2 電源管理
電源管理會影響效能,特別是在低延遲工作負載下。如果效能比降低功耗更重要,英特爾建議您嘗試限制電源管理的影響。有很多不同的方法可以限制電源管理,透過作業系統工具、BIOS 設定和核心啟動參數。選擇適合您環境的最佳方法和等級。
5.2.1 C狀態控制
將 C 狀態進入限制為 CO 或 C1 可提高效能並增加電源利用率。
禁用 CPU 包 C6 狀態進入可以提高網路效能。然而,這會增加電力消耗。
可以使用以下選項:

  • 動態控制C狀態進入:
    打開
    /dev/cpu_dma_latency 並將最大允許延遲寫入其中。

筆記
有一個名為 cpudmalatency.c 的小程式可以從開源社群下載,編譯並從命令列執行來執行此操作。
以下前ample 允許 1 μs 的喚醒時間,從而允許 C5 進入:cpudmalatency XNUMX &

  • 限制核心啟動設定中的最大 C 狀態:
    對於英特爾 CPU:intel_idle.max_cstates=1
    對於非英特爾 CPU:processor.max_cstates=1
  • 使用 cpupower 指令檢查並停用 CPU C6 狀態:檢查:cpupowermonitor 或 cpupoweridle-info
    停用 C6:cpupower idle-set -d3 或
    停用 C 狀態:cpupower idle-set -D0

筆記:

  1. 如果伺服器配備了 Intel® 第四代 Intel® Xeon® 可擴充處理器,則停用 CPU 上的 C 狀態。啟用或停用超線程時,停用空閒狀態 (-D4) 可防止核心在空閒期間進入低功耗狀態,並減少 CPU 在空閒狀態和活動狀態之間轉換的延遲。
  2. 英特爾® 第四代英特爾® 至強® 可擴充處理器的電源管理極為激進。為了避免核心進入低功耗狀態,請嘗試減少正在使用的核心數量,以使其保持更長的喚醒狀態(ethtool -L合併)。此外,使用設定 irq affinity(通常使用 -x local 或 CPU 核心清單)將中斷綁定到特定核心,並使用 taskset 或 numactl 確保工作負載在相同的核心上運行。透過保持核心活躍和優化中斷處理,這提高了效能。

啟用 C6:
cpupower 空閒設定-d3
啟用 C 狀態:
cpupower 空閒設定-E

  • 另一種方法是利用 tuned 工具(包含在許多 Linux 發行版中)來設定效能file。這些親file修改幾個可能影響許多應用程式效能的作業系統設定。已經發現網路吞吐量file 為大多數工作負載提供改進。
    查看:
    tuned-adm 處於活動狀態
    放:
    tuned-adm profile 網路吞吐量
    筆記
    調整服務必須正在執行上述命令。若要檢查/重新啟動,請調整:systemctl status tuned systemctl restart tuned
    您也可以透過在核心引導行中新增以下內容來禁止任何 C 狀態條目:
    空閒=輪詢
  • 透過系統的 BIOS 電源管理設定來限制 C 狀態,這可能會對效能產生影響file 可用的。
    可以使用 turbostat 或 x86_energy_perf_policy 等工具來檢查或設定電源管理設定。

5.2.2 PCIe電源管理
活動狀態電源管理 (ASPM) 可在 PCIe 連結未處於活動使用狀態時啟用較低功率狀態。這可能會導致 PCIe 網路裝置的延遲更高,因此英特爾建議您針對延遲敏感的工作負載停用 ASPM。透過在核心啟動行中新增以下內容來停用 ASPM:pcie_aspm=off
5.2.3 CPU頻率調節
CPU 頻率調整(或 CPU 速度調整)是一種 Linux 電源管理技術,其中系統時脈速度會動態調整以節省電力和熱量。就像 C 狀態一樣,這可能會導致網路連線出現不必要的延遲。
cpupower 工具也可用於檢查和修改 CPU 效能預設值和限制:

  • 檢查:cpupower 監視器或
  • 將 CPU 設定為效能模式:cpupower frequency-set -g performance

筆記
修改 CPU 頻率限制可能會對許多工作負載產生影響,並且可能會停用其他功能,例如 CPU 渦輪模式。
若要停用 CPU 頻率調整,請透過以下命令停用 CPU 電源服務:
systemctl stop cpupower.service
systemctl disable cpupower.service
5.2.4 附加電源管理指南
更多詳細資訊請參閱此進階概述view 第三代英特爾® 至強® 可擴展處理器中的許多電源管理功能,以及如何在平台層級整合這些功能的指導: https://networkbuilders.intel.com/solutionslibrary/power-management-technologyoverview-technology-guide
5.3 英特爾® 睿頻加速
英特爾® Turbo Boost 在需要時可以讓處理器運作得更快,但會消耗額外的電力。關閉 Turbo Boost 可讓處理器保持穩定的速度,為您提供特定工作負載的一致性能水準。
5.4 防火牆
防火牆會影響效能,尤其是延遲效能。
如果不需要,請停用 iptables/firewalld。
5.5 應用設置
通常單一執行緒(對應單一網路佇列)不足以實現最大頻寬。與基於英特爾處理器的平台相比,某些平台架​​構(例如 AMD)往往會在單一執行緒中丟棄更多的 Rx 資料包。
考慮使用 tasket 或 numactl 等工具將應用程式固定到 NUMA 節點或網路設備本地的 CPU 核心。對於某些工作負載(例如儲存 I/O),將應用程式移至非本機節點會帶來好處。
如果可能的話,請嘗試增加應用程式使用的執行緒數。
5.6 核心版本
大多數現代內建核心都針對效能進行了合理的最佳化,但根據您的使用情況,更新核心可能會提高效能。下載原始程式碼還使您能夠在構建核心之前啟用/停用某些功能。
5.7 作業系統/核心設置
查閱作業系統調整指南,例如《Red Hat Enterprise Linux 網路效能調整指南》,以獲得更多關於一般作業系統調整的見解。
下表列出了一些需要調整的常見參數。請注意,這些只是建議的起點,更改它們的預設值可能會增加系統上使用的資源。雖然增加值可以幫助提高效能,但需要嘗試不同的值來確定最適合給定係統、工作負載和流量類型的值。
可以使用 Linux 中的 sysctl 實用程式配置核心參數,如下所示。
到 view 系統上 rmem 和 wmem 的預設值:
sysctl net.core.rmem_default
sysctl net.core.wmem_default
將值設為最大值(16 MB):
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
套接字緩衝區大小,也稱為接收緩衝區(rmem)和傳輸緩衝區(wmem),是指定為傳入和傳出網路流量保留的記憶體量的系統參數。
運行不帶 -w 參數的 sysctl 會列出具有其目前設定的參數。

堆疊設定 描述
net.core.rmem_default 預設接收視窗大小
net.core.wmem_default 預設傳輸視窗大小
net.core.rmem_max 最大接收視窗大小
net.core.wmem_max 最大傳輸視窗大小
net.core.optmem_max 最大選項記憶體緩衝區
net.core.netdev_max_backlog 內核開始丟棄之前未處理的資料包積壓
net.ipv4.tcp_rmem TCP 讀取緩衝區的記憶體預留
net.ipv4.tcp_wmem TCP 發送緩衝區的記憶體預留

核心、網路堆疊、記憶體處理程序、CPU 速度和電源管理參數會對網路效能產生很大影響。一個常見的建議是應用於網路吞吐量file 使用 tuned 命令。這會修改一些作業系統設置,以提供對網路應用程式的偏好。
查看:
tuned-adm 處於活動狀態
放:
tuned-adm profile 網路吞吐量
5.8 網路設備積壓
此功能透過有效管理傳入流量、減少資料包遺失、降低延遲和提高吞吐量來幫助提高網路效能。這將帶來更好的用戶體驗和更快的系統回應。
預設情況下,它在大多數 Linux 作業系統中是啟用的。檢查預設值:
sysctl net.core.netdev_max_backlog
netdev_max_backlog 的最大值可能因核心版本、硬體、記憶體和工作負載等因素而異。在許多情況下,8192 被視為一個不錯的值。 sysctl -w net.core.netdev_max_backlog=8192
5.9 平台特定的配置和調整
5.9.1 第四代英特爾® 至強® 可擴充處理器

與第三代英特爾® 至強式® 可擴充處理器相比,第四代英特爾® 至強® 可擴充處理器的電源管理極為激進。為了避免核心進入低功耗狀態,請嘗試減少正在使用的核心數量以使它們保持更長時間的喚醒狀態。
為獲得最高性能而推薦的 BIOS 設置

  1. 在 CPU 上啟用/停用超執行緒(基於工作負載需求和效能目標)。
  2. 設定係統專業版file 達到性能的最高性能。
    筆記
    這導致更高的功耗
  3. 將 CPU 電源管理設定為“最大效能”,以優先考慮最大 CPU 效能而不是電源效率。
  4. 啟用 Turbo Boost。在系統 BIOS 設定中停用 Turbo Boost 通常可以防止 CPU 動態地將其時脈速度提高到超出其基本頻率。
  5. 筆記
    停用 Turbo Boost 可能適合某些用例,在這些用例中,一致性能、電源效率或熱管理優先於最大效能。
  6. 如果系統不使用虛擬化技術,請關閉單一 I/O 虛擬化 (SR-IOV) 功能。
  7. 停用 C 狀態以指示 CPU 保持活動狀態並防止進入更深的空閒狀態。
  8. 停用C1E,確保CPU保持活動狀態並且不會進入C1E空閒狀態。
  9. 將非核心頻率設為最大值,以指示系統以最高可用頻率運作。
  10. 在戴爾平台上,將多 APIC 描述表 (MADT) 核心模擬設定為線性(或根據 BIOS 設定為循環),以提供清晰且可預測的 CPU 核心映射。

建議的作業系統等級調整以優化效能

  1. 將 CPU 頻率調節器設定為效能。 cpupower 頻率設定 -g 效能 cpupower 頻率訊息
  2. 禁用 C 狀態。 cpupower空閒設定-D0
  3. 將核心 Rx(rmem)和 Tx(wmem)緩衝區設定為最大值。 sysctl -w net.core.rmem_max=16777216 sysctl -w net.core.wmem_max=16777216
  4. 設定網路設備積壓。 sysctl -w net.core.netdev_max_backlog=8192
  5. 設定調諧專業版file (工作負載取決於吞吐量/延遲)。
    tuned-adm profile 網路吞吐量

建議的適配器等級調整以優化性能

  1. 限制用於應用程式流量的佇列數量。使用保持相關 CPU 核心處於活動狀態所需的最小佇列數,以防止它們進入更深的空閒狀態(根據工作負載進行調整):ethtool -L合計 32
  2. 設定中斷調節率。 ethtool -C自適應 rx 關閉 自適應 tx 關閉 rx-微秒-高 50 rx-微秒 50 tx-微秒 50
    嘗試將傳輸/接收/高優先權合併計時器調整得更高(80/100/150/200)或更低(25/20/10/5)以找到適合工作負載的最佳值。
  3. 設定 Rx/Tx 環大小。 ethtool -G接收 4096 發送 4096
    筆記
    如果使用 ethtool -S| 看到 Rx 封包遺失grep drop,請嘗試將環大小減小到<4096。嘗試尋找不遺失資料包的工作負載的最佳值。
  4. 設定 IRQ 親和性。使用 NIC 本機核心或特定核心映射(其中核心數等於第 1 頁 26 中設定的佇列數。systemctl stop irqbalance set_irq_affinity -X local或 set_irq_affinity -X

5.9.2 AMD EPYC
AMD EPYC 處理器是基於 AMD 的 Zen 架構構建的、專為伺服器和資料中心打造的強大 CPU。以下設定來自 AMD 第四代 EPYC 系列。
為實現最高性能而推薦的 BIOS 設置

  1. 啟用自訂模式,讓使用者調整 CPU 效能、功耗和其他設定。這有助於微調系統,以實現性能和能源效率之間的最佳平衡。
  2. 啟用核心效能提升,讓 CPU 自動提高速度來處理更密集的任務,進而提升整體效能。
  3. 停用全域 C 狀態控制,以防止 CPU 進入更深的省電狀態(稱為 C 狀態),因此可維持反應能力。
    筆記
    停用 C 狀態可能會導致額外的功耗並增加熱溫度。監控兩者的工作量。
  4. 根據工作負載需求和效能目標,在 CPU 上啟用/停用同步多執行緒 (SMT)。 SMT 相當於英特爾 CPU 上的超執行緒。
    筆記
    為最佳化效能,請參閱第 40 頁的調整 i13e 驅動程式設定和第 40 頁上的平台調整(非特定於 i19e),以了解建議的作業系統和適配器等級調整。

適配器黏合

Linux 綁定是一項強大的功能,可顯著提高伺服器環境中的網路效能、冗餘和容錯能力。但是,需要注意的是,它需要相容的網路硬體和伺服器和交換器上的正確配置才能正常運作。
Linux 中的綁定驅動程式可讓您將多個實體網路介面聚合為一個綁定介面。此綁定介面對於作業系統和應用程式來說顯示為單一虛擬網路介面。
筆記
綁定是一個邏輯接口,因此無法直接在綁定接口上設定 CPU 親和性(例如ample,bond0)。也就是說,它無法直接控制中斷處理或 CPU 親和性。必須為綁定的底層介面配置 CPU 親和性。
Bonding 提供了幾種操作模式,每種模式都有自己的特色。

模式  類型
0 循環賽
1 主動備份
2 異或
3 pod送
4 LACP
5 傳輸負載平衡
6 自適應負載平衡

在 Linux 中,有不同的方法可以建立綁定。最常見的方法之一是使用網路配置 files(例如amp例如,/etc/network/interfaces 或 /etc/sysconfig/network-scripts/ifcfg-bondX)。
使用網路配置進行設定 Files
以下步驟透過網路設定建立綁定 files.

  1. 選擇兩個或多個 NIC 連接埠進行綁定(例如ample、ethX 和 ethY)
  2. 打開 NIC 配置 File在 /etc/sysconfig/network-scripts/ 下指定所需的 NIC 介面(例如ample、vi ifcfg-ethX 和 vi ifcfg-ethY) 並附加以下文字:
    MASTER=bondN [注意:N 是整數,表示鍵號。
  3. 建立綁定網路腳本 file 使用 vi /etc/sysconfig/networkscripts/ifcfg-bondN 並輸入以下文字:
    DEVICE=bondN [注意:N 是整數,表示鍵數] ONBOOT=yes USERCTL=no BOOTPROTO=dhcp (或) none
    IPADDR=200.20.2.4 [如果 BOOTPROTO=none,則需要] NETMASK=255.255.255.0 [如果 BOOTPROTO=none,則需要] NETWORK=200.20.2.0 [如果 BOOTPROTO=nADCone,則需要] BRO=200.20.2.255 [如果 BOOTPROTO=nADCone,則需要] BRO1. BOOTPROTO=none,則需要] BONDING_OPTS=”mode=100 miimon=XNUMX″
    筆記
    根據需要,模式可以是 0 到 6 之間的任意整數。
  4. 使用 service network restart 或 systemctl restart NetworkManager.service 重新啟動網路服務

性能故障排除

7.1 CPU利用率
檢查工作負載運作時每個核心的 CPU 使用率。
請注意,每個核心的利用率與效能的關係比整體 CPU 使用率更密切,因為它提供了每個網路佇列的 CPU 使用率的概念。如果只有幾個執行緒運行網路流量,那麼可能只會使用幾個核心。但是,如果這些核心的使用率達到 100%,那麼您的網路吞吐量可能會受到 CPU 使用率的限制,並且是時候執行以下操作了:

  1. 依照中斷調節中的詳細說明調整 IRQ 調節/環大小。
  2. 增加應用程式執行緒的數量,以將 CPU 負載分散到更多核心上。如果所有核心都以 100% 運行,那麼您的應用程式可能是 CPU 受限而不是網路受限。

常用工具:

  • 頂部
    — 按 1 展開 CPU 清單並檢查哪些 CPU 正在被使用。
    — 注意利用率水準。
    — 注意哪些行程被列為最活躍的進程(清單上方)。
  • 統計數據
    以下前ample 命令列在 Red Hat Enterprise Linux 7.x 上進行了測試。
    它顯示每個核心的 CPU 使用率(透過尋找總空閒百分比並從 100 中減去)並以紅色突出顯示 80% 以上的值。 mpstat -P 全部 1 1 | grep -v 平均值|尾部 -n +5 |頭 -n -1 | awk'{打印(100-$13)}'| egrep -color=always '[^\.][8-9][0-9][\.]?.*|^[8-9][柱-0][柱子
  • perf top 查找週期花在哪裡。

7.2 i40e計數器
i40e 驅動程式透過 ethtool -S ethX 指令提供了一長串計數器,用於介面偵錯和監控。在工作負載運作時觀察輸出和/或比較工作負載運作前後的計數器值會很有幫助。

  • 要取得 i40e 計數器的完整轉儲:ethtool -S ethX
  • 僅監視非零計數器:watch -d (ethtool -S ethX) | egrep -v:\0|柱子
    需要注意的事項:
  • rx_dropped 表示 CPU 無法足夠快地為緩衝區提供服務。
  • port.rx_dropped 表示插槽/記憶體/系統中某些東西的速度不夠快。

7.3 網路計數器
在工作負載運行之前/之後檢查 netstat -s。
Netstat 從系統中的所有網路設備收集網路資訊。因此,結果可能會受到測試網路以外的其他網路的影響。 netstat -s 的輸出可以很好地指示 Linux 作業系統或核心的效能問題。查閱作業系統調整指南,例如《Red Hat Enterprise Linux 網路效能調整指南》,以獲得更多關於一般作業系統調整的見解。
7.4 系統日誌
檢查系統日誌中的錯誤和警告(/var/log/messages,dmesg)。
7.5 Intel svr-info 工具
Intel 提供了一個 svr-info 工具(參見 https://github.com/intel/svr-info) 適用於 Linux,可從伺服器擷取相關的硬體和軟體詳細資訊。 svr-info 輸出對於識別系統瓶頸或未針對工作負載進行最佳化的設定/調整非常有幫助。當向英特爾提交與乙太網路相關的效能問題支援案例時,請務必包含 svr-info 輸出(文本 file) 適用於測試配置中的每個 Linux 伺服器。

  1. 下載並安裝 svr-info:
    wget -qO- https://github.com/intel/svr-info/releases/latest/download/svrinfo.tgz| tar xvz cd svr 訊息
    ./svr-訊息
    > 主機名稱.txt
  2. 收集輸出:
    ./svr-info > 主機名稱.txt
  3. 附加一個文字(.txt) file 將每個伺服器提交到您的英特爾支援案例進行分析。

常見效能場景的建議

8.1 IP轉發

  • 更新核心。
    由於路由程式碼中的核心變化(首先是出於安全性考慮刪除了路由快取),一些最近的發行版核心的路由效能下降了。最近的發行版核心應該有補丁來減輕這些變更對效能的影響,並可能提供改進的效能。
  • 禁用超線程(邏輯核心)。
  • 編輯核心啟動參數。
    — 從核心啟動行強制關閉 iommu(intel_iommu=off 或 iommu=off),除非虛擬化需要
    — 關閉電源管理:processor.max_cstates=1idle=poll pcie_aspm=off
  • 將佇列數量限制為與本地套接字上的核心數量相等(本例中為 12 個amp了)。 ethtool -L ethX 組合 12
  • 僅將中斷固定在本地套接字。 set_irq_affinity -X local ethX 或 set_irq_affinity -X local ethX
    筆記
    根據工作負載可以使用 -X 或 -x。
  • 根據需要更改 Tx 和 Rx 環尺寸。數值越大,佔用的資源越多,但可以提供更好的轉送速率。 ethtool -G ethX rx 4096 tx 4096
  • 路由時禁用 GRO。
    由於已知的核心問題,路由/轉送時必須關閉 GRO。 ethtool -K ethX gro off 其中 ethX 是要修改的乙太網路介面。
  • 停用自適應中斷調節並設定靜態值。 ethtool -C ethX 自適應接收關閉 自適應發送關閉 ethtool -C ethX rx-usecs 64 tx-usecs 64

筆記
根據處理器和工作負載的類型,可以調整 RX 和 TX 的合併參數,以提高效能(或減少幀丟失)。

  • 禁用防火牆。 sudo systemctl 停用防火牆 sudo systemctl 停止防火牆
  • 啟用 IP 轉送。 sysctl -w net.ipv4.ip_forward=1
  • 配置接收和傳送套接字緩衝區大小的最大值。 sysctl -w net.core.rmem_max=16777216 sysctl -w net.core.wmem_max=16777216

筆記
根據工作負載或要求,這些值可以從預設值變更。
8.2 低延遲

  • 關閉超線程(邏輯核心)。
  • 確保網路設備位於 numa core 0 本地。
  • 使用taskset -c 0 將基準固定到核心 0。
  • 使用 systemctl stop irqbalance 或 systemctl disable irqbalance 關閉 irqbalance
  • 運行親和性腳本以跨核心傳播。嘗試本地或全部。
  • 關閉中斷調節。 ethtool -C ethX rx-usecs 0 tx-usecs 0 自適應rx關閉 自適應tx關閉 rxusecs-高 0
  • 限制佇列數量等於本機套接字上的核心數量(本例為 32 個)amp了)。 ethtool -L ethX 組合 32
  • 僅將中斷引腳固定到本機套接字(與 i40e 驅動程式來源一起打包的腳本)。 set_irq_affinity -X 本地 ethX
  • 使用已建立的基準,如 netperf -t TCP_RR、netperf -t UDP_RR 或 NetPipe。 netperf -t TCP_RR 或 netperf -t UDP_RR
  • 將基準固定到本地 NUMA 節點中的單一核心。任務集-c

英特爾® 乙太網路 700 系列
Linux效能調優指南
2024 年 XNUMX 月
文件。編號:334019,修訂版:1.2

文件/資源

英特爾乙太網路 700 系列 Linux 效能調優 [pdf] 使用者指南
334019,乙太網路 700 系列 Linux 效能調優,乙太網路 700 系列,Linux 效能調優,效能調優,調優

參考

發表評論

您的電子郵件地址不會被公開。 必填欄位已標記 *