Intel(R) Ethernet Controller 700 系列的 Linux 基本驅動

Intel 40 Gigabit Linux 驅動。版權所有(c) 1999-2018 Intel Corporation。

目錄

  • 概述

  • 識別您的介面卡

  • Intel(R) 乙太網流導向器

  • 附加配置

  • 已知問題

  • 支援

可以使用 ethtool、lspci 和 ifconfig 獲取驅動資訊。有關更新 ethtool 的說明,請參見本文件後面的“附加配置”部分。

有關硬體要求的問題,請參閱 Intel 介面卡隨附的文件。所有列出的硬體要求均適用於 Linux 環境。

識別您的介面卡

該驅動程式與基於以下裝置的相容:

  • Intel(R) 乙太網控制器 X710

  • Intel(R) 乙太網控制器 XL710

  • Intel(R) 乙太網網路連線 X722

  • Intel(R) 乙太網控制器 XXV710

為了獲得最佳效能,請確保您的裝置上安裝了最新的 NVM/FW。

有關如何識別您的介面卡以及最新的 NVM/FW 映像和 Intel 網路驅動程式的資訊,請訪問 Intel 支援網站:https://www.intel.com/support

SFP+ 和 QSFP+ 裝置

有關支援的介質的資訊,請參閱此文件:https://www.intel.com/content/dam/www/public/us/en/documents/release-notes/xl710-ethernet-controller-feature-matrix.pdf

注意:某些基於 Intel(R) 乙太網控制器 700 系列的介面卡僅支援 Intel 乙太網光模組。在這些介面卡上,其他模組不受支援且無法執行。在所有情況下,Intel 建議使用 Intel 乙太網光模組;其他模組可能執行但未經 Intel 驗證。請聯絡 Intel 獲取支援的介質型別。

注意:對於基於 Intel(R) 乙太網控制器 700 系列的連線,支援取決於您的系統主機板。詳情請諮詢您的供應商。

注意:在沒有足夠氣流冷卻介面卡和光模組的系統中,您必須使用高溫光模組。

虛擬功能 (VF)

使用 sysfs 啟用 VF。例如:

#echo $num_vf_enabled > /sys/class/net/$dev/device/sriov_numvfs #enable VFs
#echo 0 > /sys/class/net/$dev/device/sriov_numvfs #disable VFs

例如,以下說明將配置 PF eth0 和 VLAN 10 上的第一個 VF:

$ ip link set dev eth0 vf 0 vlan 10

VLAN 標籤資料包導向

允許您將所有具有特定 VLAN 標籤的資料包傳送到特定的 SR-IOV 虛擬功能 (VF)。此外,此功能允許您將特定 VF 指定為可信,並允許該可信 VF 請求物理功能 (PF) 上的選擇性混雜模式。

要在 Hypervisor 中將 VF 設定為可信或不可信,請輸入以下命令:

# ip link set dev eth0 vf 1 trust [on|off]

一旦 VF 被指定為可信,在虛擬機器中使用以下命令將 VF 設定為混雜模式。

For promiscuous all:
#ip link set eth2 promisc on
Where eth2 is a VF interface in the VM

For promiscuous Multicast:
#ip link set eth2 allmulticast on
Where eth2 is a VF interface in the VM

注意:預設情況下,ethtool priv-flag vf-true-promisc-support 設定為“off”,這意味著 VF 的混雜模式將受到限制。要將 VF 的混雜模式設定為真正的混雜模式並允許 VF 檢視所有入站流量,請使用以下命令:

#ethtool -set-priv-flags p261p1 vf-true-promisc-support on

vf-true-promisc-support 私有標誌不會啟用混雜模式;相反,它指定了當您使用上述 ip link 命令啟用混雜模式時將獲得哪種型別的混雜模式(有限或真實)。請注意,這是一個影響整個裝置的全域性設定。然而,vf-true-promisc-support 私有標誌僅暴露給裝置的第一個 PF。無論 vf-true-promisc-support 設定如何,PF 始終處於有限混雜模式(除非它處於 MFP 模式)。

現在在 VF 介面上新增一個 VLAN 介面:

#ip link add link eth2 name eth2.100 type vlan id 100

請注意,設定 VF 為混雜模式和新增 VLAN 介面的順序無關緊要(可以先做任何一個)。在此示例中,最終結果是 VF 將獲得所有標記為 VLAN 100 的流量。

Intel(R) 乙太網流導向器

Intel 乙太網流導向器執行以下任務:

  • 根據流將接收到的資料包導向不同的佇列。

  • 實現對平臺中流路由的嚴格控制。

  • 匹配流和 CPU 核心以實現流親和性。

  • 支援多種引數,用於靈活的流分類和負載均衡(僅限 SFP 模式)。

注意:Linux i40e 驅動程式支援以下流型別:IPv4、TCPv4 和 UDPv4。對於給定的流型別,它支援 IP 地址(源或目標)和 UDP/TCP 埠(源和目標)的有效組合。例如,您可以僅提供源 IP 地址、源 IP 地址和目標埠,或這四個引數中一個或多個的任意組合。

注意:Linux i40e 驅動程式允許您透過使用 ethtool 的 user-def 和 mask 欄位,基於使用者定義的靈活兩位元組模式和偏移量來過濾流量。只有 L3 和 L4 流型別支援使用者定義的靈活過濾器。對於給定的流型別,在更改輸入集(針對該流型別)之前,您必須清除所有 Intel 乙太網流導向器過濾器。

啟用或停用 Intel 乙太網流導向器:

# ethtool -K ethX ntuple <on|off>

停用 ntuple 過濾器時,所有使用者程式設計的過濾器都會從驅動程式快取和硬體中清除。重新啟用 ntuple 時,必須重新新增所有需要的過濾器。

要新增將資料包導向佇列 2 的過濾器,請使用 -U 或 -N 開關:

# ethtool -N ethX flow-type tcp4 src-ip 192.168.10.1 dst-ip \
192.168.10.2 src-port 2000 dst-port 2001 action 2 [loc 1]

僅使用源和目標 IP 地址設定過濾器:

# ethtool -N ethX flow-type tcp4 src-ip 192.168.10.1 dst-ip \
192.168.10.2 action 2 [loc 1]

檢視當前存在的過濾器列表:

# ethtool <-u|-n> ethX

應用程式目標路由 (ATR) 完美過濾器

當核心處於多傳輸佇列模式時,ATR 預設啟用。當 TCP-IP 流啟動時,將新增一個 ATR Intel 乙太網流導向器過濾規則,並在流結束時刪除。當透過 ethtool (Sideband filter) 新增 TCP-IP Intel 乙太網流導向器規則時,ATR 會被驅動程式關閉。要重新啟用 ATR,可以透過 ethtool -K 選項停用 Sideband。例如:

ethtool -K [adapter] ntuple [off|on]

如果在重新啟用 ATR 後重新啟用了 Sideband,ATR 將保持啟用狀態,直到新增 TCP-IP 流。當所有 TCP-IP Sideband 規則被刪除時,ATR 將自動重新啟用。

與 ATR 規則匹配的資料包在 ethtool 中的 fdir_atr_match 統計資料中計數,該統計資料也可以用於驗證 ATR 規則是否存在。

Sideband 完美過濾器

Sideband 完美過濾器用於引導符合特定特徵的流量。它們透過 ethtool 的 ntuple 介面啟用。要新增新過濾器,請使用以下命令:

ethtool -U <device> flow-type <type> src-ip <ip> dst-ip <ip> src-port <port> \
dst-port <port> action <queue>
其中:

<裝置> - 要程式設計的乙太網裝置 <型別> - 可以是 ip4、tcp4、udp4 或 sctp4 <ip> - 要匹配的 ip 地址 <埠> - 要匹配的埠號 <佇列> - 要將流量導向的佇列 (-1 丟棄匹配的流量)

使用以下命令顯示所有活動過濾器:

ethtool -u <device>

使用以下命令刪除過濾器:

ethtool -U <device> delete <N>

其中 <N> 是顯示所有活動過濾器時顯示的過濾器 ID,也可以在新增過濾器時使用“loc <N>”指定。

以下示例匹配從 192.168.0.1 埠 5300 傳送至 192.168.0.5 埠 80 的 TCP 流量,並將其傳送到佇列 7:

ethtool -U enp130s0 flow-type tcp4 src-ip 192.168.0.1 dst-ip 192.168.0.5 \
src-port 5300 dst-port 80 action 7

對於每種流型別,程式設計的過濾器必須都具有相同的匹配輸入集。例如,發出以下兩個命令是可以接受的:

ethtool -U enp130s0 flow-type ip4 src-ip 192.168.0.1 src-port 5300 action 7
ethtool -U enp130s0 flow-type ip4 src-ip 192.168.0.5 src-port 55 action 10

然而,發出接下來的兩個命令是不可接受的,因為第一個指定了 src-ip,而第二個指定了 dst-ip:

ethtool -U enp130s0 flow-type ip4 src-ip 192.168.0.1 src-port 5300 action 7
ethtool -U enp130s0 flow-type ip4 dst-ip 192.168.0.5 src-port 55 action 10

第二個命令將失敗並報錯。您可以程式設計多個具有相同欄位但值不同的過濾器,但在一個裝置上,您不能程式設計兩個具有不同匹配欄位的 tcp4 過濾器。

i40e 驅動程式不支援對欄位的子部分進行匹配,因此不支援部分掩碼欄位。

驅動程式還支援在資料包負載中匹配使用者定義的資料。此靈活資料透過 ethtool 命令的“user-def”欄位按以下方式指定:

31 28 24 20 16

15 12 8 4 0

資料包負載中的偏移量

2 位元組的靈活資料

例如,

... user-def 0x4FFFF ...

告訴過濾器查詢負載中 4 個位元組並將其值與 0xFFFF 匹配。偏移量是基於負載的開頭,而不是資料包的開頭。因此,

flow-type tcp4 ... user-def 0x8BEAF ...

將匹配在 TCP/IPv4 負載中偏移 8 個位元組處具有值 0xBEAF 的 TCP/IPv4 資料包。

請注意,ICMP 報頭被解析為 4 位元組報頭和 4 位元組負載。因此,要匹配負載的第一個位元組,您實際上必須向偏移量新增 4 個位元組。另請注意,ip4 過濾器既匹配 ICMP 幀也匹配原始(未知)ip4 幀,其中負載將是 IP4 幀的 L3 負載。

最大偏移量為 64。硬體將只從負載中讀取最多 64 位元組的資料。偏移量必須是偶數,因為靈活資料為 2 位元組長,並且必須與資料包負載的位元組 0 對齊。

使用者定義的靈活偏移量也被視為輸入集的一部分,並且不能為相同型別的多個過濾器單獨程式設計。但是,靈活資料不屬於輸入集,多個過濾器可以使用相同的偏移量但匹配不同的資料。

要建立將流量導向特定虛擬功能的過濾器,請使用“action”引數。將 action 指定為一個 64 位值,其中低 32 位表示佇列號,而接下來的 8 位表示哪個 VF。請注意,0 是 PF,因此 VF 識別符號偏移了 1。例如:

... action 0x800000002 ...

指定將流量導向虛擬功能 7(8 減 1)的佇列 2。

請注意,這些過濾器不會破壞內部路由規則,並且不會路由否則不會發送到指定虛擬功能的流量。

設定 mdd-auto-reset-vf 私有標誌

當 mdd-auto-reset-vf 私有標誌設定為“on”時,如果檢測到格式錯誤描述符,問題 VF 將自動重置。如果該標誌設定為“off”,問題 VF 將被停用。

使用 ethtool 檢視和設定 mdd-auto-reset-vf,如下所示:

ethtool --show-priv-flags ethX
ethtool --set-priv-flags ethX mdd-auto-reset-vf [on|off]

巨型幀

透過將最大傳輸單元 (MTU) 更改為大於預設值 1500 的值來啟用巨型幀支援。

使用 ifconfig 命令增加 MTU 大小。例如,輸入以下命令,其中 <x> 是介面號:

ifconfig eth<x> mtu 9000 up

或者,您可以使用 ip 命令,如下所示:

ip link set mtu 9000 dev eth<x>
ip link set up dev eth<x>

此設定在重啟後不會儲存。可以透過在檔案 `/etc/sysconfig/network-scripts/ifcfg-ethX` 中新增“MTU=9000”來使設定永久生效。

/etc/sysconfig/network-scripts/ifcfg-eth<x> // for RHEL
/etc/sysconfig/network/<config_file> // for SLES

注意:巨型幀的最大 MTU 設定為 9702。此值與最大巨型幀大小 9728 位元組一致。

注意:此驅動程式將嘗試使用多個頁面大小的緩衝區來接收每個巨型資料包。這有助於避免在分配接收資料包時出現緩衝區飢餓問題。

ethtool

驅動程式利用 ethtool 介面進行驅動程式配置和診斷,以及顯示統計資訊。此功能需要最新的 ethtool 版本。請在此處下載:https://kernel.linux.club.tw/pub/software/network/ethtool/

支援的 ethtool 命令和過濾選項

-n --show-nfc

檢索接收網路流分類配置。

rx-flow-hash tcp4|udp4|ah4|esp4|sctp4|tcp6|udp6|ah6|esp6|sctp6

檢索指定網路流量型別的雜湊選項。

-N --config-nfc

配置接收網路流分類。

rx-flow-hash tcp4|udp4|ah4|esp4|sctp4|tcp6|udp6|ah6|esp6|sctp6 m|v|t|s|d|f|n|r...

配置指定網路流量型別的雜湊選項。

udp4 IPv4 上的 UDP udp6 IPv6 上的 UDP

f 對接收資料包的第四層報頭的位元組 0 和 1 進行雜湊。n 對接收資料包的第四層報頭的位元組 2 和 3 進行雜湊。

速度和雙工配置

在解決速度和雙工配置問題時,您需要區分基於銅線的介面卡和基於光纖的介面卡。

在預設模式下,使用銅連線的 Intel(R) 乙太網網路介面卡將嘗試與其鏈路夥伴自動協商以確定最佳設定。如果介面卡無法使用自動協商與鏈路夥伴建立連結,您可能需要手動配置介面卡和鏈路夥伴以相同的設定來建立連結和傳輸資料包。這僅在嘗試與不支援自動協商或已被強制設定為特定速度或雙工模式的舊交換機連結時才需要。您的鏈路夥伴必須與您選擇的設定匹配。1 Gbps 及更高的速度不能強制。使用自動協商廣告設定手動設定裝置以實現 1 Gbps 及更高速度。

注意:您無法為基於 Intel(R) 乙太網網路介面卡 XXV710 的裝置設定速度。

速度、雙工和自動協商廣告透過 ethtool 工具配置。

注意:只有經驗豐富的網路管理員才能強制設定速度和雙工或手動更改自動協商廣告。交換機上的設定必須始終與介面卡設定匹配。如果您將介面卡配置與交換機不同,介面卡效能可能會受到影響,或者您的介面卡可能無法執行。

然而,使用基於光纖連線的 Intel(R) 乙太網網路介面卡不會嘗試與其鏈路夥伴自動協商,因為這些介面卡僅在全雙工模式下以其原生速度執行。

NAPI

i40e 驅動程式支援 NAPI(Rx 輪詢模式)。

有關更多資訊,請參閱Documentation/networking/napi.rst

流控制

乙太網流控制 (IEEE 802.3x) 可以使用 ethtool 配置,以啟用 i40e 的接收和傳送暫停幀。當啟用傳送時,當接收資料包緩衝區超過預定義閾值時,會生成暫停幀。當啟用接收時,傳送單元將在接收到暫停幀時指定的延遲時間內停止。

注意:您必須有一個支援流控制的鏈路夥伴。

流控制預設開啟。

使用 ethtool 更改流控制設定。

啟用或停用 Rx 或 Tx 流控制:

ethtool -A eth? rx <on|off> tx <on|off>

注意:此命令僅在自動協商停用時啟用或停用流控制。如果自動協商啟用,此命令將更改用於與鏈路夥伴自動協商的引數。

啟用或停用自動協商:

ethtool -s eth? autoneg <on|off>

注意:流控制自動協商是鏈路自動協商的一部分。根據您的裝置,您可能無法更改自動協商設定。

RSS 雜湊流

允許您為每種流型別設定雜湊位元組,以及接收側縮放 (RSS) 雜湊位元組配置的任意組合的一個或多個選項。

# ethtool -N <dev> rx-flow-hash <type> <option>
其中 <type> 是

tcp4 表示 IPv4 上的 TCP udp4 表示 IPv4 上的 UDP tcp6 表示 IPv6 上的 TCP udp6 表示 IPv6 上的 UDP

和 <option> 是一個或多個以下選項:

s 對接收資料包的 IP 源地址進行雜湊。d 對接收資料包的 IP 目標地址進行雜湊。f 對接收資料包的第四層報頭的位元組 0 和 1 進行雜湊。n 對接收資料包的第四層報頭的位元組 2 和 3 進行雜湊。

MAC 和 VLAN 防欺騙功能

當惡意驅動程式試圖傳送欺騙資料包時,硬體會將其丟棄而不進行傳輸。注意:此功能可以針對特定的虛擬功能 (VF) 停用。

ip link set <pf dev> vf <vf id> spoofchk {off|on}

IEEE 1588 精密時間協議 (PTP) 硬體時鐘 (PHC)

精密時間協議 (PTP) 用於同步計算機網路中的時鐘。PTP 支援在支援此驅動程式的 Intel 裝置中有所不同。使用“ethtool -T <netdev name>”獲取裝置支援的 PTP 功能的明確列表。

IEEE 802.1ad (QinQ) 支援

IEEE 802.1ad 標準,非正式地稱為 QinQ,允許單個乙太網幀中存在多個 VLAN ID。VLAN ID 有時被稱為“標籤”,多個 VLAN ID 因此被稱為“標籤堆疊”。標籤堆疊允許 L2 隧道以及在特定 VLAN ID 內隔離流量等用途。

以下是配置 802.1ad (QinQ) 的示例:

ip link add link eth0 eth0.24 type vlan proto 802.1ad id 24
ip link add link eth0.24 eth0.24.371 type vlan proto 802.1Q id 371

其中“24”和“371”是示例 VLAN ID。

注意事項:

802.1ad (QinQ) 資料包不支援接收校驗和解除安裝、雲過濾器和 VLAN 加速。

VXLAN 和 GENEVE 覆蓋硬體解除安裝

虛擬可擴充套件 LAN (VXLAN) 允許您將 L2 網路擴充套件到 L3 網路之上,這在虛擬化或雲環境中可能很有用。某些 Intel(R) 乙太網網路裝置執行 VXLAN 處理,將其從作業系統解除安裝。這減少了 CPU 利用率。

VXLAN 解除安裝由 ethtool 提供的 Tx 和 Rx 校驗和解除安裝選項控制。也就是說,如果啟用 Tx 校驗和解除安裝,並且介面卡具有此功能,則 VXLAN 解除安裝也啟用。

對 VXLAN 和 GENEVE 硬體解除安裝的支援取決於核心對硬體解除安裝功能的支援。

每埠多功能

某些基於 Intel Ethernet Controller X710/XL710 的介面卡支援單個物理埠上的多功能。透過系統設定/BIOS 配置這些功能。

最小 TX 頻寬是保證的最小資料傳輸頻寬,以物理埠全鏈路速度的百分比表示,分割槽將獲得此頻寬。分割槽獲得的頻寬絕不會低於您指定的水平。

最小頻寬值的範圍是:1 到 ((100 減去物理埠上的分割槽數量) 加 1) 例如,如果一個物理埠有 4 個分割槽,則範圍將是:1 到 ((100 - 4) + 1 = 97)

最大頻寬百分比表示分配給分割槽的最大傳輸頻寬,以物理埠全鏈路速度的百分比表示。接受的值範圍是 1-100。該值用作限制器,如果您選擇任何一個特定功能不能消耗埠頻寬的 100%(如果可用)。所有最大頻寬值的總和不受限制,因為一個埠的頻寬永遠不能超過 100%。

注意:當每埠多功能 (MFP) 和 SR-IOV 啟用時,X710/XXV710 裝置無法啟用最大 VF (64)。i40e 會記錄一個錯誤,顯示“add vsi failed for VF N, aq_err 16”。要解決此問題,請啟用少於 64 個虛擬功能 (VF)。

資料中心橋接 (DCB)

DCB 是硬體中實現的配置服務質量。它使用 VLAN 優先順序標籤 (802.1p) 過濾流量。這意味著流量可以過濾為 8 種不同的優先順序。它還支援優先順序流控制 (802.1Qbb),這可以限制或消除網路壓力期間丟包的數量。可以為每個優先順序分配頻寬,這在硬體級別強制執行 (802.1Qaz)。

介面卡韌體根據 802.1AB 和 802.1Qaz 分別實現 LLDP 和 DCBX 協議代理。基於韌體的 DCBX 代理僅以意願模式執行,並且可以接受來自支援 DCBX 的對等體的設定。不支援透過 dcbtool/lldptool 進行 DCBX 引數的軟體配置。

注意:透過設定私有標誌 disable-fw-lldp 可以停用韌體 LLDP。

i40e 驅動程式實現了 DCB netlink 介面層,允許使用者空間與驅動程式通訊並查詢埠的 DCB 配置。

注意:核心假定 TC0 可用,如果 TC0 不可用,則會停用裝置上的優先順序流控制 (PFC)。要解決此問題,請確保在交換機上設定 DCB 時啟用 TC0。

中斷速率限制

有效範圍

0-235 (0=無限制)

Intel(R) 乙太網控制器 XL710 系列支援中斷速率限制機制。使用者可以透過 ethtool 控制中斷之間的微秒數。

語法:

# ethtool -C ethX rx-usecs-high N

0-235 微秒的範圍提供了 4,310 到 250,000 次/秒的有效中斷範圍。rx-usecs-high 的值可以與同一 ethtool 命令中的 rx-usecs 和 tx-usecs 獨立設定,並且也獨立於自適應中斷調節演算法。底層硬體支援 4 微秒間隔的粒度,因此相鄰值可能導致相同的中斷速率。

一種可能的使用情況如下:

# ethtool -C ethX adaptive-rx off adaptive-tx off rx-usecs-high 20 rx-usecs \
  5 tx-usecs 5

上述命令將停用自適應中斷調節,並允許最多 5 微秒的時間來指示接收或傳輸完成。然而,它透過 rx-usecs-high 引數將每秒總中斷限制在 50,000 次,而不是高達 200,000 次。

效能最佳化

驅動程式預設設定旨在適應各種工作負載,但如果需要進一步最佳化,我們建議嘗試以下設定。

注意:為了在處理小(64B)幀大小時獲得更好的效能,請嘗試在 BIOS 中啟用超執行緒以增加系統中的邏輯核心數量,從而增加介面卡可用的佇列數量。

虛擬化環境

1. 使用附帶的 virt_perf_default 指令碼或以 root 身份執行以下命令,在兩端停用 XPS:

for file in `ls /sys/class/net/<ethX>/queues/tx-*/xps_cpus`;
do echo 0 > $file; done

2. 在虛擬機器中使用適當的機制 (vcpupin) 將 CPU 繫結到單個 lcpu,確保使用裝置 local_cpulist 中包含的 CPU 集合:/sys/class/net/<ethX>/device/local_cpulist。

3. 在虛擬機器中配置儘可能多的 Rx/Tx 佇列。不要依賴預設設定 1。

非虛擬化環境

透過停用 irqbalance 服務並使用附帶的 set_irq_affinity 指令碼,將介面卡的 IRQ 繫結到特定核心。有關更多選項,請參閱指令碼的幫助文字。

  • 以下設定將 IRQ 均勻分佈到所有核心:

    # scripts/set_irq_affinity -x all <interface1> , [ <interface2>, ... ]
    
  • 以下設定將 IRQ 分佈到所有與介面卡本地的核心(同一 NUMA 節點):

    # scripts/set_irq_affinity -x local <interface1> ,[ <interface2>, ... ]
    

對於 CPU 密集型工作負載,我們建議將 IRQ 繫結到所有核心。

對於 IP 轉發:停用自適應 ITR,並使用 ethtool 降低每佇列的 Rx 和 Tx 中斷。

  • 將 rx-usecs 和 tx-usecs 設定為 125 將限制每佇列的中斷約為 8000 次/秒。

# ethtool -C <interface> adaptive-rx off adaptive-tx off rx-usecs 125 \
  tx-usecs 125

為了降低 CPU 利用率:停用自適應 ITR,並使用 ethtool 降低每佇列的 Rx 和 Tx 中斷。

  • 將 rx-usecs 和 tx-usecs 設定為 250 將限制每佇列的中斷約為 4000 次/秒。

# ethtool -C <interface> adaptive-rx off adaptive-tx off rx-usecs 250 \
  tx-usecs 250

為了降低延遲:透過將 Rx 和 Tx 設定為 0,使用 ethtool 停用自適應 ITR 和 ITR。

# ethtool -C <interface> adaptive-rx off adaptive-tx off rx-usecs 0 \
  tx-usecs 0

應用裝置佇列 (ADq)

應用裝置佇列 (ADq) 允許您將一個或多個佇列專用於特定應用程式。這可以減少指定應用程式的延遲,並允許按應用程式進行 Tx 流量速率限制。請按照以下步驟設定 ADq。

1. 建立流量類別 (TC)。每個介面最多可以建立 8 個 TC。shaper bw_rlimit 引數是可選的。

示例:設定兩個 TC,tc0 和 tc1,每個有 16 個佇列,tc0 的最大 Tx 速率設定為 1Gbit,tc1 的最大 Tx 速率設定為 3Gbit。

# tc qdisc add dev <interface> root mqprio num_tc 2 map 0 0 0 0 1 1 1 1
queues 16@0 16@16 hw 1 mode channel shaper bw_rlimit min_rate 1Gbit 2Gbit
max_rate 1Gbit 3Gbit

map:最多 16 個優先順序的優先順序對映到 TC(例如,map 0 0 0 0 1 1 1 1 將優先順序 0-3 設定為使用 tc0,優先順序 4-7 設定為使用 tc1)

queues: 對於每個 tc,<num queues>@<offset>(例如,queues 16@0 16@16 將 16 個佇列分配給 tc0 的偏移量 0,16 個佇列分配給 tc1 的偏移量 16。所有 TC 的最大總佇列數是 64 或 CPU 核心數,取兩者中較小的一個。)

hw 1 mode channel:在 mqprio 中,‘hw’ 設定為 1 的‘channel’是一種新的硬體解除安裝模式,它充分利用了 mqprio 選項、TC、佇列配置和 QoS 引數。

shaper bw_rlimit:對於每個 TC,設定最小和最大頻寬速率。總和必須等於或小於埠速度。

例如:min_rate 1Gbit 3Gbit:使用網路監控工具(如 ifstatsar -n DEV [interval] [number of samples])驗證頻寬限制。

  1. 在介面上啟用 HW TC 解除安裝:

    # ethtool -K <interface> hw-tc-offload on
    
  2. 將 TC 應用於介面的入站 (RX) 流:

    # tc qdisc add dev <interface> ingress
    
注意事項:
  • 從 iproute2 <pathtoiproute2>/tc/ 目錄執行所有 tc 命令。

  • ADq 與雲過濾器不相容。

  • 當使用 mqprio 配置 TC 時,不支援透過 ethtool(ethtool -L)設定通道。

  • 您必須擁有最新版本的 iproute2。

  • 需要 NVM 版本 6.01 或更高。

  • 當啟用以下任何功能時,無法啟用 ADq:資料中心橋接 (DCB)、每埠多功能 (MFP) 或 Sideband 過濾器。

  • 如果另一個驅動程式(例如 DPDK)設定了雲過濾器,則無法啟用 ADq。

  • ADq 不支援隧道過濾器。如果封裝資料包在非隧道模式下到達,則將對內部報頭進行過濾。例如,對於非隧道模式下的 VXLAN 流量,PCTYPE 被識別為 VXLAN 封裝資料包,外部報頭被忽略。因此,將匹配內部報頭。

  • 如果 PF 上的 TC 過濾器匹配透過 VF(在 PF 上)的流量,該流量將被路由到 PF 的相應佇列,並且不會傳遞到 VF。此類流量最終將在 TCP/IP 堆疊中被丟棄,因為它與 PF 地址資料不匹配。

  • 如果流量匹配指向不同 TC 的多個 TC 過濾器,則該流量將被複制併發送到所有匹配的 TC 佇列。當匹配多個過濾器時,硬體交換機將資料包映象到 VSI 列表。

已知問題/故障排除

注意:基於 Intel(R) 乙太網網路連線 X722 的 1 Gb 裝置不支援以下功能:

  • 資料中心橋接 (DCB)

  • QOS

  • VMQ

  • SR-IOV

  • 任務封裝解除安裝 (VXLAN, NVGRE)

  • 節能乙太網 (EEE)

  • 自動介質檢測

裝置驅動程式和 DPDK 共享裝置時出現的意外問題

當 i40e 裝置處於多驅動程式模式,並且核心驅動程式和 DPDK 驅動程式共享裝置時,可能會出現意外問題。這是因為對全域性 NIC 資源的訪問在多個驅動程式之間未同步。對全域性 NIC 配置的任何更改(寫入全域性暫存器,透過 AQ 設定全域性配置,或更改交換機模式)將影響裝置上的所有埠和驅動程式。使用“multi-driver”模組引數載入 DPDK 可能會緩解某些問題。

在交換機上設定 DCB 時必須啟用 TC0

核心假定 TC0 可用,如果 TC0 不可用,則會停用裝置上的優先順序流控制 (PFC)。要解決此問題,請確保在交換機上設定 DCB 時啟用 TC0。

支援

如需一般資訊,請訪問 Intel 支援網站:https://www.intel.com/support/

如果在受支援的核心和介面卡上釋出的原始碼中發現問題,請將與問題相關的具體資訊透過電子郵件傳送至 intel-wired-lan@lists.osuosl.org