Linux NVMe 功能和特性策略¶
本文件解释了用于决定 Linux NVMe 驱动程序支持什么以及不支持什么的策略。
简介¶
NVM Express 是一个开放的标准和信息集合。
drivers/nvme/host/ 中的 Linux NVMe 主机驱动程序支持实现 NVM Express (NVMe) 系列规范的设备,该规范目前包含多个文档
NVMe 基本规范
各种命令集规范(例如,NVM 命令集)
各种传输规范(例如,PCIe、光纤通道、RDMA、TCP)
NVMe 管理接口规范
请参阅 https://nvmexpress.org/developers/ 获取 NVMe 规范。
支持的功能¶
NVMe 是一个庞大的规范套件,包含仅对特定用例有用或适合的功能。 请务必注意,Linux 的目标不是实现规范中的每个功能。 实现的每个附加功能都会引入更多代码、更多维护以及潜在的更多错误。 因此,NVMe 主机驱动程序的功能和可维护性之间存在固有的权衡。
在 Linux NVMe 主机驱动程序中实现的任何功能都必须支持以下要求
该功能在官方 NVMe 规范的发布版本中指定,或者在 NVMe 网站上提供的已批准的技术提案 (TP) 中指定。 或者,如果它与有线协议没有直接关系,则不与任何 NVMe 规范相矛盾。
不与 Linux 架构或 NVMe 主机驱动程序的设计冲突。
具有明确、无可争议的价值主张和社区的广泛共识。
NVMe 主机驱动程序通常不支持供应商特定的扩展。
强烈建议与 Linux NVMe 和块层维护人员合作,并获得规范更改的反馈,这些更改旨在供 Linux NVMe 主机驱动程序使用,以避免在后期阶段发生冲突。
特性¶
有时,开放标准的实现未能正确实现标准的某些部分。 Linux 使用基于标识符的特性来解决此类实现错误。 特性的目的是处理广泛可用的硬件(通常是消费级硬件),如果没有这些特性,Linux 用户将无法使用这些硬件。 通常,这些实现没有或仅由硬件制造商使用 Linux 进行表面测试。
Linux NVMe 维护人员会根据问题对 Linux 用户的影响以及它如何影响驱动程序的可维护性来临时决定是否对实现进行特性处理。 通常,特性是最后的手段,如果供应商没有提供固件更新或其他解决方法。
不会为不在大众市场上销售的硬件向 Linux 内核添加特性。 应该在硬件出厂之前修复未通过企业 Linux 发行版、ChromeOS、Android 或其他 Linux 内核用户的资格认证的硬件,而不是依赖 Linux 特性。