9.20.8. NVDIMM 设备方法
NVDIMM 设备方法的返回状态码见下表。
表 9.38 NVDIMM 设备方法返回状态码
| 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 状态 | 2 | 0 | 0 - 成功 1 - 未实现 2 - 输入参数无效 3 - 硬件错误 4 - 建议重试 5 - 错误 - 未知原因 6 - 方法特定错误码 7 - FFFFh 保留 |
| 扩展状态 | 2 | 2 | 方法特定 |
9.20.8.1. _NCH(获取 NVDIMM 当前健康信息)
此方法提供 NVDIMM 设备的当前健康信息。每当发生任何可能影响 NVDIMM 设备健康的事件时,平台都会通过 NVDIMM 设备 NFIT 健康事件通知通知 OSPM(见表 5.163)(见表 9.39)。当 OSPM 收到通知后,可以通过调用此方法获取当前健康信息。无论是否收到健康通知,OSPM 都可以在任何时候调用此方法以获取 NVDIMM 设备的当前健康状态。
在引导期间,OSPM 可以调用此方法来获取 NVDIMM 设备的当前健康状态并采取适当操作。在 OSPM 运行期间,如果某个健康问题得到纠正,则平台也应通过 NVDIMM 设备 NFIT 健康事件通知通知 OSPM。
参数:
无
返回值:
一个包含如下所述当前健康信息的缓冲区
返回值信息:
表 9.39 NCH 返回值
| 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 状态 | 2 | 0 | 见 NVDIMM 设备方法返回状态码 |
| 扩展状态 | 2 | 2 | 保留 |
| 有效性标志 | 2 | 4 | Bit [0] - 置为 1 表示总体健康状态标志字段有效。此位被置为 1。Bit [1] - 置为 1 表示总体健康状态属性字段有效。Bit [2-15] - 保留 |
| 总体健康状态标志 | 4 | 6 | 可根据需要设置多个位。某位为 0 表示对应的健康问题不存在,或者该位不适用于该 NVDIMM。如果所有位都为 0,则 NVDIMM 处于健康状态。Bit [0] - 需要维护。此位被置为 1 表示需要维护,例如温度告警触发、能源寿命告警触发。Bit [1] - 性能下降。此位被置为 1 表示性能已下降。Bits [2-7] - 保留 以下位表示 OSPM 应假定写入持久性丢失、但读取仍可正常工作的情况。Bit [8] - 断电情况下写入持久性丢失。此位被置为 1 表示 OSPM 应假定自上次 NVDIMM 联机以来的所有写入在断电情况下都可能丢失。Bit [9] - 脱机场景下写入持久性丢失。此位被置为 1 表示 OSPM 应假定在尝试任何后续脱机操作时,自上次 NVDIMM 联机以来的所有写入都可能丢失。Bit [10] - 写入持久性即将丢失。此位被置为 1 表示 OSPM 应假定后续写入可能无法持久保存。Bit [11-15] - 保留 以下位表示 OSPM 应假定所有数据丢失的情况。Bit [16] - 断电情况下全部数据丢失。此位被置为 1 表示 OSPM 应假定在断电情况下所有数据都可能丢失。Bit [17] - 脱机场景下全部数据丢失。此位被置为 1 表示 OSPM 应假定在尝试任何后续脱机操作时所有数据都可能丢失。Bit [18] - 全部数据即将丢失。此位被置为 1 表示 OSPM 应假定后续读取可能失败或返回无效数据,并且后续写入可能无法持久保存。Bit [19-31] - 保留 |
| 总体健康状态属性 | 4 | 10 | Bit [0] - 永久性健康状态 - 此位被置为 1 表示总体健康状态标志中报告的健康问题是永久性的。如果总体健康状态标志的所有位都为 0,则 NVDIMM 处于健康状态,OSPM 应忽略此位。Bit [1-31] - 保留 |
| 保留 | 50 | 14 | 保留 |
注
这些字段不跟踪上一次关机期间的数据丢失,也不跟踪引导期间发生的任何故障。如果导致这些故障的条件在调用 _NCH 方法时仍然存在,则平台应在此方法的字段中作出适当反映。
9.20.8.2. _NBS(获取 NVDIMM 引导状态)
此方法提供有关 NVDIMM 设备在引导时状态的信息。此方法提供的信息由平台在引导期间更新,并在运行期间保持不变。
参数:
无
返回值:
一个包含如下所述设备引导状态信息的缓冲区
返回值信息:
表 9.40 _NBS 返回值
| 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 状态 | 2 | 0 | 见表 9.38 |
| 扩展状态 | 2 | 2 | 保留 |
| 有效性标志 | 2 | 4 | Bit [0] - 置为 1 表示数据丢失计数字段有效。此位被置为 1。Bit [1-15] - 保留 |
| 数据丢失计数 | 4 | 6 | 一个单调递增计数器,每当 NVDIMM 设备未能将数据保存和/或刷新到持久介质时,该计数器就会递增。这也包括任何未通过其他体系结构定义方式通知给 OSPM 的数据损坏或数据丢失。该计数器旨在供 OSPM 与其先前保存的值进行比较,以判断是否可能发生灾难性数据丢失。例如,由于数据丢失计数器是单调递增的,如果在原始 OSPM 关机和再次引导之间,该机器上曾引导过另一个 OSPM,则 OSPM 可以检测到数据丢失。 |
| 保留 | 54 | 10 | 保留 |
9.20.8.3. _NIC(获取 NVDIMM 健康错误注入能力)
此方法报告平台支持的健康错误注入能力。表 9-320 中提到的健康错误与 _NCH 方法中提到的相同。
参数:
无
返回值:
见下表 9.41。
表 9.41 _NIC 输出缓冲区
| 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 状态 | 2 | 0 | 见表 9.38 |
| 扩展状态 | 2 | 2 | 保留 |
| 健康错误注入能力 | 4 | 4 | 如果相应的健康错误注入受支持,则对应位被置为 1,否则该位被置为 0:Bit [0] - 需要维护 Bit [1] - 性能下降 Bits [2-7] - 保留 Bit [8] - 断电情况下写入持久性丢失 Bit [9] - 脱机场景下写入持久性丢失 Bit [10] - 写入持久性即将丢失 Bit [11-15] - 保留 Bit [16] - 断电情况下全部数据丢失 Bit [17] - 脱机场景下全部数据丢失 Bit [18] - 全部数据即将丢失 Bits [19-31] - 保留 |
| 总体健康状态属性能力 | 4 | 8 | Bit [0] - 永久性健康状态。如果可以注入永久性健康错误,则该位被置为 1,否则该位被置为 0。Bit [1-31] - 保留 |
| 保留 | 52 | 12 |
9.20.8.4. _NIH(NVDIMM 注入/清除健康错误)
此方法有两种模式:注入模式和清除模式。OSPM 仅应在确认 NVDIMM 设备没有真实健康错误之后,才使用此方法进行健康错误注入。
在注入模式下,OSPM 可以请求平台:
注入一个或多个健康错误
设置一个或多个“总体健康状态属性”
OSPM 可以在一次调用中请求上述项目中的任意一个或两者。除非错误被清除,否则平台应在随后对此方法的调用中累积已注入的错误和属性。
如果平台能够注入至少一个错误或设置至少一个属性,则平台应在支持的情况下发送 NVDIMM 设备健康事件通知(见表 5.163)。OSPM 可以调用 _NCH(见表 9.39),平台应在返回缓冲区中报告当前已注入的错误和属性。
如果平台只能注入 OSPM 请求错误中的一个子集,或者只能设置 OSPM 请求属性中的一个子集,则平台应返回一个输出缓冲区,其中 Status 设为 6(见表 9.38),Extended Status 设为 1(见表 9.43)。此时,OSPM 可以调用 _NIG 方法(见第 9.20.8.5 节)以获取当前已注入的错误。如果 OPSM 请求注入已被注入的错误,则平台应返回成功。如果 OSPM 请求注入某个错误或设置某个不受方法 _NIC 支持的属性,则该方法应返回一个输出缓冲区,其中 Status 设为 2(见表 9.38)。
注入错误对方法 _NCH 报告的字段、NVDIMM Region Mapping Structure 的 NVDIMM State Flags(见第 5.2.25.3 节)以及复位后由 NVDIMM 设备方法 _NBS 报告的字段(见第 9.20.8.2 节)的影响由具体实现决定。
在清除模式下,OSPM 可以请求平台:
清除一个或多个当前已注入的错误
清除当前已注入错误的一个或多个“总体健康状态属性”
OSPM 可以在一次调用中请求上述项目中的任意一项或两项。
如果平台能够清除至少一个错误或一个属性,则如果支持,它应发送 NVDIMM 设备健康事件通知(见表 5.163)。OSPM 可以调用 _NCH(见表 9.39),平台应在返回缓冲区中报告任何剩余的已注入错误及其属性。
如果平台只能清除 OSPM 请求错误和属性中的一个子集,则平台应返回一个输出缓冲区,其中 Status 设为 6(见表 9.38),Extended Status 设为 1(见:numref:nih-output-buffer)。此时,OSPM 可以调用 _NIG 方法(见第 9.20.8.5 节)以获取当前已注入的错误。如果 OPSM 请求清除当前未注入的错误,或者请求清除当前未设置的属性,则平台应返回成功。如果 OSPM 请求清除某个不受方法 _NIC 支持的错误或清除某个不受方法 _NIC 支持的属性,则此方法应返回一个输出缓冲区,其中 Status 设为 2(见表 9.38)。
健康错误注入的一种实现方式是在固件级别进行仿真,而不在真实硬件中注入任何错误。
参数:
表 9.42 _NIH 输入缓冲区
| 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| Mode | 1 | 0 | 0 - 保留 1 - 注入错误 2 - 清除错误 3 - 255 - 保留 |
| Reserved | 3 | 1 | 保留 |
| Overall Health Status Errors | 4 | 4 | 这些位用于注入/清除由 _NIC 方法报告的健康错误(见第 9.20.8.4 节)。如果 Mode 设为 1,则将某一位设为 1 以注入相应错误。OSPM 可以将一个或多个错误位设为 1。如果 Mode 设为 2,则将某一位设为 1 以清除相应错误。OSPM 可以将一个或多个错误位设为 1(见下文)。位 [0] - 需要维护 位 [1] - 性能下降 位 [2-7] - 保留 位 [8] - 断电情况下写持久性丢失 位 [9] - 离线情况下写持久性丢失 位 [10] - 写持久性即将丢失 位 [11-15] - 保留 位 [16] - 断电情况下所有数据丢失 位 [17] - 离线情况下所有数据丢失 位 [18] - 所有数据即将丢失 位 [19-31] - 保留 |
| Overall Health Status Attributes | 4 | 8 | 位 [0] - 永久健康状况。如果 Mode 设为 1,则将该位置为 1 以将健康错误注入为永久错误,否则该位设为 0。如果 Mode 设为 2,则将该位置为 1 以清除已注入错误的“永久健康状况”。位 [1-31] - 保留 |
| Reserved | 52 | 12 | 保留 |
返回值:
表 9.43 _NIH 输出缓冲区
| 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| Status | 2 | 0 | 设置 :ref: nvdimm-device-method-return-status-code |
| Extended Status | 2 | 2 | 0 - 保留 1 - 如果 Mode 为 1,则仅注入了请求错误中的一个子集,或者仅设置了请求属性中的一个子集。如果 Mode 为 2,则仅清除了请求错误中的一个子集,或者仅清除了请求属性中的一个子集。2 - FFFFh 保留 |
9.20.8.5. _NIG(获取 NVDIMM 注入健康错误状态)
此方法报告当前处于活动状态的健康错误及其错误属性,这些错误和属性由 NVDIMM 设备方法 _NIH 注入。
参数:
无
返回值:
表 9.44 _NIG 输出缓冲区
| 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| Status | 2 | 0 | 见 NVDIMM 设备方法返回状态码 |
| Extended Status | 2 | 2 | 保留 |
| Validation Flags | 2 | 4 | 位 [0] - 设为 1 以指示 Injected Overall Health Status Flags 字段有效。此位设为 1。位 [1] - 设为 1 以指示 Injected Errors 的 Overall Health Status Attributes 字段有效。位 [2-15] - 保留 |
| Injected Overall Health Status Errors | 4 | 6 | 如果某一位设为 1,则表示相应错误当前已被注入:位 [0] - 需要维护 位 [1] - 性能下降 位 [2-7] - 保留 位 [8] - 断电情况下写持久性丢失 位 [9] - 离线情况下写持久性丢失 位 [10] - 写持久性即将丢失 位 [11-15] - 保留 位 [16] - 断电情况下所有数据丢失 位 [17] - 离线情况下所有数据丢失 位 [18] - 所有数据即将丢失 位 [19-31] - 保留 |
| Overall Health Status Attributes of Injected Errors | 4 | 10 | 位 [0] - 永久健康状况。将该位置为 1 以指示已注入的错误是永久健康错误,否则该位设为 0。位 [1-31] - 保留 |
| Reserved | 50 | 14 | 保留 |