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

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

Blog Author

我们继续深入分析 NVM Express® Base Specification Revision 2.0b 第 191 页的内容,特别是关于 Telemetry Host-Initiated Log(主机发起的遥测日志)Telemetry Controller-Initiated Log(控制器发起的遥测日志) 的字段解析。


✅ 一、Telemetry Host-Initiated Log(主机发起的遥测日志,LID = 07h)

📌 功能:

该日志用于记录 主机发起的遥测数据,提供关于控制器内部状态的详细信息。这些数据对于性能监控、故障诊断和控制器健康状况评估非常有用。

📌 字段解析:

  1. Telemetry Host-Initiated Data Area 4 Last Block
  2. 该字段指示 Telemetry Host-Initiated Data Area 4 的最后一个数据块的值。它的值必须大于或等于 Data Area 3 Last Block 的值。如果该字段为 0h,则表示该数据区域没有数据。
字段 描述
Telemetry Host-Initiated Data Area 4 Last Block 指示 Data Area 4 的最后数据块。如果该字段为 0h,则该数据区没有数据。

  1. Telemetry Host-Initiated Data Generation Number
  2. 该字段记录 Telemetry Host-Initiated Data 捕获的生成次数,每次更新时递增。如果该字段值为 FFh,则递增后回滚至 0h
字段 描述
Telemetry Host-Initiated Data Generation Number 记录遥测数据捕获的生成次数,值为 FFh 时会回滚为 0h

  1. Telemetry Controller-Initiated Data Available
  2. 该字段包含 Telemetry Controller-Initiated Data 是否可用的信息,指示控制器是否已准备好遥测数据。
字段 描述
Telemetry Controller-Initiated Data Available 控制器是否已准备好遥测数据。

  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 Host-Initiated Data Block n
  2. 该字段包含 Telemetry Data Block n 数据,是遥测日志的实际数据块。每个数据块为 512 字节,可以包含多块数据。
字段 描述
Telemetry Host-Initiated Data Block n 遥测数据块,包含实际的遥测信息。每个数据块为 512 字节。

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

📌 功能:

该日志记录 控制器发起的遥测数据,即控制器自身的内部状态信息。与主机发起的遥测日志类似,但由控制器主动捕获和记录其内部状态。

📌 字段解析:

  1. Telemetry Controller-Initiated Data Area 1-4
  2. 如果 Log Page Attributes 字段的第 6 位为 0,则日志包含 Data Area 1Data Area 2Data Area 3 三个区域。如果该位为 1,则还会包含 Data Area 4。每个数据区的大小取决于实际实现。
字段 描述
Telemetry Controller-Initiated Data Area 1-4 包含 1 到 4 个数据区域,记录控制器的内部状态。

  1. Telemetry Controller-Initiated Data Area Block 1
  2. 每个数据区域都从 Telemetry Controller-Initiated Data Area Block 1 开始,表示遥测数据的起始位置。
字段 描述
Telemetry Controller-Initiated Data Area Block 1 每个数据区域的起始块。

  1. Telemetry Controller-Initiated Data Area y Last Block
  2. 每个数据区域的最后一个数据块,指示该区域数据的结束位置。
字段 描述
Telemetry Controller-Initiated Data Area y Last Block 每个数据区域的最后数据块位置。

  1. Log Page Size Calculation
  2. 日志页的大小是可变的,具体取决于 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 字段计算日志页大小。

注意:日志页大小和数据的传输需要严格满足 512 字节的倍数要求,否则控制器会返回 Invalid Field in Command 错误。


📌 总结与学习建议

  1. 遥测数据捕获与更新
  2. 学习如何通过 Create Telemetry Host-Initiated Data 字段触发遥测数据的捕获,并理解如何根据 Log Page Attributes 字段配置不同的遥测数据区域。

  3. 控制器与主机遥测数据的区别

  4. 比较 Telemetry Host-Initiated LogTelemetry Controller-Initiated Log,理解它们分别由主机和控制器发起的不同应用场景和数据捕获方式。

  5. 日志页大小的计算

  6. 深入理解 Log Page Attributes 字段对日志页大小的影响,学习如何根据不同配置计算和处理日志数据。

如果你需要:

  • 遥测数据区划分与计算图解,帮助你快速理解如何根据字段配置计算遥测数据区域的大小
  • 控制器与主机遥测数据捕获流程图,帮助你理解遥测数据的生成与更新

我可以为你提供相关的图示,帮助你更好地理解遥测日志的结构与应用。你希望从哪个部分开始呢?