一、简介
1.1概述
NVMe协议(以前也叫NVMHCI)接口允许主机软件与非易失性存储器子系统通信。 此接口针对企业和客户端固态驱动器进行了优化,通常作为寄存器级接口连接到PCI Express接口。
1.1.1 NVMe over PCIE 和 NVMe over Fabrics
NVMe 1.3版本除了继承了老版本NVMe over PCIe,同时新增NVMe over Fabrics定义
1.2 范围
协议除了定义了如何与非易失性存储子系统的通信以外,还定义了NVMe子系统的命令集。
1.3 范围之外
协议没有规定存储子系统的具体存储介质以及具体的存储实现。
1.4 操作原理
NVMe协议是以PCIE协议为基础的可扩展性主机控制器接口,专为企业客户设计。接口提供命令提交和完成的交互手段,可支持高达65535条IO队列,每条队列支持64K条命令的并发操作。除此之外,提供许多企业级特性,如端到端保护、增强型错误上报以及虚拟化等。
协议主要特性有:
在命令提交或完成中,不需要提供不可缓存或内存映射的寄存器读取;
命令提交最多只需要一个MMIO的寄存器写;
支持最高65535个IO队列,同时每个队列最高支持64K条命令;
每条IO队列优先级可定义;
完成一个4KB读请求需要64B的命令消耗;
高效和简化的命令集;
支持MSI/MSI-X的中断聚合;
支持多命名空间;
高效支持IO虚拟化架构如SR-IOV;
强大的错误上报机制和管理能力;
支持多路径IO以及命名空间共享;
该规范定义了一组简化的寄存器,其功能包括:
定义了控制器功能;
控制器故障状态(命令状态通过CQ直接处理);
管理队列配置(通过Admin命令处理I / O队列配置);
数量可扩展的提交和完成队列的Doorbell寄存器。
NVM Express控制器与单个PCI功能相关联,其中控制器功能(CAP)寄存器和识别控制器数据结构中表明了整个控制器的功能和设置。
命名空间