NVM Express
此条目可参照英语维基百科相应条目来扩充。 (2017年6月15日) |
NVM Express(缩写NVMe),或称非易失性内存主机控制器接口规范(英语:Non-Volatile Memory Host Controller Interface Specification,缩写:NVMHCIS),是一个逻辑设备接口规范。它是基于设备逻辑接口的总线传输协议规范(相当于通讯协议中的应用层),用于访问通过PCI Express(PCIe)总线附加的非易失性存储器介质(例如采用闪存的固态盘机),虽然理论上不一定要求PCIe总线协议。NVMe是一种协议,是一组允许SSD使用PCIe总线的软硬件标准;而PCIe是实际的物理连接通道。
简称 | NVMe |
---|---|
成立时间 | 2011年 |
类型 | 总线、硬盘驱动器接口[*] |
网站 | nvmexpress |
NVM代表非易失性存储器(non-volatile memory)的首字母缩略字,这是固态硬盘(SSD)的常见的闪存形式。此规范主要是为基于闪存的存储设备提供一个低延时、内部并发化的原生界面规范,也为现代CPU、电脑平台及相关应用提供原生存储并发化的支持[1],令主机硬件和软件可以充分利用固态存储设备的并行化存储能力。相比此前机械硬盘驱动器(HDD)时代的AHCI(SATA下的协议),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]此规范由NVMHCIS工作组负责管理。
背景
编辑历史上,大多数SSD使用如SATA、SAS或光纤通道等接口与计算机接口的总线连接。随着固态硬盘在大众市场上的流行,SATA已成为个人电脑中连接SSD的最典型方式;但是,SATA的设计主要是作为机械硬盘驱动器(HDD)的接口,机械结构的HDD使用读取臂做读写,与直接操作固态颗粒的SSD差异很大,并随着时间的推移越来越难满足速度日益提高的SSD。[6]随着在大众市场的流行,许多固态硬盘的数据速率提升已经放缓。不同于机械硬盘,部分SSD已受到SATA最大吞吐量的限制。
在NVMe出现之前,高端SSD只得以采用PCI Express总线制造,但需使用非标准规范的接口。若使用标准化的SSD接口,操作系统只需要一个驱动程序就能使用符合规范的所有SSD。这也意味着每个SSD制造商不必用额外的资源来设计特定接口的驱动程序。[7]
截至2014年9月,在光纤通道(FC)上使用NVMe的新标准也正在开发。[8]
截止2018年,NVMe包含NVMe、NVMe-MI以及NVMe-oF(NVMe over Fabrics)三个细分协议,其中NVMe为主协议,规范了host对盘的读写、访问以及资源管理等功能,NVMe-MI主要包括带外管理相关的功能,NVMe-oF主要是基于NVMe的网络协议规范,可以将FC等网络协议与NVMe进行结合起来。同时,并且三个协议在协同演进,未来将会围绕NVMe形成一个从盘到存储系统的端到端生态。
PCI Express与传统的SATA差异
编辑NVMe标准对比AHCI标准:
- 当数据从存储传输到服务器主机时,会进入一行或队列。传统的SATA连接只能支持一个队列,一次只能接收32条数据。而NVMe存储支持最多64000个队列,每个队列有64000个条目。
- NVMe使用原生PCIe通道,免去了SATA与SAS接口的主机控制器与CPU通信所带来的延时。NVMe标准的延时只有AHCI的一半不到:NVMe精简了调用方式,执行命令时不需要读取寄存器;而AHCI每条命令则需要读取4次寄存器,一共会消耗8000次CPU循环,从而造成大概2.5微秒的延迟。
- NVMe支持同时从多核处理器接受命令和优先处理请求,这在企业级的重负载时优势明显。
- NVMe加入了自动功耗状态切换和动态能耗管理功能。设备从Power State 0闲置50ms后可以切换到Power State 1;继续闲置的话,在500ms后又会进入功耗更低的Power State 2,切换时会有短暂延迟。SSD在闲置时可以非常快速的控制在极低的水平,在功耗管理上NVMe标准的SSD会比AHCI SSD拥有较大优势。
历史
编辑2009年Intel开始着手寻找SATA的替代方案。SATA作为串行接口,采用AHCI规范,其已经成为制约SSD速度的瓶颈。AHCI只有1个命令队列,队列深度32。而NVMe可以有65535个命令队列,每个队列都可以深达65536个命令。NVMe也充分使用了MSI的2048个中断向量优势,延迟大大减小。最新的版本是2.0c;最大带宽约为16GB/s。[9]
2018年,基于NVMe的SSD已经可以突破15TB可用容量,读带宽达到6GB/s,100万IOPS(4KB随机读),同时保证微秒级延迟。[10] 产品规格:
- 1.0e(2013年1月)
- 1.1b(2014年7月)
- 1.2(2014年11月)
- 1.2a(2015年10月)
- 1.2b(2016年6月)
- 1.2.1(2016年6月)
- 1.3(2017年5月)
- 1.3a(2017年10月)
- 1.3b(2018年5月)
- 1.3c(2018年5月)
- 1.3d(2019年3月)
- 1.4(2019年6月)
- 1.4a(2020年3月)
- 1.4b(2020年9月)
- 2.0(2021年5月)[11]
- 2.0a(2021年7月)
- 2.0b(2022年1月)
- 2.0c(2022年10月)
操作系统支持
编辑- DragonFly BSD
- DragonFly 4.6开始内置NVMe驱动程序[16]
- FreeBSD
- Intel赞助开发的驱动程序已内置于FreeBSD的head、stable/9分支中。[17][18]nvd(4)和nvme(4)驱动程序则是在10.2版FreeBSD中开始默认内置于其中。[19]
- iOS
- iOS 9开始支持,首款配备了NVMe接口的设备是iPhone 6S/6S Plus,也是首款采用NVMe的移动设备。物理接口和UFS相同的采用M-PHY PCIe。接下来Apple推出的iPad Pro和iPhone SE也采用了NVMe[22]
- Linux
- NVMe的驱动程序最早是英特尔提供的,适用于Linux的内核驱动程序模块。[23][24][25]这个模块在2012年3月19日集成到Linux内核的主线驱动程序当中,Linux内核3.3版开始内置支持而无需安装额外模块。[26]
- NVMe采用了多队列设计,最高支持64k个队列。2014年1月19日的Linux内核 3.13版开始,block层增加了multi-queue block layer,这一模块可以充分利用多核CPU和底层高速SSD硬件资源,主机CPU的I/O提交队列可以与SSD侧的提交队列进行绑定,即是说每个CPU核可以与SSD硬件的队列进行1:1或者n:m(比值取决于硬件设计)进行配置。对上层应用仍然是通用的块接口。从应用的角度,在某一个CPU Core上产生的IO请求,中断也会在此CPU Core处理, 性能更优。在SSD性能不是瓶颈的情况下,应用的性能能够实现在多核环境下按照CPU Core的数量扩展,这点与AHCI的CPU单队列访问存储设备的机制有所不同。
- 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设备[27][28][29]
- OS X/macOS
- Mac OS X 10.10.3(OS X Yosemite)开始支持NVMe。苹果公司的Retina MacBook和2016年发布MacBook Pro,配备了使用NVMe的PCIe SSD作为主硬盘驱动器使用。[33]
- VMware
- 英特尔发布了供VMWare使用的NVMe驱动程序,[35]vSphere 6.0以及其后的版本中,均包含了该驱动程序,支持多种NVMe设备。[36]在 vSphere 6 update 1 更新中,VMWare的VSAN软件模拟的存储子系统也开始支持NVMe设备。[37]
- Windows
- 微软在Windows 8.1和Windows Server 2012 R2开始,原生支持NVMe设备。[38][39]同时也为Windows 7和Windows Server 2008 R2提供原生驱动程序支持(Windows 7与Windows Server 2008 R2默认不支持NVMe,需由用户自行下载获取)。[40]
- 除了微软官方提供的驱动程序以外,OpenFabrics Alliance也有维护一套开放源代码的NVMe驱动程序,使用于Windows 7、8、8.1、10以及Windows Server 2008 R2、2012、2012 R2,这套驱动程序由数个加入了NVMe工作组的公司开发,包括IDT、英特尔以及LSI。[41] 当前版本为2016年12月发布的1.5。[42]
参见
编辑参考资料
编辑- ^ Compare: NVM Express. NVM Express, Inc. [2017-01-24]. (原始内容存档于2017-02-07).
NVMe™ is designed from the ground up to deliver high bandwidth and low latency storage access for current and future NVM technologies.
- ^ Drew Riley. Intel SSD DC P3700 800GB and 1.6TB Review: The Future of Storage. tomshardware.com. 2014-08-13 [2014-11-21].
- ^ Intel Solid-State Drive DC P3600 Series (PDF). Intel: 18, 20–22. 2015-03-20 [2015-04-11]. (原始内容存档 (PDF)于2015-04-02).
- ^ Paul Alcorn. SFFWG Renames PCIe SSD SFF-8639 Connector To U.2. Tom's Hardware. 2015-06-05 [2015-06-09].
- ^ Dave Landsman. AHCI and NVMe as Interfaces for SATA Express Devices – Overview (PDF). SATA-IO. 2013-08-09 [2013-10-02]. (原始内容存档 (PDF)于2013-10-05).
- ^ Walker, Don H. A Comparison of NVMe and AHCI (PDF). 31 July 2012. SATA-IO. [3 July 2013]. (原始内容存档 (PDF)于2019-02-12).
- ^ NVM Express Explained (PDF). 9 April 2014 [21 March 2015]. (原始内容存档 (PDF)于2016-03-04).
- ^ Fibre Channel Industry Association Collaborating with NVM Express, Inc. to Define New Standard for Fabric-Based Solid-State Storage Devices (新闻稿). [2017-11-09]. (原始内容存档于2017-07-02).
- ^ NVM Express Announces the Rearchitected NVMe 2.0 Library of Specifications. [2022-12-25]. (原始内容存档于2023-01-18).
- ^ 王楠. 打造绿色数据中心 Memblaze发布NVMe SSD新品_科技_环球网. tech.huanqiu.com. [2018-11-13]. (原始内容存档于2018-11-13) (英语).
- ^ NVM Express Announces the Rearchitected NVMe 2.0 Library of Specifications. [2022-12-25]. (原始内容存档于2023-01-18).
- ^ Werner Fischer; Georg Schönberger. Linux Storage Stack Diagram. Thomas-Krenn.AG. 2015-06-01 [2015-06-08]. (原始内容存档于2019-06-29).
- ^ hg/plan9front:sys/src/9/pc/sdnvme.c. [2017-08-22]. (原始内容存档于2017-03-31).
- ^ NVM Express » ChromeOS adds boot support for NVM Express. nvmexpress.org. [21 March 2015]. (原始内容存档于2016-04-22).
- ^ 4f503189f7339c667b045ab80a949964ecbaf93e - chromiumos/platform/depthcharge - Git at Google. googlesource.com. [21 March 2015]. (原始内容存档于2017-08-23).
- ^ DragonFly BSD 4.6. www.dragonflybsd.org. [2016-09-08]. (原始内容存档于2016-09-04).
- ^ Log of /head/sys/dev/nvme. FreeBSD source tree. The FreeBSD Project. [16 October 2012]. (原始内容存档于2013-05-29).
- ^ Log of /stable/9/sys/dev/nvme. FreeBSD source tree. The FreeBSD Project. [3 July 2013]. (原始内容存档于2018-02-16).
- ^ FreeBSD 10.2-RELEASE Release Notes. The FreeBSD Project. [5 August 2015]. (原始内容存档于2017-06-18).
- ^ #9910 NVMe devices support. dev.haiku-os.org. [2016-07-28]. (原始内容存档于2016-08-06).
- ^ 4053 Add NVME Driver Support to Illumos. github.com. [2016-05-23]. (原始内容存档于2017-05-10).
- ^ Ho, Joshua. iPhone 6s and iPhone 6s Plus Preliminary Results. www.anandtech.com. [2016-06-01]. (原始内容存档于2016-05-26).
- ^ Matthew Wilcox. NVM Express driver. LWN.net. 2011-03-03 [2013-11-05]. (原始内容存档于2012-07-17).
- ^ Keith Busch. Linux NVMe Driver (PDF). flashmemorysummit.com. 2013-08-12 [2013-11-05]. (原始内容存档 (PDF)于2013-11-05).
- ^ IDF13 Hands-on Lab: Compiling the NVM Express Linux Open Source Driver and SSD Linux Benchmarks and Optimizations (PDF). activeevents.com. 2013 [2014-01-11]. (原始内容 (PDF)存档于2014-01-11).
- ^ Merge git://git.infradead.org/users/willy/linux-nvme. kernel.org. 2012-01-18 [2013-11-05].
- ^ Linux kernel 3.18, Section 1.8. Optional multiqueue SCSI support. kernelnewbies.org. 2014-12-07 [2014-12-18]. (原始内容存档于2014-12-18).
- ^ Linux kernel 4.0, Section 3. Block. kernelnewbies.org. 2015-05-01 [2015-05-02]. (原始内容存档于2015-05-04).
- ^ Linux Multi-Queue Block IO Queueing Mechanism (blk-mq) - Device Drivers. thomas-krenn.com. 2015-06-08 [2015-06-08]. (原始内容存档于2016-03-03).
- ^ nvme -- Non-Volatile Memory Host Controller Interface. NetBSD manual pages. 2016-01-01 [2016-09-02]. (原始内容存档于2016-09-15).
- ^ David Gwynne. non volatile memory express controller (/sys/dev/ic/nvme.c). BSD Cross Reference. 2014-04-16 [2014-04-27]. (原始内容存档于2014-04-28).
- ^ David Gwynne. man 4 nvme. OpenBSD man page. 2016-04-14 [2016-08-07]. (原始内容存档于2016-08-21).
- ^ Faster 'NVM Express' SSD Interface Arrives on Retina MacBook and OS X 10.10.3. macrumors.com. [11 April 2015]. (原始内容存档于2017-08-23).
- ^ nvme(7D). Oracle. [2014-12-02]. (原始内容存档于2015-12-09).
- ^ Intel Solid-State for NVMe Drivers. intel.com. 2015-09-25 [2016-03-17]. (原始内容存档于2016-03-25).
- ^ VMware Compatibility Guide for NVMe devices. vmware.com. [2016-03-17]. (原始内容存档于2016-03-25).
- ^ VSAN Now Supporting NVMe Devices. vmware.com. 2015-11-11 [2016-03-17]. (原始内容存档于2016-03-25).
- ^ Andy Herron. Advancements in Storage and File Systems in Windows 8.1 (PDF). snia.org. 2013 [2014-01-11]. (原始内容存档 (PDF)于2014-01-10).
- ^ Windows 8.1 to support hybrid disks and adds native NVMe driver. Myce.com. 2013-09-06 [2014-01-11]. (原始内容存档于2014-01-10).
- ^ Update to support NVM Express by using native drivers in Windows 7 or Windows Server 2008 R2. Microsoft. 2014-11-13 [2014-11-17]. (原始内容存档于2014-11-29).
- ^ Windows NVM Express. Project web site. [September 18, 2013]. (原始内容存档于2013年6月12日).
- ^ 存档副本. [2017-08-22]. (原始内容存档于2017-05-10).
外部链接
编辑- NVM Express – scalable, efficient, and industry standard(页面存档备份,存于互联网档案馆)
- LFCS: Preparing Linux for nonvolatile memory devices(页面存档备份,存于互联网档案馆), LWN.net, April 19, 2013, by Jonathan Corbet
- Multipathing PCI Express Storage, Linux Foundation, March 12, 2015, by Keith Busch