NVMe1.4b—Asynchronous Event Request命令
Asynchronous Event Request command – NVM Command Set SpecificAsynchronous Event Request 命令简介Command CompletionAsynchronous Event Request 命令简介异步事件用于在发生这些事件时向Host软件通知状态,错误和运行状况信息(status, error, and heal
Asynchronous Event Request command – NVM Command Set Specific
Asynchronous Event Request 命令简介
Asynchronous Event 用于在发生这些事件时通知Host软件以下状态:错误和运行状况信息(status, error, and health information)。为了使controller能够报告异步事件,Host软件需要向controller提交一个或多个Asynchronous Event Request命令(Asynchronous Event Request commands)。controller通过完成“Asynchronous Event Request”命令给Host指定一个事件。Host软件应该期望controller可能不会立即执行命令(异步的事件,不能强求);当一个事件被reported时,代表该命令应完成。
Asynchronous Event Request命令由Host软件提交以此来启用来自controller的异步事件的报告。此命令没有超时。当有异步事件要报告给Host时,controller将为此命令回CQ entry。如果在重置controller时有未完成“Asynchronous Event Request”命令,则这些命令将被abort并且不会返回CQ entry。
All command specific fields are reserved.(不使用任何DW)
Host软件可以提交多个Asynchronous Event Request命令,以减少事件报告延迟。同时在执行的aer命令的总数受在Figure 251的“Identify Controller”数据结构中指定的Asynchronous Event Request Limit的限制。
异步事件以事件类型分类。事件类型信息在Asynchronous Event Request命令的CQ entry的Dword 0中指示。当controller为未完成的Asynchronous Event Request命令回CQ entry并因此报告一个异步事件时,controller会自动屏蔽该事件类型的后续事件,直到Host清除该事件为止。通过使用Get Log Page command读取与该事件关联的log page来清除事件(请参阅第5.14节)。
事件类型:
Error event:与特定命令不相关的常规错误(refer to
Figure 147)。为了清除此事件,Host软件使用“Get Log Page”命令将“Retain Asynchronous Event bit ”清除为“ 0”来读取Error Information log(refer to 5.14.1.1)。
SMART / Health Status event:SMART或运行状况状态事件。为了清除此事件,Host软件使用“Get Log Page ”并将“Retain Asynchronous Event bit ”清除为“ 0”来读取SMART / Health Information log(请参阅5.14.1.2)。可以使用Set Features命令在“Asynchronous Event Configuration”功能中配置触发异步事件的SMART / Health conditions(请参阅5.21节)。
Notice event:常规错误(refer to Figure 149)。为了清除此事件,Host软件如Figure 149的描述去读取相关log page。可以使用Set Features命令在“Asynchronous Event Configuration”功能中配置触发这类异步事件的条件(see section 5.21.1.11)。
这些 notice events包括:
A. Namespace Attribute Changed;
B. Firmware Activation Starting;
C. Telemetry Log Changed;
D. Asymmetric Namespace Access Change;
E. Predictable Latency Event Aggregate Log Change;
F. LBA Status Information Alert; and
G. Endurance Group Event Aggregate Log Page Change;
NVM Command Set Specific events:Events that are defined by an I/O command set:
A. Reservation Log Page Available event(预留日志页面可用事件): 指一个或多个Reservation Notification log pages (refer to section 5.14.1.16.1)可用。为了清除此事件,Host软件使用“Get Log Page”命令将“Retain Asynchronous Event bit ”清除为“ 0”来读取Reservation Notification log page。
B. Sanitize Operation Completed event(清理操作已完成事件): 表明Sanitize 操作以without unexpected deallocation of all logical blocks(refer to section 5.21.1.23) 完成(包括任何相关的附加媒体修改,refer to the No-Deallocate Modifies
Media After Sanitize field in Figure 251),并且Sanitize Status log page是可用状态 (refer to section 5.14.1.16.2)。
为了清除此事件,Host软件使用“ Get Log Page ”命令将“Retain Asynchronous Event bit”清除为“ 0”来读取“Sanitize Status log page”。
C. Sanitize Operation Completed With Unexpected Deallocation event: 表明Sanitize 操作以with unexpected deallocation of all LBAs(refer to section 5.21.1.23) 完成,并且Sanitize Status log page是可用状态 (refer to section 5.14.1.16.2)。
为了清除此事件,Host软件使用“ Get Log Page ”命令将“Retain Asynchronous Event bit”清除为“ 0”来读取“Sanitize Status log page”。
Vendor Specific event: 指示Vendor 特定事件。为了清除此事件,Host软件使用“ Get Log Page ”命令将“Retain Asynchronous Event bit”清除为“ 0”来读取指示的特定于Vendor 的log page。
由于将new entry添加到log page(例如,Error Information
log)或状态更新(例如,status in the SMART / Health log),异步事件被reported。状态更改可能是永久性的(例如,介质已变为只读状态),也可能是瞬态的(例如,温度在一段时间内超过阈值)。Host软件应在发出另一个“Asynchronous Event Request”命令之前修改事件阈值或屏蔽更改瞬态和永久状态的事件,以避免重复报告异步事件。
如果发生了一个需要report 的事件,并且没有未执行的Asynchronous Event Request命令,controller应该保留该异步事件类型的事件信息,并使用该信息作为接收到的下一个Asynchronous Event Request命令的响应。如果Get Log Page命令在接收Asynchronous Event Request命令之前清除事件,或者如果发生掉电,则不发送通知。
如果多个相同类型的事件发生,并且对Asynchronous Event Request命令有相同的响应,那么这些事件可能被报告为对Asynchronous Event Request命令的单个响应,如果多个不同类型的事件发生,那么controller应该保留这些事件的队列,用于报告后续Asynchronous Event Request命令的响应。
Command Completion
如果有异步事件需要报告给Host,一个CQ entry会被添加到ACQ中。与Asynchronous Event Request 有关的Command specific status values在Figure 145中定义。
CQ entry的DW0包含有关异步事件的信息,具体定义如Figure 146中定义。
The information in either Figure 147, Figure 148, Figure 149, or Figure 150 is returned in the Asynchronous
Event Information field, depending on the Asynchronous Event Type.
Asynchronous Event Request command由Host发送,用于让SSD上报Asynchronous Event (异步事件),这个命令是没有timeout的。当SSD上报Asynchronous Event时,会发送CQ给Host。在SSD reset时如果还有未完成的Asynchronous Event Request命令,该命令会被Abort。
Host可以发送多个Asynchronous Event Request command,用于降低SSD上报时的Latency,SSD在Identify Data Structure中会提供信息,告知Host自己同时可支持的Asynchronous Event Request command数量。
如果SSD希望在没有接收到可用的Asynchronous Event Request command时上报Asynchronous Event,需要在接收到Asynchronous Event Request command时发送一个该事件类型的notification给Host。
如果在接收到Asynchronous Event Request command前Get Log Page command已经清除了该Event,或者发生Power off,SSD不会发送Notification。
当SSD上报某种Event并回复CQ时,会自动屏蔽该类型的其他Event,直到Host清除该Event。Host 通过发送Get Log Page command清除Event。
Case1:Asynchronous Event Request Command
NVMe 规定了以下Event Type:
Error Event
SMART/Health Event
Notice Events
I/O Command Set Specification (NVMe Command Set) Events:
Reservation Log Page available Event
Vendor Specific Events
测试步骤:
针对以上每一种Event Type:
Host发送Asynchronous Event Request command
Host创造条件产生该Event;
期望结果:
针对Host 发送的Asynchronous Event Request command,SSD不会立即回复CQ,而是相关Event发生并上报以后才回复CQ;
回复的CQ格式,以及Dword 0中的Event信息描述符合NVMe协议要求;
所有Reserved字段应该填充为0;
Case2: Outstanding Commands Aborted after Reset
测试步骤:
Host发送Asynchronous Event Request command;
对SSD进行Controller Level Reset;
期望结果:
Controller Level Reset后,SSD回复Admin CQ告知Asynchronous Event Request command被Abort;
所有Reserved字段应该填充为0;
Case3: Clearing Events
测试步骤:
针对每一种Event类型
Host创造条件产生该Event;
Host发送Get Log Page Command给SSD以清除该Event;
Host 发送Asynchronous Event Request command;
2秒后,对SSD进行Controller Level Reset清除outstanding 的Asynchronous Event Request command;
期望结果
针对每一个Get Log Page command,SSD正确回复CQ;
针对Host 发送的Asynchronous Event Request command,SSD不会立即回复CQ,在Controller Level Reset以后SSD回复CQ告知Host该命令被Abort;
所有Reserved字段应该填充为0;
Case4:Masking Events
测试步骤:
针对每一种可以被Disable的Event:
Host发送Set Feature Command (Feature ID=0Bh,Asynchronous Event Configuration),禁用该事件;
Host发送Asynchronous Event Request command;
Host创造条件产生该Event;
2秒后,对SSD进行Controller Level Reset清除outstanding 的Asynchronous Event Request command;
期望结果:
SSD正确回复Set Feature Command的CQ;
针对Host 发送的Asynchronous Event Request command,SSD不会立即回复CQ,在Controller Level Reset以后SSD回复CQ告知Host该命令被Abort, 并且在Dword0内不包括该Event的信息;
所有Reserved字段应该填充为0;
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)