Logo

Linux 核心

6.16.0-rc4

快速搜尋

目錄

  • 開發流程
  • 提交補丁
  • 行為準則
  • 維護者手冊
  • 所有開發流程文件
  • 核心 API
  • 驅動 API
  • 子系統
    • 核心子系統
    • 人機互動介面
    • 網路介面
      • 網路
      • NetLabel
      • InfiniBand
      • ISDN
      • MHI
    • 儲存介面
    • 其他子系統
  • 鎖
  • 許可規則
  • 編寫文件
  • 開發工具
  • 測試指南
  • Hacking 指南
  • 跟蹤
  • 故障注入
  • Livepatching
  • Rust
  • 管理
  • 構建系統
  • 報告問題
  • 使用者空間工具
  • 使用者空間 API
  • 韌體
  • 韌體和裝置樹
  • CPU 架構
  • 未分類的文件
  • 翻譯

本頁

  • 顯示原始碼

ice devlink 支援¶

本文件描述了 ice 裝置驅動程式實現的 devlink 功能。

引數¶

已實現的通用引數¶

名稱

模式

註釋

enable_roce

runtime

與 enable_iwarp 互斥

enable_iwarp

runtime

與 enable_roce 互斥

tx_scheduling_layers

permanent

ice 硬體對 Tx 使用分層排程,排程樹中具有固定數量的層。每一層都是決策點。根節點代表埠,而所有葉節點代表隊列。這種配置 Tx 排程器的方式允許 DCB 或 devlink-rate(如下文件所述)等功能配置分配給任何給定佇列或佇列組的頻寬量,從而實現精細的控制,因為排程引數可以在樹的任何給定層配置。

預設的 9 層樹拓撲被認為是適用於大多數工作負載的最佳拓撲,因為它提供了效能與可配置性的最佳比率。但是,對於某些特定情況,可能不需要這種 9 層拓撲。一個例子是將流量傳送到非 8 的倍數的佇列。由於在 9 層拓撲中最大基數限制為 8,因此第 9 個佇列與其餘佇列具有不同的父佇列,並且被賦予更多的頻寬信用。當系統將流量傳送到 9 個佇列時,這會導致問題

tx_queue_0_packets: 24163396
tx_queue_1_packets: 24164623
tx_queue_2_packets: 24163188
tx_queue_3_packets: 24163701
tx_queue_4_packets: 24163683
tx_queue_5_packets: 24164668
tx_queue_6_packets: 23327200
tx_queue_7_packets: 24163853
tx_queue_8_packets: 91101417 < 從第 9 個佇列傳送的流量過多

為了解決此需求,您可以切換到 5 層拓撲,這將最大拓撲基數更改為 512。透過此增強功能,效能特徵是相等的,因為所有佇列都可以分配給樹中的同一父佇列。此解決方案的明顯缺點是樹的配置深度較低。

使用帶有 devlink 命令的 tx_scheduling_layer 引數來更改傳輸排程器拓撲。要使用 5 層拓撲,請使用值 5。例如:$ devlink dev param set pci/0000:16:00.0 name tx_scheduling_layers value 5 cmode permanent 使用值 9 將其設定回預設值。

您必須對 PCI 插槽進行電源迴圈,才能使所選拓撲生效。

要驗證該值是否已設定:$ devlink dev param show pci/0000:16:00.0 name tx_scheduling_layers

msix_vec_per_pf_max

driverinit

設定 PF 可以使用的最大 MSI-X,其餘的可以用於 SRIOV。範圍是從 msix_vec_per_pf_min 中設定的最小值到 2k/埠數。

msix_vec_per_pf_min

driverinit

設定 PF 將使用的最小 MSI-X。此值通知將靜態分配多少 MSI-X。範圍是從 2 到 msix_vec_per_pf_max 中設定的值。

已實現的驅動程式特定引數¶

名稱

模式

描述

local_forwarding

runtime

透過調整排程器頻寬來控制環回行為。它會影響所有型別的功能:物理功能、虛擬功能和子功能。支援的值有

enabled - 允許埠上的環迴流量

disabled - 不允許此埠上的環迴流量

prioritized - 環迴流量在此埠上具有優先順序

local_forwarding 引數的預設值為 enabled。prioritized 提供了調整環迴流量速率的能力,以增加一個埠的容量,從而犧牲另一個埠的容量。使用者需要停用其中一個埠上的本地轉發,以便在 prioritized 埠上增加容量。

資訊版本¶

ice 驅動程式報告以下版本

已實現的 devlink 資訊版本¶

名稱

型別

示例

描述

board.id

fixed

K65390-000

板的產品板元件 (PBA) 識別符號。

cgu.id

fixed

36

時鐘生成單元 (CGU) 硬體修訂識別符號。

fw.mgmt

running

2.1.7

裝置嵌入式管理處理器上執行的管理韌體的 3 位版本號。它控制 PHY、連結、對裝置資源的訪問等。Intel 文件將其稱為 EMP 韌體。

fw.mgmt.api

running

1.5.1

由管理韌體透過 AdminQ 匯出的 API 的 3 位版本號(major.minor.patch)。驅動程式使用它來識別支援哪些命令。核心的歷史版本僅顯示 2 位版本號(major.minor)。

fw.mgmt.build

running

0x305d955f

管理韌體源的唯一識別符號。

fw.undi

running

1.2581.0

包含 UEFI 驅動程式的 Option ROM 的版本。該版本以 major.minor.patch 格式報告。每當發生重大的中斷性更改時,或者當次要版本將溢位時,主要版本就會遞增。次要版本針對非中斷性更改遞增,並在主要版本遞增時重置為 1。補丁版本通常為 0,但在針對較舊的基本 Option ROM 交付修復作為補丁時遞增。

fw.psid.api

running

0.80

定義快閃記憶體內容格式的版本。

fw.bundle_id

running

0x80002ec0

載入到裝置上的韌體映像檔案的唯一識別符號。也稱為 NVM 的 EETRACK 識別符號。

fw.app.name

running

ICE OS 預設包

裝置中處於活動狀態的 DDP 包的名稱。DDP 包由驅動程式在初始化期間載入。DDP 包的每個變體都有一個唯一的名稱。

fw.app

running

1.3.1.0

裝置中處於活動狀態的 DDP 包的版本。請注意,唯一標識包需要名稱(如 fw.app.name 報告)和版本。

fw.app.bundle_id

running

0xc0000001

裝置中載入的 DDP 包的唯一識別符號。也稱為 DDP 跟蹤 ID。可用於唯一標識特定的 DDP 包。

fw.netlist

running

1.1.2000-6.7.0

網表模組的版本。此模組定義了裝置的乙太網功能和預設設定,並由管理韌體用作管理鏈路和裝置連線的一部分。

fw.netlist.build

running

0xee16ced7

網表模組內容雜湊的前 4 個位元組。

fw.cgu

running

8032.16973825.6021

時鐘生成單元 (CGU) 的版本。格式:<CGU 型別>.<配置版本>.<韌體版本>。

快閃記憶體更新¶

ice 驅動程式使用 devlink-flash 介面實現對快閃記憶體更新的支援。它支援使用包含 fw.mgmt、fw.undi 和 fw.netlist 元件的組合快閃記憶體映像更新裝置快閃記憶體。

支援的覆蓋模式列表¶

位

行為

DEVLINK_FLASH_OVERWRITE_SETTINGS

不要保留儲存在正在更新的快閃記憶體元件中的設定。這包括覆蓋埠配置,該配置確定裝置將使用多少個物理功能進行初始化。

DEVLINK_FLASH_OVERWRITE_SETTINGS 和 DEVLINK_FLASH_OVERWRITE_IDENTIFIERS

不要保留設定或識別符號。使用提供的映像中的內容覆蓋快閃記憶體中的所有內容,而不執行任何保留。這包括覆蓋裝置識別字段,如 MAC 地址、VPD 區域和裝置序列號。預計此組合將與為特定裝置定製的映像一起使用。

ice 硬體不支援僅覆蓋識別符號同時保留設定,因此單獨的 DEVLINK_FLASH_OVERWRITE_IDENTIFIERS 將被拒絕。如果不提供覆蓋掩碼,韌體將被指示在更新時保留所有設定和識別字段。

重新載入¶

ice 驅動程式支援使用帶有 DEVLINK_RELOAD_ACTION_FW_ACTIVATE 操作的 DEVLINK_CMD_RELOAD 在快閃記憶體更新後啟用新韌體。

$ devlink dev reload pci/0000:01:00.0 reload action fw_activate

透過發出裝置特定的嵌入式管理處理器重置來啟用新韌體,該重置請求裝置重置並重新載入 EMP 韌體映像。

該驅動程式當前不支援透過 DEVLINK_RELOAD_ACTION_DRIVER_REINIT 重新載入驅動程式。

埠拆分¶

ice 驅動程式僅支援埠 0 的埠拆分,因為 FW 具有整個裝置的預定義可用埠拆分選項集。

需要系統重啟才能應用埠拆分。

以下命令將選擇具有 4 個埠的埠拆分選項

$ devlink port split pci/0000:16:00.0/0 count 4

在每個 split 和 unsplit 命令之後,所有可用埠選項的列表將列印到動態除錯。第一個選項是預設選項。

ice 0000:16:00.0: Available port split options and max port speeds (Gbps):
ice 0000:16:00.0: Status  Split      Quad 0          Quad 1
ice 0000:16:00.0:         count  L0  L1  L2  L3  L4  L5  L6  L7
ice 0000:16:00.0: Active  2     100   -   -   - 100   -   -   -
ice 0000:16:00.0:         2      50   -  50   -   -   -   -   -
ice 0000:16:00.0: Pending 4      25  25  25  25   -   -   -   -
ice 0000:16:00.0:         4      25  25   -   -  25  25   -   -
ice 0000:16:00.0:         8      10  10  10  10  10  10  10  10
ice 0000:16:00.0:         1     100   -   -   -   -   -   -   -

可能存在多個具有相同埠拆分計數的 FW 埠選項。當再次發出相同的埠拆分計數請求時,將選擇具有相同埠拆分計數的下一個 FW 埠選項。

devlink port unsplit 將選擇拆分計數為 1 的選項。如果沒有拆分計數為 1 的可用 FW 選項,您將收到錯誤。

區域¶

ice 驅動程式實現了以下區域來訪問內部裝置資料。

已實現的區域¶

名稱

描述

nvm-flash

整個快閃記憶體晶片的內容,有時稱為裝置的非易失性儲存器。

shadow-ram

Shadow RAM 的內容,它是從快閃記憶體的開頭載入的。雖然內容主要來自快閃記憶體,但此區域還包含裝置啟動期間生成的資料,這些資料未儲存在快閃記憶體中。

device-caps

裝置韌體的功能緩衝區的內容。用於確定裝置的當前狀態和配置。

可以在沒有快照的情況下訪問 nvm-flash 和 shadow-ram 區域。device-caps 區域需要快照,因為內容由韌體傳送,並且無法拆分為單獨的讀取。

使用者可以透過 DEVLINK_CMD_REGION_NEW 命令請求立即捕獲所有三個區域的快照。

$ devlink region show
pci/0000:01:00.0/nvm-flash: size 10485760 snapshot [] max 1
pci/0000:01:00.0/device-caps: size 4096 snapshot [] max 10

$ devlink region new pci/0000:01:00.0/nvm-flash snapshot 1
$ devlink region dump pci/0000:01:00.0/nvm-flash snapshot 1

$ devlink region dump pci/0000:01:00.0/nvm-flash snapshot 1
0000000000000000 0014 95dc 0014 9514 0035 1670 0034 db30
0000000000000010 0000 0000 ffff ff04 0029 8c00 0028 8cc8
0000000000000020 0016 0bb8 0016 1720 0000 0000 c00f 3ffc
0000000000000030 bada cce5 bada cce5 bada cce5 bada cce5

$ devlink region read pci/0000:01:00.0/nvm-flash snapshot 1 address 0 length 16
0000000000000000 0014 95dc 0014 9514 0035 1670 0034 db30

$ devlink region delete pci/0000:01:00.0/nvm-flash snapshot 1

$ devlink region new pci/0000:01:00.0/device-caps snapshot 1
$ devlink region dump pci/0000:01:00.0/device-caps snapshot 1
0000000000000000 01 00 01 00 00 00 00 00 01 00 00 00 00 00 00 00
0000000000000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0000000000000020 02 00 02 01 32 03 00 00 0a 00 00 00 25 00 00 00
0000000000000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0000000000000040 04 00 01 00 01 00 00 00 00 00 00 00 00 00 00 00
0000000000000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0000000000000060 05 00 01 00 03 00 00 00 00 00 00 00 00 00 00 00
0000000000000070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0000000000000080 06 00 01 00 01 00 00 00 00 00 00 00 00 00 00 00
0000000000000090 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000000000000a0 08 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00
00000000000000b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000000000000c0 12 00 01 00 01 00 00 00 01 00 01 00 00 00 00 00
00000000000000d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000000000000e0 13 00 01 00 00 01 00 00 00 00 00 00 00 00 00 00
00000000000000f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0000000000000100 14 00 01 00 01 00 00 00 00 00 00 00 00 00 00 00
0000000000000110 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0000000000000120 15 00 01 00 01 00 00 00 00 00 00 00 00 00 00 00
0000000000000130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0000000000000140 16 00 01 00 01 00 00 00 00 00 00 00 00 00 00 00
0000000000000150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0000000000000160 17 00 01 00 06 00 00 00 00 00 00 00 00 00 00 00
0000000000000170 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0000000000000180 18 00 01 00 01 00 00 00 01 00 00 00 08 00 00 00
0000000000000190 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000000000001a0 22 00 01 00 01 00 00 00 00 00 00 00 00 00 00 00
00000000000001b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000000000001c0 40 00 01 00 00 08 00 00 08 00 00 00 00 00 00 00
00000000000001d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000000000001e0 41 00 01 00 00 08 00 00 00 00 00 00 00 00 00 00
00000000000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0000000000000200 42 00 01 00 00 08 00 00 00 00 00 00 00 00 00 00
0000000000000210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

$ devlink region delete pci/0000:01:00.0/device-caps snapshot 1

Devlink 速率¶

ice 驅動程式實現了 devlink-rate API。它允許將分層 QoS 解除安裝到硬體。它使使用者能夠在樹結構中對虛擬功能進行分組,並將支援的引數:tx_share、tx_max、tx_priority 和 tx_weight 分配給樹中的每個節點。因此,使用者可以有效地控制為每個 VF 組分配多少頻寬。這稍後由 HW 執行。

假定此功能與 FW 和 ADQ 中執行的 DCB 或任何會觸發 QoS 更改的驅動程式功能(例如建立新的流量類)互斥。如果使用者開始使用 devlink-rate API 對節點進行任何更改,驅動程式將阻止 DCB 或 ADQ 配置。要配置這些功能,需要重新載入驅動程式。相應地,如果將配置 ADQ 或 DCB,則驅動程式將根本不會匯出層次結構,或者將在層次結構匯出後但在進行任何更改之前啟用這些功能時刪除未觸及的層次結構。

此功能還依賴於系統中啟用的 switchdev。這是必需的,因為 devlink-rate 需要 devlink-port 物件的存在,並且這些物件僅在 switchdev 模式下建立。

如果驅動程式設定為 switchdev 模式,它將在建立 VF 時立即匯出內部層次結構。樹的根始終由 node_0 表示。使用者無法刪除此節點。葉節點和具有子節點的節點也無法刪除。

支援的屬性¶

名稱

描述

tx_max

樹節點要消耗的最大頻寬。速率限制是一個絕對數字,指定一個節點在一秒內可以消耗的最大位元組數。速率限制保證鏈路不會過度飽和遠端端的接收器,並且還強制執行訂戶和網路提供商之間的 SLA。

tx_share

分配給樹節點的最小頻寬(當它未被阻塞時)。它指定一個絕對 BW。雖然 tx_max 定義了節點可以消耗的最大頻寬,但 tx_share 標記了節點的承諾 BW。

tx_priority

允許在同級之間使用嚴格優先順序仲裁器。只要節點保持在其頻寬限制內,此仲裁方案就會嘗試根據其優先順序排程節點。範圍 0-7。優先順序為 7 的節點具有最高優先順序並首先被選中,而優先順序為 0 的節點具有最低優先順序。具有相同優先順序的節點被同等對待。

tx_weight

允許在同級之間使用加權公平佇列仲裁方案。此仲裁方案可以與嚴格優先順序同時使用。範圍 1-200。只有相對值對仲裁很重要。

tx_priority 和 tx_weight 可以同時使用。在這種情況下,具有相同優先順序的節點形成同級組中的 WFQ 子組,並且它們之間的仲裁基於分配的權重。

# enable switchdev
$ devlink dev eswitch set pci/0000:4b:00.0 mode switchdev

# at this point driver should export internal hierarchy
$ echo 2 > /sys/class/net/ens785np0/device/sriov_numvfs

$ devlink port function rate show
pci/0000:4b:00.0/node_25: type node parent node_24
pci/0000:4b:00.0/node_24: type node parent node_0
pci/0000:4b:00.0/node_32: type node parent node_31
pci/0000:4b:00.0/node_31: type node parent node_30
pci/0000:4b:00.0/node_30: type node parent node_16
pci/0000:4b:00.0/node_19: type node parent node_18
pci/0000:4b:00.0/node_18: type node parent node_17
pci/0000:4b:00.0/node_17: type node parent node_16
pci/0000:4b:00.0/node_14: type node parent node_5
pci/0000:4b:00.0/node_5: type node parent node_3
pci/0000:4b:00.0/node_13: type node parent node_4
pci/0000:4b:00.0/node_12: type node parent node_4
pci/0000:4b:00.0/node_11: type node parent node_4
pci/0000:4b:00.0/node_10: type node parent node_4
pci/0000:4b:00.0/node_9: type node parent node_4
pci/0000:4b:00.0/node_8: type node parent node_4
pci/0000:4b:00.0/node_7: type node parent node_4
pci/0000:4b:00.0/node_6: type node parent node_4
pci/0000:4b:00.0/node_4: type node parent node_3
pci/0000:4b:00.0/node_3: type node parent node_16
pci/0000:4b:00.0/node_16: type node parent node_15
pci/0000:4b:00.0/node_15: type node parent node_0
pci/0000:4b:00.0/node_2: type node parent node_1
pci/0000:4b:00.0/node_1: type node parent node_0
pci/0000:4b:00.0/node_0: type node
pci/0000:4b:00.0/1: type leaf parent node_25
pci/0000:4b:00.0/2: type leaf parent node_25

# let's create some custom node
$ devlink port function rate add pci/0000:4b:00.0/node_custom parent node_0

# second custom node
$ devlink port function rate add pci/0000:4b:00.0/node_custom_1 parent node_custom

# reassign second VF to newly created branch
$ devlink port function rate set pci/0000:4b:00.0/2 parent node_custom_1

# assign tx_weight to the VF
$ devlink port function rate set pci/0000:4b:00.0/2 tx_weight 5

# assign tx_share to the VF
$ devlink port function rate set pci/0000:4b:00.0/2 tx_share 500Mbps
©核心開發社群。 | 由 Sphinx 5.3.0 & Alabaster 0.7.16 提供支援 | 頁面來源