NVM(Non-Volatile Memory)翻译过来为非易失存储器,是一类存储器的一般术语总称。而NVMe(Non-Volatile Memory Express)是一个可扩展的主控器芯片接口标准,主要为企业、数据中心以及客户端系统中应用PCIe接口的固态存储设备(SSD)设计,它的目标是最大限度的释放闪存的潜能。
NVMe接口属于逻辑设备接口,工作在支持NVMe的板卡上的主控器和主机端的对等层内,它规定了操作系统与NVM子系统之间的通信协议,定义了一套指令集和功能集。NVMe为基于PCIe的SSD带来了较低的时延,较高的IOPS和较低能耗的优势。
首先通过下图展示下NVMe在数据传输过程中的位置,有一部分位于PCIe之上,这部分也是NVMe驱动的主要部分,还有一部分位于用户态的软件层,用于应用层与NVMe驱动间的交互。
NVMe有以下几个关键属性:
在命令提交(Command Submission)或者完成(Completion)的路径上不需要读取相关寄存器(不可缓存或MMIO寄存器);
支持最多可达64K 的I/O 队列,每个队列支持64K的未处理命令命令;
每个队列的的优先级拥有明确的仲裁机制;
为确保超高效的IO操作,完成一个4KB读取请求需要的所有信息包含在64B的命令中;
高效且流线型的指令集;
支持MSI/MSI-X中断和中断聚合;
支持多个命名空间;
有效支持IO虚拟化架构,如SR-IOV;
健全的错误报告和管理功能;
支持多路径IO和命名空间共享;
支持许多企业需求,如端到端的数据保护(