管理命令集之一


本文属于《 NVMe协议基础系列教程》之一,欢迎查看其它文章。

1 命令格式回顾

在前面的章节,我们介绍过,关于NVMe命令和完成消息,通用格式的定义。

  • 命令

NVMe的命令(64Byte),按如下结构,进行组织:
在这里插入图片描述
其中,DW10 ~ DW15为特定于具体命令的字段,本章节会描述这些字段。
对于所有Admin命令,DW14和DW15是特定于I/O命令集的。

  • 完成消息

NVMe的完成消息(16Byte),按如下结构,进行组织:
在这里插入图片描述
其中,DW0为特定于具体命令的字段,本章节也会描述该字段。

2 操作码定义

管理命令集(Admin Command Set),定义了可以提交到Admin Submission Queue的命令,这些命令以操作码(Opcode)的形式,进行编码,如下表所示:
在这里插入图片描述
在这里插入图片描述
注意:

  • O/M定义:O = 可选,M = 强制
  • 未列出的操作码被保留

在命令的“Dword 0”中Opcode字段(07:00),定义了8位的操作码,其值如上表所示,主要分为三个部分:

  • 00 ~ 11h,命令主要负责I/O Queue与Firmware等管理工作。
  • 80 ~ BFh,特定于I/O命令集。
  • C0 ~ FFh,特定于供应商的。

接下来,陆续介绍,各个命令的字段组成,及其对应完成消息的字段组成。

3 Abort command

Abort command,用于中止之前提交到Admin Submission Queue或I/O Submission Queue的特定命令。
Abort command是尽力执行的命令;要中止的命令可能,已经完成、当前正在执行或正在深度队列中。当没有找到要中止的命令时,控制器选择完成该命令,它是特定于实现的。

主机软件可能有多个未完成的Abort command,受Identify Controller Data Structure中Abort Command Limit字段的约束。

Abort command使用Command Dword 10字段,所有其他字段都是保留的。

Abort – Command Dword 10
BitDescription
31:16Command Identifier (CID):表示要中止的命令的命令标识符,也就是被终止命令的CDW0.CID字段值。
15:00Submission Queue Identifier (SQID):表示要中止的命令所在的Submission Queue标识符。

3.1 Command Completion

如果Admin命令已完成,则Completion Queue条目完成消息),将被添加到Admin Completion Queue。

完成消息的Dword 0,表示命令是否被中止。

  • 如果命令被成功中止,那么Dword 0的位0,清除为“0”。
  • 如果命令没有被中止,那么Dword 0的位0,设置为“1”。

完成消息,可以具备“Command Specific Status”类型的状态码,状态码具体值,如下表所示:

Abort – Command Specific Status Values
ValueDescription
3hAbort Command Limit Exceeded:并发执行Abort命令的数量,超过了Identify Controller Data Structure中指定的限制。

4 Asynchronous Event Request command

异步事件(Asynchronous Event),用于在发生这些事件时,通知主机软件有关状态、错误和健康状况信息。为了使控制器能够异步上报事件,主机软件需要向控制器提交一个或多个Asynchronous Even Request命令。控制器通过完成Asynchronous Even Request命令,向主机指定一个事件。主机软件应该预料到,控制器可能不会立即执行命令;当有事件需要报告时,该命令应该被完成。
在这里插入图片描述
Asynchronous Even Request命令由主机软件提交,用于启用控制器异步事件上报。该命令没有超时时间。当有异步事件要报告给主机时,控制器为该命令,提交一个Completion Queue条目。当控制器复位时,如果Asynchronous Even Request命令未完成,则中止该命令。

Asynchronous Even Request命令,其DW10 ~ DW15无特定含义,均为保留。

主机软件可以提交多个Asynchronous Even Request命令,以减少事件报告的延迟。

同时执行的Asynchronous Even Request命令的总数,受Identify Controller Data Structure中指定的Asynchronous Event Request Limit限制。

异步事件,按事件类型分组。Asynchronous Even Request命令的完成消息的Dword 0中,显示了事件类型信息。当控制器为一个未完成的Asynchronous Even Request命令提交一个Completion Queue条目,从而报告一个异步事件时,该事件类型的后续事件,被控制器自动屏蔽,直到主机清除该事件。

通过Get Log Page命令读取与事件相关的日志页面,来清除该事件。

定义了下列事件类型:

  • Error event:指示与特定命令无关的一般错误。为了清除此事件,主机软件使用Get Log Page命令读取错误信息日志。
  • SMART / Health Status event:表示SMART或Health状态事件。要清除此事件,主机软件使用Get Log Page读取SMART/Health信息日志。触发异步事件的SMART / Health条件,可以使用Set Features命令在Asynchronous Even Configuration特性中配置。
  • I/O Command Set events:I/O命令集定义的事件。
    NVM Command Set Events:Reservation Log Page Available event,表示一个或多个Reservation Notification日志页面可用。为了清除此事件,主机软件使用Get Log Page命令读取Reservation Notification日志页面。
  • Vendor Specific event:表示厂商特定事件。要清除此事件,主机软件使用Get Log Page命令读取指定供应商特定的日志页面。

当控制器需要报告一个事件,但没有未完成的Asynchronous Event Request命令时,控制器将事件排队到控制器内部,并在接收到Asynchronous Event Request命令时报告它。

4.1 Command Completion

如果有异步事件要报告给主机,则将Completion Queue条目发送到Admin Completion Queue。

Completion Queue条目,可以具备“Command Specific Status”类型的状态码,状态码具体值,如下表所示:

Status Code – Command Specific Status Values
ValueDescription
5hAsynchronous Event Request Limit Exceeded:并发执行的异步事件请求命令的数量,已经超过限制。

Completion Queue条目的Dword 0,包含关于异步事件的信息。Dword 0定义,如下表所示:

Asynchronous Event Request – Completion Queue Entry Dword 0
BitDescription
31:24保留
23:16Associated Log Page:表示异步事件的日志页面。
该日志页需要被主机读取以清除事件。
15:08Asynchronous Event Information:有关异步事件的详细信息,请参见下表。
07:03保留
02:00Asynchronous Event Type:表示异步事件的类型。
在这里插入图片描述
Asynchronous Event Information字段中,提供了有关该事件的更具体信息。

Error Status类型的异步事件信息(Asynchronous Event Information字段),取值情况,如下表所示:

Asynchronous Event Information – Error Status

在这里插入图片描述
SMART / Health Status类型的异步事件信息(Asynchronous Event Information字段),取值情况,如下表所示:

Asynchronous Event Information – SMART / Health Status

在这里插入图片描述
NVM(I/O) Command Set Specific Status类型的异步事件信息(Asynchronous Event Information字段),取值情况,如下表所示:

Asynchronous Event Information – NVM Command Set Specific Status

在这里插入图片描述


参考文档:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百里杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值