5.2 异步事件请求命令

异步事件用于当状态、错误、健康信息这些事件发生时通知主机软件。为了使能这个controller报告的异步事件,主机软件需要提交一个或多个异步事件请求命令到controller。controller通过完成一个异步事件请求命令到主机来详细描述一个事件。主机软件应当期望controller可能不是立即执行这个命令,当有一个事件需要报告给主机时这种命令才会被完成。

异步事件请求命令由主机软件提交来使能从controller的异步事件报告。这种命令不会超时。当有一个异步事件时controller为这个命令推送一个CQE报告给主机。如果当controller被重启时有异步事件请求命令待处理,那么这些命令被abort,不回复CQE。

所有特定于命令的字段都被保留。

主机软件可以提交多个异步事件请求命令来减小报告时延。并存待处理的异步事件请求命令的总数是有限的,限制由Identify Controller数据结构中的Asynchronous Event Request Limit指定,请参照Figure 247。

【附加:AERL字段占用一个字节,为便于查看,从Figure 247的Identify Controller data structure中截取出对应的字段如下】

异步事件们被分组到不同的事件类型中,事件类型信息在CQE的Dword 0中为异步事件请求命令做标识。当Controller为一个待处理异步事件请求命令发送CQE,这样报告一个异步事件,在主机清除这个事件之前,本事件类型的随后的事件被自动的屏蔽。主机清理事件的方式是通过使用Get Log Page命令读对应事件的log page(参考第5.14章节)。

已定义的事件类型如下:

a)Error event:表明一个非特定于此命令的常规错误(参考Figure 145)。主机软件使用Get Log Page命令且Retain Asynchronous Event位设置为0读取这个Error Information log(参考第5.14.1.1章节)来清除这个事件。

b)SMART/Health Status event:表明一个SMART或Health状态事件(参考Figure146)。主机软件使用Get Log Page命令且Retain Asynchronous Event位设置为0读取这个SMART/Health Information log(参考第5.14.1.2章节)来清除这个事件。触发异步事件的条件是可以在Asynchronous Event Configuration特性中使用Set Feature命令来配置的(参考5.21章节)。

c)Notice event:表明一个常规事件(参考Figure 147)。参照Figure 147中的描述,主机软件读取适当的日志页来清除这个事件。触发异步事件的条件可以在Asynchonous Event Configuration特性中使用Set Feature命令(参考第5.21.1.11章节)来配置。这些notice事件包括:

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;

d)NVM Command Set Specific event:事件是由I/O命令集来定义的:

A. Reservation Log Page Available event:预订日志页可用事件表明一个或多个Reservation Notification日志页(参考第5.14.1.16.1章节)是空闲可用的。主机软件使用Get Log Page命令且Retain Asynchronous Event位设置为0读取这个Reservation Notification日志页来清除此事件;

B. Sanitize Operation Completed event:无害化【让介质上数据毁尸灭迹无法恢复】操作完成事件表明无害化操作已经完成(包括任意相关联的附加的介质修改,参考Figure 247中的No-Deallocate Modifies Media After Sanitize 字段),在Sanitize Status日志页(参考第5.14.1.16.2)中所有LBAs不存在意外未释放和状态可用的情况。主机软件使用Get Log Page命令且Retain Asynchronous Event位设为0读取Sanitize Status日志页来清除此事件;

C. Sanitize Operation Completed With Unexpected Deallocation event:表明无害化操作已经完成,在Sanitize Status日志页中,对于所有LBAs和状态可用,存在意外的解除分配。主机软件使用Get Log Page命令且Retain Asynchronous Event位设为0读取Sanitize Status日志页来清除此事件。

e)Vendor Specific event:厂商特定时间表明一个特定厂商的事件。主机软件使用Get Log Page命令且设置Retain Asynchronous Event位为0读取这个表明特定厂商日志页来清除此事件。

如果控制器支持Sanitize Config特性,则应该支持Sanitize Operation Completed With Unexpected Deallocation异步事件。

异步事件被报告是因为有新条目加进一个日志页(例如Error Information日志)或状态更新(例如SMART/Health日志中的状态)。一个状态变化或许永久的(例如介质变成了只读)或短暂的(例如某个时间周期温度达到或超过一个临界值)。发布另一个异步事件请求命令之前,主机软件应该更改这个事件临界值或屏蔽这个事件,以避免异步事件重复的报告。

【1-1】关于异步事件上报已经被使能,但没有异步事件命令待处理的情况,如果事件发生,Controller应该保留该异步事件类型的事件信息,并将该信息用作对接收到的下一个异步事件请求命令的相应。【1-2】如果在接收到异步事件请求命令之前一个Get Log Page命令清除了此事件或者发生了掉电关机情况,那么通知不发送。【2-1】如果相同类型的多个事件且对异步事件请求命令具有完全相同应答的事件发生,那么这些事件可以作为一个单个应答给异步事件请求命令。【2-2】如果多个不同类型的事件产生,那么controller应该保留这些事件的队列,以便在应答后续异步事件请求命令时上报。

5.2.1 Command Completion

如果有异步事件需要报告给主机,就从Admin CQ发送一个CQE。与异步事件请求相关的命令特定状态值定义在Figure 143中。

CQE的Dword 0 包含关于异步事件的信息。CQE的Dword 0的定义在Figure 144 中。

【为了便于直观理解 Figure 144,参考下边SPDK代码截图,左边spdk_nvme_async_event_completion是对CQE的Dword 0 做的按位定义】

下边不论是Figure 145,Figure 146,Figure 147,还是Figure 148中的信息,是用于在Asynchronous Event Information字段域中被返回的,具体依赖于异步事件的类型。

《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(5.2)-- Asynchronous Event Request command的更多相关文章

  1. 2019/1/10 redis学习笔记(二)

    本文不涉及集群搭建操作 关于在lua脚本中操作redis的应用场景 大家都知道redis对于单个集合的操作是原子性的;但是有可能有一种场景是这样.比如说抢红包,现在有十个人抢五份红包,抽象到我们jav ...

  2. 《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(8.8)-- Reservations

    8.8 Reservations 预订 NVMe的reservation预订功能,用于让两个或多个主机能够协调配合的访问共享namespace.使用这些功能的协议和方式超出了本规格说明书的范围.对这些 ...

  3. 《Java核心技术·卷Ⅰ:基础知识(原版10》学习笔记 第5章 继承

    <Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 目录 <Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 5.1 类.超类和子类 5.1 ...

  4. 《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(5.23)-- Format NVM command

    5.23 Format NVM command - NVM Command Set Specific Format NVM命令用于低级格式化NVM媒介.这个命令被host主机使用,来变更LBA数据大小 ...

  5. 《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(1)

    材料说明: 文档<NVM-Express-1_4-2019.06.10-Ratified.pdf>来自于NVMe网站:https://nvmexpress.org/ 笔记目的是学习NVMe ...

  6. 201521123003《Java程序设计》第10周学习笔记

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 1.finally 题目4-2 1.1 截图你的提交结果(出 ...

  7. Jerry Wang从2017年到2019年的自由泳学习笔记

    打腿 把注意力调整到脚部,尽量不要让他打出水面,因为在空气中大腿完全是无用功,但是如果只是脚跟出水一点,倒也没什么关心,但是主观上,要控制一下,如果你听到你的打腿是"咚咚咚咚"这样 ...

  8. 《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(5.21.1.10-加-6.4)Atomic_Operations

    5.21.1.10 Write Atomicity Normal 这个特性控制AWUN和NAWUN参数的操作.设置的属性值在set Feature命令的Dword 11中表明. 如果提交Get Fea ...

  9. 《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(8.20)-- ANA

    8.20 非对称namespace访问报告 8.20.1 非对称namespace访问报告概况 非对称Namespace访问(ANA)在如下场景下产生,基于访问这个namespace的controll ...

随机推荐

  1. 秘钥分割-Shamir秘钥分割门限方案

    精选: 1.问题的提出 2.需求的抽象: 有一个秘钥S,转换成另一种数据数据形式,分配给12个人(s1,s2,.......,s12),使得任意3个人的数据拼凑在一起就可以反向计算出秘钥S. 3.解决 ...

  2. JS高阶编程技巧--compose函数

    先看代码: let fn1 = function (x) { return x + 10; }; let fn2 = function (x) { return x * 10; }; let fn3 ...

  3. CSS中元素的显示模式

     在CSS中,根据元素显示模式的不同元素标签被分为了两类:行内元素(inline-level).块级元素(block-level). 1,首先介绍什么是行内元素,什么又是块级元素? 1.1,行内元素就 ...

  4. java工作流系统jflow表单引擎字段扩展组件介绍

    关键词:工作流快速开发平台  工作流流设计  业务流程管理   asp.net 开源工作流  bpm工作流系统  java工作流主流框架  自定义工作流引擎 表单设计器  流程设计器 装饰类图片 用于 ...

  5. Android5.0和Android6.0适配

    gradle配置项 compileSdkVersion 用哪个 Android SDK 版本编译你的应用.因此我们强烈推荐总是使用最新的 SDK 进行编译.在现有代码上使用新的编译检查可以获得很多好处 ...

  6. Centos中Redis的下载编译与安装(超详细)

    场景 NoSQL,泛指非关系型的数据库,NoSQL即Not-Only SQL,它可以作为关系型数据库的良好补充.随着互联网web2.0网站的兴起,非关系型的数据库现在成了一个极其热门的新领域,非关系数 ...

  7. 解决Python3下map函数的显示问题

    今天小编就为大家分享一篇解决Python3下map函数的显示问题,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧map函数是Python里面比较重要的函数,设计灵感来自于函数式编程.P ...

  8. 腾讯qlv视频转为MP4格式工具

    本文解决上一篇<优酷爱奇艺视频转换为MP4格式工具>留下的腾讯视频qlv转MP4格式问题,教程都是一步步亲手操作的,每一步都有配图.希望各位老板多转发分享,谢谢! 解压软件.(建议关闭所有 ...

  9. appium 爬取微信的相册内容(不知什么时候能写完)

    # crowl wechat through appium from appium import webdriver from selenium.webdriver.support.ui import ...

  10. 2019kali中文乱码

    1.安装KALI2019.4版本后会出现乱码问题 2.更新国内源,使用vim编辑器修改:vim /etc/apt/sources.list添加 #清华大学 [更新源]    deb https://m ...