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 内核用户的资格认证的硬件。