NVMe 协议详解
1. 综述
NVMe over PCIe协议,定义了NVMe协议的使用范围、指令集、寄存器配置规范等。
1.1名词解释
1.1.1 Namespace
Namespace是一定数量逻辑块(LB)的集合,属性在Identify Controller中的数据结构中定义。
1.1.2 Fused Operations
Fused Operations可以理解为聚合操作,只能聚合两条命令,并且这两条命令在队列中应保持相邻顺序。协议中只有NVM指令才有聚合操作。还需要保证聚合操作的两条命令读写的原子性,参考Compare and Write例子。
1.1.3 指令执行顺序
除了聚合操作(Fused Operations),每一条SQ中的命令都是独立的,不必考虑RAW等数据相关问题,即使考虑,也是host应该解决的问题。
1.1.4 写单元的原子性
控制器需要支持写单元的原子性。但有时也能通过host配置Write Atomicity feature,减小原子性单元的大小,提高性能。
1.1.5 元数据
数据的额外信息,相当于提供校验功能。可选的方式。
1.1.6 仲裁机制
用来选择下一次执行的命令的SQ的机制,三种仲裁方式:
1.RR(每个队列优先级相同,轮转调度)
2.带权重的RR(队列有4种优先级,根据优先级调度)
3.自定义实现
1.1.7 逻辑块(LB)
NVMe定义的最小的读写单元,2KB、4KB……,用LBA来标识块地址,LBA range则表示物理上连续的逻辑块集合。
1.1.8 Queue Pair
由SQ(提交队列)与CQ(完成队列)组成,host通过SQ提交命令,NVMe Controller通过CQ提交完成命令。
1.1.9 NVM 子系统
NVM子系统包括控制器、NVM存储介质以及控制器与NVM之间的接口。
1.2 NVMe SSD
1.2.1基本架构
整体来看,NVMe SSD可以分为三部分,host端的驱动(NVMe官网以及linux、Windows已经集成了相应的驱动)、PCIe+NVMe实现的控制器以及FTL+NAND Flash的存储介质。
1.2.2 NVMe控制器
NVMe控制器实质上为DMA + multi Queue,DMA负责数据搬运(指令+用户数据),多队列负责发挥闪存的并行能力。