本文主要介绍NVMe及其相关特点。
1、NVMe概述
随着NVMe组织在FMS2018上对NVMe、NVMe-oF、NVMe-MI、JBOF以及NVMe基准测试等的介绍,在FMS2019上,NVMe、NVMe-oF等话题仍然保持着热度,同时,PCIe5.0、各类新存储介质为整个SSD市场注入了新鲜的血液。

NVMe(Non-Volatile Memory express)非易失性存储器标准,是基于PCI-Express(PCIe)接口上的总线传输协议规范,是一种建立在M.2接口上的类似AHCI的一种协议,是专门为闪存类存储设计的协议。NVMe最初的名字叫NVMHCI,是在2007年的Intel开发者论坛(IDF)上被提出来的,并在同年Intel牵头成立NVMe开发工作组。NVMe协议标准由NVM Express公司监管,这是一个由100多个组织组成的联盟,这些组织致力于开发更快的协议以提高非易失性存储的性能。该组织由一个13家公司组成的董事会领导,其中包括Cavium、Cisco、Dell EMC、Facebook、英特尔、Micron、Microsemi、微软、NetApp、三星、希捷、东芝内存和Western Digital。


2、NVMe的特性和优势
2.1、延时更低
造成硬盘存储时延迟的三大因素,存储介质本身、控制器,以及软件接口标准。NVMe标准是面向PCI-E SSD的,使用原生PCI-E通道与CPU直连可以免去SATA与SAS接口的外置控制器(PCH)与CPU通信所带来的延时。同时NVMe精简了调用方式,执行命令时不需要读取寄存器;而AHCI每条命令则需要读取4次寄存器,一共会消耗8000次CPU循环,从而造成2.5μs的延迟。即使NVMe有效降低了控制器与软件接口之间的延迟,存储介质本身仍然是造成延迟的最主要原因。现在SSD使用的NAND闪存本身也会造成约50μs的延迟(不同NAND的延迟差别也比较大)。要解决存储介质造成的较高延迟,还需要依赖于未来可能应用的诸如PCM、RRAM、MRAM等新式存储器。
2.2、IOPS性能提升
NVMe的另一个重点则是提高SSD的IOPS(每秒读写次数)性能。如果我们有详细了解过SSD的主控参数,应该知道会有队列深度这个参数。理论上,IOPS=队列深度/IO延迟,故IOPS的性能,与队列深度有较大的关系(但IOPS并不与队列深度成正比,因为实际应用中,随着队列深度的增大,IO延迟也会提高)。市面上性能不错的SATA接口的SSD,在队列深度上都可以达到32,然而这也是AHCI所能做到的极限。但目前高端的企业级PCIe SSD,其队列深度可能要达到128,甚至是256才能够发挥出最高的IOPS性能。而NVMe标准下,最大的队列深度可达64000。此外,NVMe的队列数量也从AHCI的1,提高了64000。

2.3、低功耗
NVMe加入了自动功耗状态切换和动态能耗管理功能,设备从Power State 0闲置50ms后可以切换到PowerState 1,继续闲置的话,在500ms后又会进入功耗更低的Power State 2,虽然切换能耗状态会产生短暂延迟,但闲置时这两种状态下的功耗可以控制在非常低的水平,因此在能耗管理上,相比起主流的SATA接口SSD拥有较大优势,这一点对增加笔记本电脑等移动设备的续航尤其有帮助。另外,因为原生PCIe可以与CPU直连,数据传输时没有了中间转接过程所产生的功耗,也会在一定程度上降低能耗。
2.4、驱动适用性广
NVMe标准的也解决了不同PCIe SSD之间的驱动适用性问题。此前的PCIe SSD,均需要安装驱动程序后才能正常使用,而不同的厂商又各自为政,每个厂商产品都有自己的驱动,SSD也不能作为引导使用。但支持NVMe标准之后,PCIe SSD就可适用于多个不同平台,也不需要厂商独立提供驱动支持。目前Windows、Linux、Solaris、Unix、VMware、UEFI等都加入了对NVMe SSD的支持。(当然,这个优势并不是相对AHCI而言,而是相对于其他需要采用独立驱动的PCIe SSD)
以上就是针对NVMe的一个概述,详细可参考标准《NVM Express Base Specification Revision 1.4
June 10, 2019》。