nvme1.3 学习笔记 4 data struct-2

4.8 Namespace List

图37定义了一个有序的Namespace IDs的列表,没有使用的字段为0。

图37:Namespace List Format

Bytes

Description

3:0

Identifier 0:这一字段包含了列表中最小的Namespace ID或者当列表为空时为0

7:4

Identifier 1:这一字段包含了第二小的NS ID,或者当只有小于两个的Identify时,此字段为0

。。。

。。。

(N*4+3):(N*4)

Identifier N:这一字段包含了第N+1小的NSID,或者当只有小于N个Identify时,此字段为0

4.9 Controller List

图38定义了一个Controller列表,是按照升序顺序排列的Controller IDs列表,Controller ID在图11的78:79字节定义,未使用的部分为0。

图38:Controller List Format

Bytes

Description

1:0

Nember of Identifiers:这一字段包含了Controller的entries 列表。可以包含到2047个id

3:2

Identifier 0:这一字段包含了nvme系统中的第一个独一无二的

5::4

 

….

(n*2)``

Identifier N:

4.10 Fused Operaation

Fused操作使能了两条简单命令之间的混合操作,这个特性的可选的;图111的Identify Controller data struct决定了是否支持此特性。在一个Fused操作中,要求如下:

·命令应该按照原子单位的顺序执行。Controller应该表现的在两条命令之间没有其他命令运行。

·两条命令中的任何一条发生错误此操作都会终止,如果第一条命令发生错误,则第二条命令应当被Abort。如果第二条命令发生错误,那么第一条命令的完成状态是根据序列来的。

·两条命令使用的LBA Range应该是相同的。如果LBA Range不匹配,那么这个命令应当被Abort,Status应该是Invalid Field in Command。

·命令应该被插入到相同的SQ中,如果第一条命令在SQ的最后一条,那么第二条命令应该回到SQ的开始。

·如果Host想要Abort Fuse操作,那么Host应该为每一条命令都发送一个Abort。

·Controller应该回复命令的每一个CQ。

图10中的命令的Dword0决定了是否是一个fuse操作,是第一条还是第二条命令。

4.11 Command Arbitration

对于基于PCIe的NVMe来说,当SQ Tail Doorbell被Host写入一个Tail Pointer去告知一个新的SQ Entry被放入到SQ中时,一个命令应该被应用到Controller。

当一条命令访问修改Controller或者namespace状态时,表示这条命令正在被处理。

当一个命令相应的CQ Entry被发送到CQ时,代表这条命令被完成了。完成后,所有的被此条命令修改的Controller状态和Namespace状态对于所有随后的命令来说都是可见的。

接下来要处理的命令已经被传输到Controller中并且Controller已经做好处理的准备。Controller应该在每个SQ中选择要执行的命令。包含一个fused操作的命令应该被Controller一起处理。Controller可以按照任何顺序去选择处理候补命令,但是候补命令处理完成的顺序未必就是开始处理的顺序。

仲裁机制用来决定从哪一个SQ中获取一个要处理的候补命令。一旦使用仲裁选择了SQ,仲裁突发设置决定了Controller在下次仲裁发生前可以从该SQ开始处理的命令的最大数量。

Fused操作可能被Controller当做一条或者两条命令处理。

所有Controller都应该支持Round Robin仲裁机制。Controller可以实现带有紧急优先级的Weighted Round Robin仲裁机制或者厂商自定义的仲裁机制。Controller中的Controller Capabilities Register(CC.AMS)寄存器表明了Controller支持的仲裁机制。

为了更有效的利用non-volatile memory,controller经常并行处理来自一个SQ的多条命令。对于那些使用了带有紧急优先级的Weighted Round Robin或者Round Robin机制,Host可能会配置一个仲裁突发设置。仲裁突发设置表明了可以再同一时间内在一个特别的SQ中运行的命令数量。建议Host将仲裁突发机制配置的尽量贴合Controller的推荐值(在图111中的Identify Controller Data Struct中的Arbitration Burst位指定),考虑延时需求请参见5.21.1.1节。

4.11.1 Round Robin Arbitration

如果Controller实现了RR仲裁机制,包括ASQ在内的所有SQ都应该实现RR仲裁。在这种情况下,所有的SQ都被赋予相同的优先级。Controller可以根据仲裁突发设置在每个SQ中选择多个命令进行处理。

图39:Round Robin Arbitration

4.11.2 Weighted Round Robin with Urgent Priority Class Arbitration

在WRR仲裁机制中,有三个绝对优先级(Strict Priority)和三个WRR优先级。如果SQ-A有一个比SQ-B高的绝对优先级,那么在SQ-A所有的候补命令都应该比SQ-B中的候补命令早做处理。

绝对优先级最高的是Admin Class,包括了申请到Admin SQ的任何命令,这种的优先级代表了这个SQ的命令总是优先于其他SQ的命令被处理。

绝对优先级第二高的是Urgent Class。任何在应用WRR优先级之前,被应用此优先级的I/O SQ都将在Admin SQ申请完毕之后被申请。Host应该谨慎的将任何SQ分配为Urgent Class优先级,由于Urgent优先级的SQ和Not Urgent优先级的SQ之间没有公平的协议,所以这可能会导致正在WRR优先级的SQ遭到中断。

绝对优先级中最低的是WRR Class(加权循环优先级)。这种类型包含了三种加权轮询优先级(High,Medium,Low),他们使用加权轮询仲裁共享剩余的带宽。

Host通过Set Feature命令设置High,Medium,Low的加权权重。如果多个SQ的WRR等级相同,那么他们之间使用RR仲裁。每轮每个SQ中可能开始处理的候选命令的数量,可以由仲裁突发设置,也可以是剩余WRR积分,以较小的值为准。

图40:Weighted Round Robin with Urgent Priority Class Arbitration

4.11.3 Vendor Specific Arbitration

长商可以选择自己实现一种仲裁机制。

 

5 Admin Command Set

Admin Command Set说明了可以提交到Admin SQ中的命令。

Admin SQ Entry的通用的结构定义和字段在第4.2节中说明了。Admmin CQ Entry的通用结构和字段在第4.6节中说明。本节说明的是SQE和CQE中的特定于Admin命令的结构和字段(例如:SQE中的DW10-15和CQE中的DW0)。

对于所有的Admin命令,DW14和DW15只是I/O 命令用到了。

Admin命令不应该受到I/O队列状态的影响(例如:I/O CQ满了但是不应当对Delete IO SQ造成延迟或者停止)。

图41:Opcodes for Admin Commands

Opcode by field

Combined

Opcede

O/M

Namespace

Identifier

Used

Command

(07)

(06:02)

(01:00)

Geneic

Command

Function

Data

Transfer

0b

000 00b

00b

00h

M

No

Delete_IO_Submission_Queue

0b

000 00b

01b

01h

M

No

Create_IO_Submission_Queue

0b

000 00b

10b

02h

M

Yes

Get_Log_Page

0b

000 01b

00b

04h

M

No

Delete_IO_Completion_Queue

0b

000 01b

01b

05h

M

No

Create_IO_Completion_Queue

0b

000 01b

10b

06h

M

Yes

Identify

0b

000 10b

00b

08h

M

No

Abort

0b

000 10b

01b

09h

M

Yes

Set_Features

0b

000 10b

10b

0Ah

M

Yes

Get_Features

0b

000 11b

00b

0Ch

M

No

Asynchronous_Event_Request

0b

000 11b

01b

0Dh

O

Yes

Namespace Management

0b

001 00b

00b

10h

O

No

Firmware_Commit

0b

001 00b

01b

11h

O

No

Firmware_Image_Download

0b

001 01b

00b

14h

O

Yes

Device Self-test

0b

001 01b

01b

15h

O

Yes6

Namespace Attachment

0b

001 10b

00b

18h

NOTE 5

No

Keep Alive

0b

001 10b

01b

19h

O

Yes7

Directive Send

0b

001 10b

10b

1Ah

O

Yes7

Directive Receive

0b

001 11b

00b

1Ch

O

No

Virtualization Management

0b

001 11b

01b

1Dh

O

No

NVMe-MI Send

0b

001 11b

10b

1Eh

O

No

NVMe-MI Receive

0b

111 11b

00b

7Ch

O

No

Doorbell Buffer Config

0b

111 11b

11b

7Fh

O

Refer to the NVMe over Fabrics specification.

I/O Command Set Specific

1b

n/a

NOTE 4

80h – BFh

O

I/O Command Set specific

Vendor Specific

1b

na

NOTE 4

C0h – FFh

O

Vendor specific

NOTES:

1. O/M 定义:O可选,M强制

2. Opcodes:没在此表中的Opcode应当是reserved的.

3. 一个命令的子集使用了Namespace Identify字段(CDW1.NSID)。如果使用了NSID字段,这一字段应该支持值FFFFFFFFh,除了脚注6所阐述的外。如果不使用此字段,则此字段应该被清0,参见图11。

4. Data Transfer代表了数据传输的方向。命令所有选项都应该按照指定方式传输数据,或者不传输数据。所有命令,包括厂商自定义命令,都应该按照以下约定:00b = 没有数据传输;01b = Host到Controller;10b = Controller到Host;11b = 双向传输。

5. 对于NVMe over PCIe来说,Keep Alive 命令时可选的。

6. 这些命令不支持Namespace Identify字段(CSW1.NSID),应该被设置为FFFFFFFFh。

7. Support for the Namespace Identifier field set to FFFFFFFFh is dependant on the Directive Operation (refer to section 9).

 

              

图42定义了特定于NVM 命令集的Admin命令

图42:Opcodes for Admin Commands-NVM Command Set Specific

Opcode

(07h)

Opcode

(06:02)

Opcode

(01:00)

Opcode

O/M

Namespace Identifier

Used

Command

Generic

Command

Function

Data

Transfer

1b

000 00b

00b

80h

O

Yes

Format NVM

1b

000 00b

01b

81h

O

NOTE 5

Security Send

1b

000 00b

10b

82h

O

NOTE 5

Security Receive

1b

000 01b

00b

84h

O

No

Sanitize

NOTES:

1. O/M definition: O = Optional, M = Mandatory.

2. Opcodes not listed are reserved.

3. A subset of commands uses the Namespace Identifier field (CDW1.NSID). If the Namespace Identifier field is used, then unless otherwise specified, the value FFFFFFFFh is supported in this field. When this field is not used, the field is cleared to 0h as described in Figure 11.

4. Indicates the data transfer direction of the command. All options to the command shall transfer data as specified or transfer no data. All commands, including vendor specific commands, shall follow this convention: 00b = no data transfer; 01b = host to controller; 10b = controller to host; 11b = bidirectional.

5. The use of the Namespace Identifier is Security Protocol specific.

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值