1. Linux NVMe 功能和特性策略

本文件解釋了用於決定 Linux NVMe 驅動程式支援哪些功能和不支援哪些功能的策略。

1.1. 簡介

NVM Express 是一個開放的標準和資訊集合。

drivers/nvme/host/ 中的 Linux NVMe 主機驅動程式支援實現 NVM Express (NVMe) 系列規範的裝置,該規範目前包含多個文件

  • NVMe 基礎規範

  • 各種命令集規範 (例如 NVM 命令集)

  • 各種傳輸規範(例如 PCIe、光纖通道、RDMA、TCP)

  • NVMe 管理介面規範

有關 NVMe 規範,請參見 https://nvmexpress.org/developers/

1.2. 支援的功能

NVMe 是一套龐大的規範,包含僅對特定用例有用或合適的功能。 重要的是要注意,Linux 的目標不是實現規範中的所有功能。 每增加一個功能都會引入更多程式碼、更多維護,並可能導致更多錯誤。 因此,NVMe 主機驅動程式的功能和可維護性之間存在固有的權衡。

在 Linux NVMe 主機驅動程式中實現的任何功能都必須支援以下要求

  1. 該功能在官方 NVMe 規範的釋出版本中指定,或者在 NVMe 網站上提供的已批准的技術提案 (TP) 中指定。 或者,如果它與線上協議沒有直接關係,則不與任何 NVMe 規範相矛盾。

  2. 不與 Linux 架構衝突,也不與 NVMe 主機驅動程式的設計衝突。

  3. 具有清晰、無可爭議的價值主張,並在社群中擁有廣泛的共識。

NVMe 主機驅動程式通常不支援供應商特定的擴充套件。

強烈建議與 Linux NVMe 和塊層維護人員合作,並獲得有關旨在由 Linux NVMe 主機驅動程式使用的規範更改的反饋,以避免以後發生衝突。

1.3. 特性

有時,開放標準的實現未能正確實現標準的部分內容。 Linux 使用基於識別符號的特性來解決此類實現錯誤。 特性的目的是處理廣泛可用的硬體,通常是消費級硬體,如果沒有這些特性,Linux 使用者將無法使用。 通常,這些實現未經硬體製造商使用 Linux 進行測試或僅經過表面測試。

Linux NVMe 維護人員根據問題對 Linux 使用者的影響以及它如何影響驅動程式的可維護性來臨時決定是否進行特性處理。 通常,如果供應商沒有提供韌體更新或其他解決方法,則特性是最後的手段。

對於大眾市場上沒有的硬體,Linux 核心不會新增特性。 在依賴 Linux 特性之前,應先修復未透過企業 Linux 發行版、ChromeOS、Android 或其他 Linux 核心使用者的資格認證的硬體。