数据结构与日志格式 - 第211页
中文深入分析协议:NVM Express® Base Specification, revision 2.0b 第5.16.1.14节持久事件日志报告上下文
一、持久事件日志报告上下文(Persistent Event Log Reporting Context)
持久事件日志报告上下文是由控制器创建的供应商特定信息,用于确定包含在持久事件日志页数据中的信息。例如,持久事件日志报告上下文可以是持久事件日志页数据本身,或者可能包含指向要报告事件的数据结构的指针。
📌 持久事件日志报告上下文的生命周期
-
生命周期的开始:控制器创建报告上下文,以确定哪些事件会包含在日志中。
-
报告上下文的保留:
- 控制器应保留持久事件日志报告上下文,直到满足以下条件之一:
- 控制器处理 Get Log Page 命令,请求持久事件日志页面,并且 Action 字段设置为 02h(即释放上下文)。
- 执行 NVM 子系统重置。
- 执行 控制器级别重置。
-
或者,控制器可以根据供应商的特定时间保留上下文,足够长时间以便主机能够检索持久事件日志页数据。
-
新事件的处理:
- 在报告上下文存在期间发生的持久事件将不会在当前的报告上下文中报告,而是会被记录在日志中。
📌 释放报告上下文
- 主机的操作:
-
主机在读取完持久事件日志页数据后,应该发出 Get Log Page 命令,并将 Action 字段设置为 02h(释放上下文)。
-
确保日志完整性:
- 如果 Persistent Event Log 未通过单个 Get Log Page 命令读取,则主机软件应在建立报告上下文后、读取其余日志之前,先读取持久事件日志页头部的 Generation Number 字段。
- 读取完整个日志后,主机软件应再次读取 Generation Number 字段。
- 如果 Generation Number 字段的值发生变化:
- 表示在读取日志时报告上下文可能丢失;
- 读取的持久事件日志内容可能无效;
- 主机软件应该重新读取日志。
📌 持久事件日志的管理
- 事件的记录:
- 持久事件日志页面用于记录与系统相关的重要事件,提供控制器或 NVM 子系统的状态更新。
-
所有支持的事件都应记录在该日志页面内,确保即使发生重启或电源故障,事件信息仍然可用。
-
事件的删除与抑制:
- 为防止日志过大,控制器可能会删除一些较不重要的事件信息,尤其是当日志的容量接近最大支持的容量时。
-
如果某个事件发生的频率过高(超过厂商定义的阈值),控制器可能会抑制该事件的继续记录。
-
上下文的管理:
- 控制器通过 报告上下文 来管理日志数据的读取,确保事件记录的完整性和一致性。