命名空间管理 - 📚 特性值(Feature Values)解析 (第148页)
NVME2.0协议解读 1 min read

命名空间管理 - 📚 特性值(Feature Values)解析 (第148页)

Blog Author

我们继续深入分析 《NVM Express® Base Specification, revision 2.0b》第137页,本部分详细讨论了 Feature Values(特性值),以及如何通过 Get FeaturesSet Features 命令来读取和设置控制器的操作参数。接下来,我们将详细解释 Feature Identifiers当前值、默认值和保存值 的概念,并探讨如何在命名空间或控制器级别应用这些特性。


📚 特性值(Feature Values)解析

Feature Identifiers

  • 每个 Feature 都有一个唯一的 Feature Identifier,这些标识符代表了控制器的不同功能。特性值可能影响控制器或命名空间的行为。

特性值的设置方式

每个特性有三个设置值:
1. 默认值(Default):由制造商设定,通常不可更改,除非在文档中明确说明。
2. 保存值(Saved):特性在 Controller Level Reset 后的状态。如果该特性是 可保存的,则保存值为该特性的持久化值;否则,保存值将与默认值一致。
3. 当前值(Current):控制器正在使用的实际值,可能会随着命令执行而变化。


🛠 ONCS 字段与设置

  • ONCS(Optional NVM Command Support)字段 位于 Identify Controller 数据结构 中,指示控制器是否支持 保存值
  • 如果 ONCS.bit 4 设置为 1
  • 每个特性都有 当前值、默认值和保存值
  • 保存值 会在 Controller Level Reset 后保存,并且 当前值 可能会在电源循环和重置后保持不变。

  • 如果 ONCS.bit 4 设置为 0

  • 仅支持 当前值默认值

⚙️ 特性值的应用

Set Features 命令

  • 通过 Set Features 命令,主机可以修改控制器的 当前值
  • 如果特性支持保存,则 当前值保存值 都会被更新。
  • 如果特性不支持保存,则只有 当前值 被更新。

Get Features 命令

  • Get Features 命令用于读取当前的特性值。
  • 对于 控制器级特性,返回的将是控制器的 当前值
  • 对于 命名空间级特性,返回的将是特定命名空间的 当前值

🏷 特性设置的作用范围

控制器特性

  • 如果 NSID(命名空间标识符) 字段为 0hFFFFFFFh,则表示该特性与 控制器 相关,Get Features 返回的将是 当前设置Set Features 命令则会设置 控制器特性值

命名空间特性

  • 如果 NSID 设置为有效的命名空间标识符,Set Features 命令将设置 该命名空间的特性值,并且 Get Features 命令将返回该命名空间的 当前值
  • 如果 NSID 设置为 FFFFFFFh,并且 MDS 位(Metadata Supported)在控制器结构中设置为 1,则命令将因 无效字段 而被拒绝。

📊 命令应用示意图

Set Features 命令应用(控制器级)

  • NSID = 0hFFFFFFFh
  • Set Features 设置的是 控制器 级的特性值。
  • Get Features 返回的是控制器的 当前设置

Set Features 命令应用(命名空间级)

  • NSID = 有效命名空间标识符
  • Set Features 设置的是 指定命名空间 的特性值。
  • Get Features 返回的是 该命名空间当前设置

⚠️ 错误处理规则

  • 如果 Set Features 命令中指定了一个不支持的特性,控制器将返回错误。
  • 如果 NSID 被设置为无效的命名空间标识符(例如 FFFFFFFh),且特性不适用于命名空间,命令将返回 Feature Not Namespace Specific 错误。

🧠 教学总结

项目 说明
Feature Identifiers 每个特性都有唯一的标识符,控制器的操作参数可通过 Get/Set Features 命令进行配置。
特性值设置 特性有 默认值、保存值、当前值,支持设置和获取这些值,控制器支持不同的特性管理模式。
命名空间与控制器特性 特性可以是控制器级别的,也可以是命名空间特定的,根据 NSID 的值来选择应用范围。
错误处理 如果命令中提供的 NSID 不符合要求或特性不适用,控制器将返回错误信息。

🔧 进一步优化与建议

  1. 理解特性保存与恢复机制:对于支持保存的特性,了解如何在重启后恢复 当前值 非常重要。
  2. 命名空间特性管理:要精确控制某个命名空间的特性配置,确保在命令中使用正确的 NSID
  3. 电源周期影响:有些特性值可能在电源重启后保持 当前值,这在设计高可用系统时非常重要。

如果你希望我继续讲解 Set FeaturesGet Features 命令的更具体应用场景,或者你有其他具体问题,欢迎继续提问!