特性配置 - 深入分析:Set Features 命令 (第300页)
NVME2.0协议解读 1 min read

特性配置 - 深入分析:Set Features 命令 (第300页)

Blog Author

深入分析:Set Features 命令

Set Features 命令用于配置 NVMe 控制器的各种功能属性。这些属性可用于定制存储设备的行为,并允许主机通过设置不同的功能标识符 (Feature Identifier, FID) 来修改控制器的行为。通过 Set Features 命令,主机可以指定控制器特性并持久保存设置,确保在设备的重启或断电之后,这些特性保持有效。

主要字段解析

  1. Data Pointer (DPTR)
  2. Data Pointer 字段指定数据缓冲区的起始位置,这对于传输与特性相关的配置数据至关重要。特别是对于某些特性,它可能需要通过 PRPs (Physical Region Pages) 来传递数据,但数据缓冲区不能跨越多个页面边界。
  3. 如果不需要数据结构,那么该字段将不会被使用。

  4. Save (SV)

  5. Save 位指定控制器是否应保存特性设置,使其在所有电源状态和重置后持续有效。该位由控制器在 Identify Controller 数据结构中的 Optional NVM Command Support 字段的第 4 位表示。
  6. 如果指定的特性标识符不支持保存,并且命令中 Save 位被设置为 1,那么该命令将会被中止,并返回状态码 Feature Identifier Not Saveable

  7. Feature Identifier (FID)

  8. Feature Identifier 字段指明了正在配置的特性。每个特性都有一个唯一的标识符,该字段用于指定这个特性。
  9. 控制器还可以支持选择 UUID(通用唯一标识符),用于某些特定厂商的特性。如果控制器支持 UUID 选择,Command Dword 14 字段将用于指定 UUID 索引。

  10. UUID Index

  11. 如果 Set Features 命令支持选择 UUID(仅适用于特定的厂商特性),则 UUID Index 字段指定了与特性相关的 UUID 索引。

命令执行流程

  1. 命令提交
  2. 主机使用 Set Features 命令来配置特性。命令中包括特性标识符和必要的配置参数。如果需要保存该设置,Save 位会被设置为 1,确保设置能跨越设备重启后仍然有效。

  3. 命令完成

  4. 当命令完成时,控制器将返回一个完成队列条目,指示命令的执行状态。控制器可能会根据当前设置来调整设备行为。

  5. 特性变更对后续命令的影响

  6. 特性变更可能不会立即影响正在执行的命令。新的特性设置将在该命令成功完成后生效,且所有后续提交的命令将会使用新的设置。
  7. 如果正在执行的命令依赖于特性设置的变更,主机应该等待这些命令完成后再提交 Set Features 命令。

特性配置与恢复

  1. 持久性
  2. 如果某个特性设置在设备重启或电源故障后需要保留,Save 位确保该设置可以在控制器的电源重启后生效。如果特性不持久,则在控制器进行 Level Reset 后,该特性的值将重置为默认值。

  3. 特性更新后,主机的处理流程

  4. 在提交 Set Features 命令后,主机应该重新发现和初始化所有与该特性相关的能力。例如,如果特性影响到命名空间的行为,主机软件需要暂停与该命名空间的交互,提交 Set Features 命令后再重新提交命令。

状态码与错误处理

  1. Feature Identifier Not Saveable
  2. 如果请求保存的特性不支持持久保存,该命令会被中止并返回此状态码。

  3. I/O Command Set Not Supported

  4. 如果控制器不支持与特性相关的 I/O 命令集,将返回该状态码。

  5. Invalid Field in Command

  6. 如果 Security Protocol 或其他特性字段包含无效或不支持的值,控制器将返回该状态码。

总结

Set Features 命令在 NVMe 控制器中具有关键作用,允许主机调整和配置控制器的功能特性。这些特性控制存储设备的操作行为,确保设备的定制化需求得以满足。通过正确使用 Save 位,主机可以确保特性设置在控制器的重启和电源恢复后依然有效。