NVM Express(NVMe),或称非易失性内存主机控制器接口规范(英语:Non-Volatile Memory Host Controller Interface Specification,缩写:NVMHCIS),是一个逻辑设备接口规范。它是与AHCI类似的、基于设备逻辑接口的总线传输协议规范(相当于通讯协议中的应用层),用于访问通过PCI Express(PCIe)总线附加的非易失性存储器介质(例如采用闪存的固态硬盘驱动器),虽然理论上不一定要求 PCIe 总线协议。
NVM代表非易失性存储器(non-volatile memory)的首字母缩略字,这是固态硬盘(SSD)的常见的闪存形式。此规范主要是为基于闪存的存储设备提供一个低延时、内部并发化的原生界面规范,也为现代CPU、电脑平台及相关应用提供原生存储并发化的支持[1],令主机硬件和软件可以充分利用固态存储设备的并行化存储能力。相比此前机械硬盘驱动器(HDD)时代的AHCI,NVMe/NVMHCI降低了I/O操作等待时间、提升同一时间内的操作数、更大容量的操作队列等。
依托于PCIe总线,NVMe设备可适用于各种支持PCIe总线的物理插槽上,包括标准尺寸的PCIe扩展卡(一般是4个PCIe通道)[2]、采用U.2物理连接界面(SFF-8639)的2.5英寸/3.5英寸标准尺寸固态硬盘驱动器、[3][4]SATA Express总线(兼容于PCIe)的设备、M.2规格扩展卡等。[5][6]
此规范由“Non-Volatile Memory Host Controller Interface Working Group”(非易失性存储器主机控制器界面工作组)负责管理。
在NVMe出现之前,高端SSD只得以采用PCI Express总线制造,但需使用非标准规范的接口。若使用标准化的SSD接口,操作系统只需要一个驱动程序就能使用匹配规范的所有SSD。这也意味着每个SSD制造商不必用额外的资源来设计特定接口的驱动程序。[8]
截至2014年9月,在光纤通道(FC)上使用NVMe的新标准也正在开发。[9]
2011年有了1.0。最新的版本是1.2.1;最大带宽为11.6Gbps,约为1200MB/s。
NVM代表非易失性存储器(non-volatile memory)的首字母缩略字,这是固态硬盘(SSD)的常见的闪存形式。此规范主要是为基于闪存的存储设备提供一个低延时、内部并发化的原生界面规范,也为现代CPU、电脑平台及相关应用提供原生存储并发化的支持[1],令主机硬件和软件可以充分利用固态存储设备的并行化存储能力。相比此前机械硬盘驱动器(HDD)时代的AHCI,NVMe/NVMHCI降低了I/O操作等待时间、提升同一时间内的操作数、更大容量的操作队列等。
依托于PCIe总线,NVMe设备可适用于各种支持PCIe总线的物理插槽上,包括标准尺寸的PCIe扩展卡(一般是4个PCIe通道)[2]、采用U.2物理连接界面(SFF-8639)的2.5英寸/3.5英寸标准尺寸固态硬盘驱动器、[3][4]SATA Express总线(兼容于PCIe)的设备、M.2规格扩展卡等。[5][6]
此规范由“Non-Volatile Memory Host Controller Interface Working Group”(非易失性存储器主机控制器界面工作组)负责管理。
背景
历史上,大多数SSD使用如SATA、SAS或光纤通道等接口与计算机接口的总线连接。随着固态硬盘在大众市场上的流行,SATA已成为个人电脑中连接SSD的最典型方式;但是,SATA的设计主要是作为机械硬盘驱动器(HDD)的接口,并随着时间的推移越来越难满足速度日益提高的SSD。[7]随着在大众市场的流行,许多固态硬盘的数据速率提升已经放缓。不同于机械硬盘,部分SSD已受到SATA最大吞吐量的限制。在NVMe出现之前,高端SSD只得以采用PCI Express总线制造,但需使用非标准规范的接口。若使用标准化的SSD接口,操作系统只需要一个驱动程序就能使用匹配规范的所有SSD。这也意味着每个SSD制造商不必用额外的资源来设计特定接口的驱动程序。[8]
截至2014年9月,在光纤通道(FC)上使用NVMe的新标准也正在开发。[9]
历史
2009年Intel开始着手寻找SATA的替代方案。SATA作为串行接口,采用AHCI规范,其已经成为制约SSD速度的瓶颈。AHCI只有1个命令队列,队列深度32.而NVMe可以有65535个命令队列,每个队列都可以深达65536个命令。NVMe也充分使用了MSI的2048个中断向量优势,延迟大大减小。2011年有了1.0。最新的版本是1.2.1;最大带宽为11.6Gbps,约为1200MB/s。
操作系统支持
- DragonFly BSD
- DragonFly 4.6开始内置NVMe驱动程序[14]
- FreeBSD
- Intel赞助开发的驱动程序已内置于FreeBSD的head、stable/9分支中。[15][16]nvd(4)和nvme(4)驱动程序则是在10.2版FreeBSD中开始默认内置于其中。[17]
- iOS
- iOS 9开始支持,首款配备了NVMe接口的设备是iPhone 6S/6S Plus,也是首款采用NVMe的移动设备。物理接口和UFS相同的采用M-PHY PCIe。接下来Apple推出的iPad Pro和iPhone SE也采用了NVMe[20]
- Linux
- NVMe的驱动程序最早是英特尔提供的,适用于Linux的内核驱动程序模块。[21][22][23]这个模块在2012年3月19日集成到Linux内核的主线驱动程序当中,Linux内核3.3版开始内置支持而无需安装额外模块。[24]
- 2014年1月19日的Linux内核 3.13版开始,加入由Fusion-io开发的blk-multiqueue或称blk-mq模块,是为“可变区块层”(scalable block layer),用于NVMe SSD。This leverages the performance offered by SSDs and NVM Express, by allowing much higher I/O submission rates. With this new design of the Linux kernel block layer, internal queues are split into two levels (per-CPU and hardware-submission queues), thus removing bottlenecks and allowing much higher levels of I/O parallelization.[25][26][27]
- 2015年4月12日发布的Linux内核 4.0版开始,VirtIO区块层驱动程序,SCSI驱动层(与SATA驱动共用)、回环设备驱动(loop device) UBI(unsorted block images)驱动(供闪存实现区块擦写管理)以及RBD驱动程序(which exports Ceph RADOS objects as block devices)都被修改,以适应及适配越来越多的NVMe设备[28][29][30]
- OS X/macOS
- Mac OS X 10.10.3(OS X Yosemite)开始支持NVMe。苹果公司的Retina MacBook和2016年发布MacBook Pro,配备了使用NVMe的PCIe SSD作为主硬盘驱动器使用。[34]
- VMware
- 英特尔发布了供VMWare使用的NVMe驱动程序,[36]vSphere 6.0以及其后的版本中,均包含了该驱动程序,支持多种NVMe设备。[37]在 vSphere 6 update 1 更新中,VMWare的VSAN软件模拟的存储子系统也开始支持NVMe设备。[38]
- Windows
- 微软在Windows 8.1和Windows Server 2012 R2开始,原生支持NVMe设备。[39][40]同时也为Windows 7和Windows Server 2008 R2提供原生驱动程序支持(需由用户自行下载获取)[41]
- 除了微软官方提供的驱动程序以外,OpenFabrics Alliance也有维护一套开放源代码的NVMe驱动程序,使用于Windows 7、8、8.1、10以及Windows Server 2008 R2、2012、2012 R2,这套驱动程序由数个加入了NVMe工作组的公司开发,包括IDT、英特尔以及LSI。[42] The current release is 1.5 from December 2016.[43]
Comments
Post a Comment
https://gengwg.blogspot.com/