数据结构与日志格式 - 第203页
NVME2.0协议解读 1 min read

数据结构与日志格式 - 第203页

Blog Author

我们继续深入分析 NVM Express® Base Specification Revision 2.0b 第 192 页的内容,重点解析 Telemetry Controller-Initiated Log(控制器发起的遥测日志) 的字段和细节。


✅ 一、Telemetry Controller-Initiated Log(控制器发起的遥测日志,LID = 08h)

📌 功能:

该日志由 控制器发起,记录控制器的内部状态。这些遥测数据可用于控制器的性能监控和故障分析。与主机发起的遥测日志相比,控制器发起的日志更侧重于控制器自身的状态和操作。

📌 字段解析:

  1. Log Identifier(日志标识符)
  2. 该字段的值应为 08h,表示这是一个 控制器发起的遥测日志
字段 描述
Log Identifier 固定值 08h,表示这是控制器发起的遥测日志。

  1. Reserved(保留字段)
  2. 这些字段用于未来的扩展,目前不使用。
字段 描述
Reserved 保留字段,当前未使用。

  1. IEEE OUI Identifier(IEEE OUI 标识符)
  2. 该字段包含 控制器供应商的组织唯一标识符(OUI),用于标识控制器的制造商。OUI 是由 IEEE 分配并注册的。
字段 描述
IEEE OUI Identifier (IEEE) 控制器供应商的 IEEE OUI 标识符,如果为 0h,则表示没有 IEEE 标识符。

注意:IEEE OUI 标识符是有效的 IEEE/RAC 分配的标识符,可以在 IEEE OUI 注册网站 查找。


  1. Telemetry Controller-Initiated Data Area 1 Last Block
  2. 该字段指示 Telemetry Controller-Initiated Data Area 1 的最后一个数据块。如果该数据区域没有数据,则该字段应为 0h
字段 描述
Telemetry Controller-Initiated Data Area 1 Last Block 控制器发起的遥测数据区域 1 的最后一个数据块。如果没有数据,则该字段为 0h

注意:如果该字段不为 0h,则表示 Telemetry Controller-Initiated Data Area 1 的数据从块 1h 开始,直到该字段指示的最后数据块。


  1. Telemetry Controller-Initiated Data Area 2 Last Block
  2. 该字段指示 Telemetry Controller-Initiated Data Area 2 的最后一个数据块,该值必须大于或等于 Data Area 1 Last Block 中的值。
字段 描述
Telemetry Controller-Initiated Data Area 2 Last Block 控制器发起的遥测数据区域 2 的最后一个数据块,必须大于或等于 Data Area 1 Last Block 的值。

  1. Telemetry Controller-Initiated Data Area 3 Last Block
  2. 该字段指示 Telemetry Controller-Initiated Data Area 3 的最后一个数据块,该值必须大于或等于 Data Area 2 Last Block 中的值。
字段 描述
Telemetry Controller-Initiated Data Area 3 Last Block 控制器发起的遥测数据区域 3 的最后一个数据块,必须大于或等于 Data Area 2 Last Block 的值。

  1. Telemetry Controller-Initiated Data Area 4 Last Block
  2. 该字段指示 Telemetry Controller-Initiated Data Area 4 的最后一个数据块,如果 Log Page Attributes 字段的第 6 位为 1,该值必须大于或等于 Data Area 3 Last Block 的值。
字段 描述
Telemetry Controller-Initiated Data Area 4 Last Block 控制器发起的遥测数据区域 4 的最后一个数据块,必须大于或等于 Data Area 3 Last Block 的值。

  1. Telemetry Controller-Initiated Data Available
  2. 该字段指示是否存在保存的控制器内部状态数据。如果为 0h,则表示没有保存的内部状态数据;如果为 1h,则表示有保存的内部状态数据。
字段 描述
Telemetry Controller-Initiated Data Available 如果为 1h,则表示有保存的控制器内部状态数据,且该值在 电源状态和复位 时持续有效。

  1. Telemetry Controller-Initiated Data Generation Number
  2. 该字段记录 Telemetry Controller-Initiated Data 捕获的生成次数,每次更新时递增。
字段 描述
Telemetry Controller-Initiated Data Generation Number 记录遥测数据的生成次数。

  1. Reason Identifier
  2. 该字段包含厂商特定的标识符,用于描述控制器在捕获遥测数据时的操作条件。这有助于标识控制器的具体工作状态或操作场景。
字段 描述
Reason Identifier 厂商定义的标识符,描述控制器的操作条件。

  1. Telemetry Controller-Initiated Data Block n
  2. 该字段包含 Telemetry Data Block n 数据,所有数据块的大小为 512 字节。
字段 描述
Telemetry Controller-Initiated Data Block n 遥测数据块,记录控制器的内部状态信息。每个数据块为 512 字节。

📌 日志页大小与数据处理:

  • 日志页大小计算:
  • 如果 Log Page Attributes 字段的第 6 位为 0,则日志页的大小可以通过 Telemetry Controller-Initiated Data Area 3 Last Block 字段计算。
  • 如果第 6 位为 1,且 ETDAS 位为 1h,则日志页的大小通过 Telemetry Controller-Initiated Data Area 4 Last Block 字段计算。
  • 否则,使用 Data Area 3 的最后一个块来计算日志页大小。

  • 数据传输要求:

  • 主机请求的数据必须是 512 字节的倍数,否则控制器会返回 Invalid Field in Command 错误。

📌 总结与学习建议

  1. 控制器发起遥测日志解析:
  2. 学习如何从 Telemetry Controller-Initiated Log 中提取遥测数据,尤其是控制器的 状态捕获生成次数 字段,了解如何通过这些数据进行故障诊断。

  3. 遥测数据块管理:

  4. 理解如何根据 Telemetry Data Area 字段划分遥测数据区域,学习如何计算 日志页大小 并确保数据的一致性和完整性。

  5. 数据存储与更新:

  6. 掌握如何通过 Telemetry Controller-Initiated Data Generation NumberReason Identifier 等字段对遥测数据进行管理和更新,确保每次捕获的遥测数据具有唯一性和可靠性。

如果你需要:

  • 遥测数据区域划分与计算图解,帮助你理解如何计算遥测数据的区域和日志页大小。
  • 遥测日志捕获流程图,帮助你理解控制器如何捕获和更新遥测数据。

我可以为你提供相关的图解,帮助你更好地理解这些字段的作用和数据流动。你希望从哪个部分开始呢?