Logo

Linux 核心

6.16.0-rc4

快速搜尋

目錄

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

本頁

  • 顯示源

Devlink 健康¶

背景¶

devlink 健康機制旨在實現即時警報,以便了解 PCI 裝置何時出現問題。

  • 提供警報除錯資訊。

  • 自愈。

  • 如果問題需要供應商支援,提供一種收集所有所需除錯資訊的方法。

概述¶

主要思想是統一和集中驅動程式健康報告到通用的 devlink 例項中,並允許使用者設定健康報告和恢復過程的不同屬性。

devlink 健康報告器:裝置驅動程式為每種錯誤/健康型別建立一個“健康報告器”。錯誤/健康型別可以是已知/通用的(例如 PCI 錯誤、韌體錯誤、收發錯誤)或未知(驅動程式特定的)。對於每個註冊的健康報告器,驅動程式可以非同步地發出錯誤/健康報告。所有健康報告處理都由 devlink 完成。裝置驅動程式可以為每個“健康報告器”提供特定的回撥函式,例如:

  • 恢復程式

  • 診斷程式

  • 物件轉儲程式

  • 開箱即用初始引數

驅動程式的不同部分可以註冊不同型別的健康報告器,並帶有不同的處理程式。

動作¶

一旦報告了錯誤,devlink 健康機制將執行以下操作:

  • 日誌將被髮送到核心跟蹤事件緩衝區

  • 報告器例項的健康狀態和統計資料正在更新

  • 正在進行物件轉儲並儲存在報告器例項中(只要設定了自動轉儲並且沒有其他已儲存的轉儲)

  • 正在嘗試自動恢復。取決於:

    • 自動恢復配置

    • 寬限期與上次恢復以來的時間

Devlink 格式化訊息¶

為了處理 devlink 健康診斷和健康轉儲請求,devlink 建立了一個格式化訊息結構 devlink_fmsg 並將其傳送到驅動程式的 callback 函式,以便使用 devlink fmsg API 填充資料。

Devlink fmsg 是一種在驅動程式和 devlink 之間傳遞描述符的機制,採用類似 json 的格式。該 API 允許驅動程式新增巢狀屬性,例如物件、物件對和值陣列,以及名稱和值等屬性。

驅動程式應使用此 API 以一種格式填充 fmsg 上下文,該格式稍後將由 devlink 轉換為 netlink 訊息。當需要使用 SKB 將資料傳送到 netlink 層時,它會將資料分段到不同的 SKB 之間。為了執行這種分段,它使用虛擬巢狀屬性,以避免實際的巢狀使用,因為實際巢狀不能在不同的 SKB 之間分割。

使用者介面¶

使用者可以透過 devlink 訪問/更改每個報告器的引數和驅動程式特定的回撥函式,例如每種錯誤型別(每個健康報告器):

  • 配置報告器的通用引數(例如:停用/啟用自動恢復)

  • 呼叫恢復程式

  • 執行診斷

  • 物件轉儲

devlink 健康介面列表¶

名稱

描述

DEVLINK_CMD_HEALTH_REPORTER_GET

按 DEV 和報告器檢索狀態和配置資訊。

DEVLINK_CMD_HEALTH_REPORTER_SET

允許設定與報告器相關的配置。

DEVLINK_CMD_HEALTH_REPORTER_RECOVER

觸發報告器的恢復程式。

DEVLINK_CMD_HEALTH_REPORTER_TEST

在報告器上觸發一個假健康事件。測試事件在恢復流程方面的效果應與真實事件的效果緊密一致。

DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE

檢索與報告器相關的當前裝置狀態。

DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET

檢索上次儲存的轉儲。Devlink 健康機制只儲存一個轉儲。如果 devlink 尚未為此報告器儲存轉儲,則 devlink 會生成一個新的轉儲。轉儲輸出由報告器定義。

DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR

清除指定報告器最後儲存的轉儲檔案。

下圖提供了 devlink-health 的概覽

                                               netlink
                                      +--------------------------+
                                      |                          |
                                      |            +             |
                                      |            |             |
                                      +--------------------------+
                                                   |request for ops
                                                   |(diagnose,
  driver                               devlink     |recover,
                                                   |dump)
+--------+                            +--------------------------+
|        |                            |    reporter|             |
|        |                            |  +---------v----------+  |
|        |   ops execution            |  |                    |  |
|     <----------------------------------+                    |  |
|        |                            |  |                    |  |
|        |                            |  + ^------------------+  |
|        |                            |    | request for ops     |
|        |                            |    | (recover, dump)     |
|        |                            |    |                     |
|        |                            |  +-+------------------+  |
|        |     health report          |  | health handler     |  |
|        +------------------------------->                    |  |
|        |                            |  +--------------------+  |
|        |     health reporter create |                          |
|        +---------------------------->                          |
+--------+                            +--------------------------+
© 核心開發社群。 | 由 Sphinx 5.3.0 & Alabaster 0.7.16 提供支援 | 頁面源