NVM Express

来自Local Chinese Wikipedia
~2026-11056-11留言2026年4月19日 (日) 08:02的版本 历史
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转到导航 跳转到搜索
非易失性内存主机控制器接口工作组
Module:Wd第196行Lua错误:attempt to call field 'getGlobalSiteId' (a nil value)
File:NVM Express logo.svg
简称NVMe
成立时间2011年,​15年前​(2011
网站nvmexpress.org

NVM Express(缩写NVMe),或称非易失性内存主机控制器接口规范(英语:Non-Volatile Memory Host Controller Interface Specification,缩写:NVMHCIS),是一个可程式化逻辑装置接口标准。它是基于接口的汇流排传输协定规范(相当于通讯协议中的应用层),用于访问非挥发性记忆体介质(例如采用快闪记忆体固态硬碟机)。NVMe也是一种协议以及允许SSD使用PCIe总线的软硬件标准。

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使用如SATASAS光纤通道等接口与计算机接口的总线连接。随着固态硬盘在大众市场上的流行,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]

2021年推出的NVMe 2.0加入了对区块储存(英语:Zoned Storage)的支援。[11]

产品规格:

  • 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月)[12]
    • 2.0a(2021年7月)
    • 2.0b(2022年1月)
    • 2.0c(2022年10月)
    • 2.0d(2024年8月)
  • 2.1(2024年8月)
  • 2.2(2025年3月)
  • 2.3(2025年8月)

作业系统支援[编辑]

File:IO stack of the Linux kernel.svg
Linux内核的存储控制堆叠中,NVMe的资料路径、不同层面下多重内部队列的位置[13]
9Front
2017年3月30日,NVMe驱动程式释出并供使用[14]
Chrome OS
2015年2月24日,加入NVMe驱动至内核和开机载入程式,可从NVMe装置启动Chrome OS[15][16]
DragonFly BSD
DragonFly 4.6开始内建NVMe驱动程式[17]
FreeBSD
Intel赞助开发的驱动程式已内建于FreeBSD的head、stable/9分支中。[18][19]nvd(4)和nvme(4)驱动程式则是在10.2版FreeBSD中开始预设内建于其中。[20]
Haiku
Haiku已有驱动开发时程,但是目前仍未完成[21]
illumos
illumos于2014年10月15日获得驱动程式支援[22]
iOS
iOS 9开始支援,首款配备了NVMe介面的装置是iPhone 6S/6S Plus,也是首款采用NVMe的行动装置。物理介面和UFS相同的采用M-PHY PCIe。接下来Apple推出的iPad ProiPhone SE也采用了NVMe[23]
Linux
NVMe的驱动程式最早是英特尔提供的,适用于Linux的内核驱动程式模组。[24][25][26]这个模组在2012年3月19日整合到Linux内核的主线驱动程式当中,Linux内核3.3版开始内建支援而无需安装额外模组。[27]
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装置[28][29][30]
NetBSD
NetBSD在2016年的开发版本中初步支援NVMe。[31]
OpenBSD
OpenBSD的NVMe驱动程式自2014年6月开始,由此前开发并释出USBAHCI驱动程式的高级开发团队负责。[32]OpenBSD 6.0开始正式支援。[33]
OS X/macOS
Mac OS X 10.10.3(OS X Yosemite)开始支援NVMe。苹果公司的Retina MacBook和2016年发布MacBook Pro,配备了使用NVMe的PCIe SSD作为主硬碟机使用。[34]
Solaris
Solaris自Oracle Solaris 11.2开始支援NVMe。[35]
VMware
英特尔释出了供VMWare使用的NVMe驱动程式,[36]vSphere 6.0以及其后的版本中,均包含了该驱动程式,支援多种NVMe装置。[37]在 vSphere 6 update 1 更新中,VMWare的VSAN软体模拟的存储子系统也开始支援NVMe装置。[38]
Windows
微软在Windows 8.1Windows Server 2012 R2开始,原生支援NVMe装置。[39][40]同时也为Windows 7Windows Server 2008 R2提供原生驱动程式支援(Windows 7与Windows Server 2008 R2预设不支援NVMe,需由使用者自行下载获取)。[41]
除了微软官方提供的驱动程式以外,OpenFabrics Alliance也有维护一套开放原始码的NVMe驱动程式,使用于Windows 7、8、8.1、10以及Windows Server 2008 R2、2012、2012 R2,这套驱动程式由数个加入了NVMe工作组的公司开发,包括IDT、英特尔以及LSI[42] 当前版本为2016年12月发布的1.5。[43]

参见[编辑]

参考资料[编辑]

  1. 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. 
  2. Drew Riley. Intel SSD DC P3700 800GB and 1.6TB Review: The Future of Storage. tomshardware.com. 2014-08-13 [2014-11-21]. 
  3. Intel Solid-State Drive DC P3600 Series (PDF). Intel: 18, 20–22. 2015-03-20 [2015-04-11]. (原始内容存档 (PDF)于2015-04-02). 
  4. Paul Alcorn. SFFWG Renames PCIe SSD SFF-8639 Connector To U.2. Tom's Hardware. 2015-06-05 [2015-06-09]. 
  5. 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). 
  6. Walker, Don H. A Comparison of NVMe and AHCI (PDF). 31 July 2012. SATA-IO. [3 July 2013]. (原始内容存档 (PDF)于2019-02-12). 
  7. NVM Express Explained (PDF). 9 April 2014 [21 March 2015]. (原始内容存档 (PDF)于2016-03-04). 
  8. 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). 
  9. NVM Express Announces the Rearchitected NVMe 2.0 Library of Specifications. [2022-12-25]. (原始内容存档于2023-01-18). 
  10. 王楠. 打造绿色数据中心 Memblaze发布NVMe SSD新品_科技_环球网. tech.huanqiu.com. [2018-11-13]. (原始内容存档于2018-11-13) (English). 
  11. https://nvmexpress.org/everything-you-need-to-know-about-the-nvme-2-0-specifications-and-new-technical-proposals/
  12. NVM Express Announces the Rearchitected NVMe 2.0 Library of Specifications. [2022-12-25]. (原始内容存档于2023-01-18). 
  13. Werner Fischer; Georg Schönberger. Linux Storage Stack Diagram. Thomas-Krenn.AG. 2015-06-01 [2015-06-08]. (原始内容存档于2019-06-29). 
  14. hg/plan9front:sys/src/9/pc/sdnvme.c. [2017-08-22]. (原始内容存档于2017-03-31). 
  15. NVM Express  » ChromeOS adds boot support for NVM Express. nvmexpress.org. [21 March 2015]. (原始内容存档于2016-04-22). 
  16. 4f503189f7339c667b045ab80a949964ecbaf93e - chromiumos/platform/depthcharge - Git at Google. googlesource.com. [21 March 2015]. (原始内容存档于2017-08-23). 
  17. DragonFly BSD 4.6. www.dragonflybsd.org. [2016-09-08]. (原始内容存档于2016-09-04). 
  18. Log of /head/sys/dev/nvme. FreeBSD source tree. The FreeBSD Project. [16 October 2012]. (原始内容存档于2013-05-29). 
  19. Log of /stable/9/sys/dev/nvme. FreeBSD source tree. The FreeBSD Project. [3 July 2013]. (原始内容存档于2018-02-16). 
  20. FreeBSD 10.2-RELEASE Release Notes. The FreeBSD Project. [5 August 2015]. (原始内容存档于2017-06-18). 
  21. #9910 NVMe devices support. dev.haiku-os.org. [2016-07-28]. (原始内容存档于2016-08-06). 
  22. 4053 Add NVME Driver Support to Illumos. github.com. [2016-05-23]. (原始内容存档于2017-05-10). 
  23. Ho, Joshua. iPhone 6s and iPhone 6s Plus Preliminary Results. www.anandtech.com. [2016-06-01]. (原始内容存档于2016-05-26). 
  24. Matthew Wilcox. NVM Express driver. LWN.net. 2011-03-03 [2013-11-05]. (原始内容存档于2012-07-17). 
  25. Keith Busch. Linux NVMe Driver (PDF). flashmemorysummit.com. 2013-08-12 [2013-11-05]. (原始内容存档 (PDF)于2013-11-05). 
  26. 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). 
  27. Merge git://git.infradead.org/users/willy/linux-nvme. kernel.org. 2012-01-18 [2013-11-05]. 
  28. Linux kernel 3.18, Section 1.8. Optional multiqueue SCSI support. kernelnewbies.org. 2014-12-07 [2014-12-18]. (原始内容存档于2014-12-18). 
  29. Linux kernel 4.0, Section 3. Block. kernelnewbies.org. 2015-05-01 [2015-05-02]. (原始内容存档于2015-05-04). 
  30. Linux Multi-Queue Block IO Queueing Mechanism (blk-mq) - Device Drivers. thomas-krenn.com. 2015-06-08 [2015-06-08]. (原始内容存档于2016-03-03). 
  31. nvme -- Non-Volatile Memory Host Controller Interface. NetBSD manual pages. 2016-01-01 [2016-09-02]. (原始内容存档于2016-09-15). 
  32. David Gwynne. non volatile memory express controller (/sys/dev/ic/nvme.c). BSD Cross Reference. 2014-04-16 [2014-04-27]. (原始内容存档于2014-04-28). 
  33. David Gwynne. man 4 nvme. OpenBSD man page. 2016-04-14 [2016-08-07]. (原始内容存档于2016-08-21). 
  34. Faster 'NVM Express' SSD Interface Arrives on Retina MacBook and OS X 10.10.3. macrumors.com. [11 April 2015]. (原始内容存档于2017-08-23). 
  35. nvme(7D). Oracle. [2014-12-02]. (原始内容存档于2015-12-09). 
  36. Intel Solid-State for NVMe Drivers. intel.com. 2015-09-25 [2016-03-17]. (原始内容存档于2016-03-25). 
  37. VMware Compatibility Guide for NVMe devices. vmware.com. [2016-03-17]. (原始内容存档于2016-03-25). 
  38. VSAN Now Supporting NVMe Devices. vmware.com. 2015-11-11 [2016-03-17]. (原始内容存档于2016-03-25). 
  39. Andy Herron. Advancements in Storage and File Systems in Windows 8.1 (PDF). snia.org. 2013 [2014-01-11]. (原始内容存档 (PDF)于2014-01-10). 
  40. Windows 8.1 to support hybrid disks and adds native NVMe driver. Myce.com. 2013-09-06 [2014-01-11]. (原始内容存档于2014-01-10). 
  41. 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). 
  42. Windows NVM Express. Project web site. [September 18, 2013]. (原始内容存档于2013年6月12日). 
  43. 存档副本. [2017-08-22]. (原始内容存档于2017-05-10). 

外部连结[编辑]