NVMe 协议详解(一)

NVMe 协议详解

  • 1. 综述
    • 1.1名词解释
      • 1.1.1 Namespace
      • 1.1.2 Fused Operations
      • 1.1.3 指令执行顺序
      • 1.1.4 写单元的原子性
      • 1.1.5 元数据
      • 1.1.6 仲裁机制
      • 1.1.7 逻辑块(LB)
      • 1.1.8 Queue Pair
      • 1.1.9 NVM 子系统
    • 1.2 NVMe SSD
      • 1.2.1基本架构
      • 1.2.2 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的存储介质。
NVMe 协议详解(一)_第1张图片

1.2.2 NVMe控制器

NVMe控制器实质上为DMA + multi Queue,DMA负责数据搬运(指令+用户数据),多队列负责发挥闪存的并行能力。

NVMe 协议详解(一)_第2张图片

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