数据结构与日志格式 - 第203页
我们继续深入分析 NVM Express® Base Specification Revision 2.0b 第 192 页的内容,重点解析 Telemetry Controller-Initiated Log(控制器发起的遥测日志) 的字段和细节。
✅ 一、Telemetry Controller-Initiated Log(控制器发起的遥测日志,LID = 08h)
📌 功能:
该日志由 控制器发起,记录控制器的内部状态。这些遥测数据可用于控制器的性能监控和故障分析。与主机发起的遥测日志相比,控制器发起的日志更侧重于控制器自身的状态和操作。
📌 字段解析:
- Log Identifier(日志标识符)
- 该字段的值应为
08h,表示这是一个 控制器发起的遥测日志。
| 字段 | 描述 |
|---|---|
| Log Identifier | 固定值 08h,表示这是控制器发起的遥测日志。 |
- Reserved(保留字段)
- 这些字段用于未来的扩展,目前不使用。
| 字段 | 描述 |
|---|---|
| Reserved | 保留字段,当前未使用。 |
- IEEE OUI Identifier(IEEE OUI 标识符)
- 该字段包含 控制器供应商的组织唯一标识符(OUI),用于标识控制器的制造商。OUI 是由 IEEE 分配并注册的。
| 字段 | 描述 |
|---|---|
| IEEE OUI Identifier (IEEE) | 控制器供应商的 IEEE OUI 标识符,如果为 0h,则表示没有 IEEE 标识符。 |
注意:IEEE OUI 标识符是有效的 IEEE/RAC 分配的标识符,可以在 IEEE OUI 注册网站 查找。
- Telemetry Controller-Initiated Data Area 1 Last Block
- 该字段指示 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开始,直到该字段指示的最后数据块。
- Telemetry Controller-Initiated Data Area 2 Last Block
- 该字段指示 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 的值。 |
- Telemetry Controller-Initiated Data Area 3 Last Block
- 该字段指示 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 的值。 |
- Telemetry Controller-Initiated Data Area 4 Last Block
- 该字段指示 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 的值。 |
- Telemetry Controller-Initiated Data Available
- 该字段指示是否存在保存的控制器内部状态数据。如果为
0h,则表示没有保存的内部状态数据;如果为1h,则表示有保存的内部状态数据。
| 字段 | 描述 |
|---|---|
| Telemetry Controller-Initiated Data Available | 如果为 1h,则表示有保存的控制器内部状态数据,且该值在 电源状态和复位 时持续有效。 |
- Telemetry Controller-Initiated Data Generation Number
- 该字段记录 Telemetry Controller-Initiated Data 捕获的生成次数,每次更新时递增。
| 字段 | 描述 |
|---|---|
| Telemetry Controller-Initiated Data Generation Number | 记录遥测数据的生成次数。 |
- Reason Identifier
- 该字段包含厂商特定的标识符,用于描述控制器在捕获遥测数据时的操作条件。这有助于标识控制器的具体工作状态或操作场景。
| 字段 | 描述 |
|---|---|
| Reason Identifier | 厂商定义的标识符,描述控制器的操作条件。 |
- Telemetry Controller-Initiated Data Block n
- 该字段包含 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 错误。
📌 总结与学习建议
- 控制器发起遥测日志解析:
-
学习如何从 Telemetry Controller-Initiated Log 中提取遥测数据,尤其是控制器的 状态捕获 和 生成次数 字段,了解如何通过这些数据进行故障诊断。
-
遥测数据块管理:
-
理解如何根据 Telemetry Data Area 字段划分遥测数据区域,学习如何计算 日志页大小 并确保数据的一致性和完整性。
-
数据存储与更新:
- 掌握如何通过 Telemetry Controller-Initiated Data Generation Number 和 Reason Identifier 等字段对遥测数据进行管理和更新,确保每次捕获的遥测数据具有唯一性和可靠性。
如果你需要:
- 遥测数据区域划分与计算图解,帮助你理解如何计算遥测数据的区域和日志页大小。
- 遥测日志捕获流程图,帮助你理解控制器如何捕获和更新遥测数据。
我可以为你提供相关的图解,帮助你更好地理解这些字段的作用和数据流动。你希望从哪个部分开始呢?