Nvme Spec 第一章节学习

@Nvme Express Base Specification

第一章 简介

1.1概述

NVM ExpressTM(NVMeTM)接口允许主机软件与非易失性存储器子系统通信。
此接口针对企业和客户端固态驱动器进行了优化,通常作为寄存器级接口连接到PCI Express接口。
注:在开发过程中,本规范被称为企业NVMHCI。然而,在完成之前,该名称已修改为NVM Express基本规范。此接口的目标是在客户端和企业系统中使用。

1.1.1 NVMe over PCIE 和 NVMe over Fabrics

NVM Express基本规范修订版1.4和之前的修订版定义了一个寄存器级接口,用于主机软件通过PCI Express与非易失性存储器子系统通信(PCIeTM上的NVMeTM)。
NVMeTM over Fabrics规范定义了一个协议接口和NVMe接口的相关扩展,使其能够通过其他互连(例如以太网、InfiniBand™, 光纤通道)。结构上的NVMe规范对每个NVMe传输都有一个NVMe传输绑定(在该规范中或通过引用)。
在本规范中,可以将需求/功能记录为特定于结构上的NVMe实现或特定的NVMe传输绑定。
此外,PCIe上的NVMe和Fabrics上的NVMe实现系统对功能和特性的支持要求可能有所不同。

1.2范围

该规范定义了用于与NVM子系统中的控制器通信的寄存器接口。它还定义了控制器可能支持的标准命令集。有三种类型的控制器具有不同的功能:
a) I/O controllers;
b) discovery controllers; and
c) administrative controllers
在本文档中,当可根据上下文确定适用的控制器类型时,通常使用通用术语控制器,而不是枚举特定的控制器类型。

1.3 范围之外

寄存器接口和命令集是与NVM的任何使用模型分开指定的,而是仅指定到NVM子系统的通信接口。因此,本规范没有规定非易失性存储器系统是否用作固态驱动器、主存储器、高速缓冲存储器、备份存储器、冗余存储器等。具体的使用型号不在范围内,是可选的,并且未获得许可。该接口是在任何非易失性内存管理(如损耗均衡)之上指定的。对诸如NAND之类的NVM技术的擦除和其他管理任务进行了抽象。
本规范不包含任何关于缓存算法或技术的信息。
本说明书中提及的其他已发布规范的实现或使用,即使需要符合规范,也不在本规范的范围内(例如PCI、PCI Express和PCI-X)。

1.4 操作原理

NVM Express可扩展接口旨在满足使用基于PCI Express的固态驱动器或结构连接设备的企业和客户端系统的需求。该接口提供了优化的命令提交和完成路径。它支持并行操作,支持最多65535个I/O队列,每个I/O队列最多有64Ki-1个未完成的命令。
此外,还增加了对许多企业功能的支持,如端到端数据保护(与SCSI保护信息,通常称为T10 DIF和SNIA DIX标准)、增强的错误报告和虚拟化。
接口具有以下关键属性:
*  不需要在命令提交或完成路径中读取不可缓存/MIO寄存器;
*  在命令提交路径中,最多需要一个MMIO寄存器写入;
* 支持最大65535个IO队列,每个IO队列支持65535个未完成的command;
* 每个队列的优先级具有定义明确的仲裁机制;
* 完成4KiB读取请求的所有信息都包含在64B的命令本身中,确保了高效的小型IO操作;
* 高效精简的指令集;
* 支持MSI/MSI-X和中断聚合;
* 支持多namespaces;
* 支持SR-IOV等I/O虚拟化体系结构;
* 错误报告和管理能力
* 支持多通路IO和namespace共享。
该规范定义了一组精简的寄存器,包括以下功能:
* 显示controller的capabilities。
* 控制器故障状态(直接通过CQ处理命令状态)
* admin 队列设置,io 队列设置是通过admin cmd实现;
* Doorbell registers针对提交和完成队列的数量。
NVM Express控制器与单个PCI功能相关联。适用于整个控制器的功能和设置显示在控制器功能(CAP)寄存器和标识控制器数据结构中。
namespace是可以格式化为逻辑块的大量非易失性存储器。一个nvme express 控制器可以支持使用多namespace 通过引用namespace ID。namespace 可以被创建或者删除通过使用namespace management和namespace Attachment cmd.Identify namespace 数据结构显示了一个指定的namespace的功能和设置。所有namespace通用的功能和设置由namespace ID FFFFFFFF h的Identify namespace数据结构报告。
Nvm express 接口是基于成对的SQ和CQ的机制。command是通过host 放到一个SQ里面,Completions 是被controller放到一个与之对应的CQ里面。多个SQ可以使用相同的CQ。SQ和CQ是在内存中分配的。
admin SQ和对应CQ是用于controller管理和控制的。(例如:IO SQ和CQ的创建、删除,命令的中断等)。只有admin cmd可以被提交到admin SQ里面。
IO 命令集与IO 队列一起使用。协议定义了IO 命令集名为NVM Comand Set.Host 选择一个IO 命令集对IO 队列使用。Host 创建队列,数量达到控制器支持的最大数。通常创建的命令队列数量是基于系统配置和预期的workload。例如,在一个基于4核处理器的系统上,每个core有一个队列对一避免锁定并确保在合适的处理器core的缓存中创建数据结构。Figure 1 提供了一种队列对机制的图形解释,展示了在SQ与CQ之前1比1的映射。Figure 2展示了一个例子,多个IO SQ在core B上对应同一个CQ。Figure 1和Figure 2都展示了 admin SQ和admin CQ是1比1 对应的。
一个SQ 是一个具有固定大小的环形buffer,是Host用来提交 给controller 执行的命令。Host 更新对应的SQ Tail doorbell寄存器当有一个新的命令需要执行的时候。在controller内部之前的SQ Tail 值会被复写当新的doorbell 寄存器被写的时候。controller 会从SQ中按顺序的取到提交的命令条目并且可以按任意的顺序去执行这些command。每一个SQ条目就是一个command。一个command是64字节。内存中用于数据传输的物理内存位置是使用g Physical Region Page(PRP)和Scatter Gather Lists(SGL)。每个command都包含有2个PRP条目或者一个SGL段落。如果需要两个以上PRP 条目来描述数据缓存区,则提供一个指针指向用来描述PRP 条目的List。如果需要超过一个SGL段落来描述数据缓存区,SGL 段落提供一个指针指向下一个SGL段落。
一个CQ是一个具有固定大小的环形buffer,用来发布完成命令的状态。已完成的命令是由SQ标识符和Host分配的命令标识符组成的唯一标识符。多个SQ可能与一个CQ关联。这个特性可用于单个工作进程通过一个完成队列处理所有命令完成的情况,即使这些command来自不同的SQ。CQ的head 指针会被Host更新,在host处理完最后一个空闲的CQ的完成队列的条目。在完成队列条目中定义了相位标记(P)位,以指示条目是否是在未查阅注册表的情况下新发布的。这使Host能够确认新条目是上一轮还是当前一轮完成通知的一部分发布的。具体地说,在完成队列条目的每一轮中,控制器反转相位标记位。

1.4.1 多通路IO和namespace共享

本章节概述了多通路IO和namespace 共享。多路径I/O指的是单个主机和命名空间之间的两个或多个完全独立的路径,而命名空间共享指的是两个或更多主机使用不同的NVM Express控制器访问公共共享命名空间的能力。

1.4.2 非对称控制器的行为

1.5 约定

硬件应为标记为保留的所有位和寄存器返回“0”,主机软件应写入值为0h的所有保留位和寄存器。
在寄存器章节(即第2节和第3节)内,使用了以下术语和缩写:
	RO 				:只读
	RW				:可读可写
	R/W				:可读可写。读取的值可能不是最后写入的值。
	RWC			:Read/Write ‘1’ to clea
	RWS			:Read/Write ‘1’ to set
	Impl Spec	:控制器可以自由实现
	HwInit			:默认状态取决于NVM Express控制器和系统配置。该值在重置时初始化,例如通过扩展ROM,或者在集成设备的情况下,通过平台BIOS。
	Reset			:此列指示重置后字段的值。
针对一些寄存器字段,它是特定于具体实施的字段是RW、RWC还是RO。这通常显示为RW/RO或RWC/RO,表示如果不支持该功能,则该字段为只读。
当文档中引用寄存器字段时,使用的约定是“寄存器符号.字段符号”。例如,PCI命令寄存器奇偶校验错误响应启用位的名称为CMD.PEE。如果寄存器字段是一个位数组,则该字段被称为“寄存器符号。字段符号(数组偏移到元素)”
基于0的值是一种编号方案,其中数字0h表示1h的值,1h表示2h,2h表示3h等。在该编号方案中,没有表示0h值的方法。
除非另有规定,否则本规范中的值以1为基础(即,数字1h表示1h的值,2h表示2h等)。
值的大小以二进制单位或十进制单位显示。用于表示这些值的符号如图7所示

1.6 定义

1.6.1 admin queue

Admin queue是标识符为0的一对SQ和CQ队列。Admin SQ和相应的CQ是分别用来提交管理命令队列和接受这些管理命令的完成。
Admin SQ是与CQ是一一对应切唯一对应。

1.6.2 administrative controller

一种用于公开允许主机管理NVM子系统的功能的控制器。管理控制器不实现I/O队列,不提供对与非易失性存储器存储介质上的逻辑块相关联的数据或元数据的访问,也不支持连接到管理控制器的命名空间(即,从不存在任何活动NSID)。

1.6.3 arbitration burst

一次可以从使用具有紧急优先级类仲裁的RR或WRR的提交队列启动的最大命令数。

1.6.4 arbitration mechanism

用于确定在启动控制器执行的命令之前选择哪个提交队列的方法。定义了三种仲裁机制,包括循环机制、具有紧急优先级的加权循环机制和特定于供应商的机制

1.6.5 cache

1.6.6 candidate command

1.6.7 command completion

1.6.8 command submission

1.6.9 controller

1.6.10 directive

1.6.11 discovery controller

1.7 Key Word

1.7.1 mandatory

一个关键字,指示本规范定义的要实现的项。

1.7.2 may

1.7.3 optional

描述本规范不要求的功能的关键字。但是,如果实现了规范中定义的任何可选功能,则该功能应按照规范定义的方式实现。

1.7.4 R

1.7.5 reserved

一个关键字,指的是为将来的标准化而保留的位、字节、字、字段和操作码值。它们的使用和解释可以通过本规范或其他规范的未来扩展来指定。保留位、字节、字、字段或寄存器应清除至0h,或根据本规范的未来扩展。收件人不需要检查保留的位、字节、字或字段。命令中定义字段中的保留编码值的接收应作为错误报告。将保留的编码值写入控制器寄存器字段会产生未定义的结果。

1.7.6 shall

1.7.7 should

1.8 Byte, Word, and Dword 关系

你可能感兴趣的:(nvme,ssd,Nvme,Spec)