NVM Express

NVM Express(缩写NVMe),或称非易失性内存主机控制器接口规范英語:,缩写:),是一个逻辑设备接口规范。它是基於裝置邏輯接口的匯流排傳輸協定規範(相當於通讯协议中的应用层),用于通过PCI Express(PCIe)总线附加的非揮發性記憶體介质(例如採用快閃記憶體固態硬碟機),雖然理論上不一定要求PCIe匯流排協定。NVMe是一种协议,是一组允许SSD使用PCIe总线的软硬件标准;而PCIe是实际的物理连接通道。

PCI Express型、M.2型(下)
非易失性内存主机控制器接口工作组
簡稱NVMe
成立時間2011年2011
類型总线硬碟機介面[*]
網站nvmexpress.org

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] 產品規格:

  • 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月)

作業系統支援

Linux內核的存儲控制堆疊中,NVMe的資料路徑、不同層面下多重內部隊列的位置[12]
9Front
2017年3月30日,NVMe驅動程式釋出並供使用[13]
Chrome OS
2015年2月24日,加入NVMe驅動至內核和開機載入程式,可從NVMe裝置啟動Chrome OS[14][15]
DragonFly BSD
DragonFly 4.6開始內建NVMe驅動程式[16]
FreeBSD
Intel贊助開發的驅動程式已內建於FreeBSD的head、stable/9分支中。[17][18]nvd(4)和nvme(4)驅動程式則是在10.2版FreeBSD中開始預設內建於其中。[19]
Haiku
Haiku已有驅動開發時程,但是目前仍未完成[20]
illumos
illumos於2014年10月15日獲得驅動程式支援[21]
iOS
iOS 9開始支援,首款配備了NVMe介面的裝置是iPhone 6S/6S Plus,也是首款採用NVMe的行動裝置。物理介面和UFS相同的採用M-PHY PCIe。接下來Apple推出的iPad ProiPhone 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]
NetBSD
NetBSD在2016年的開發版本中初步支援NVMe。[30]OpenBSD則是在其6.0版時釋出了NVMe的驅動程式。
OpenBSD
OpenBSD的NVMe驅動程式自2014年6月開始,由此前開發並釋出USBAHCI驅動程式的高級開發團隊負責。[31]OpenBSD 6.0開始正式支援。[32]
OS X/macOS
Mac OS X 10.10.3(OS X Yosemite)開始支援NVMe。蘋果公司的Retina MacBook和2016年發佈MacBook Pro,配備了使用NVMe的PCIe SSD作為主硬碟機使用。[33]
Solaris
Solaris自Oracle Solaris 11.2開始支援NVMe。[34]
VMware
英特爾釋出了供VMWare使用的NVMe驅動程式,[35]vSphere 6.0以及其後的版本中,均包含了該驅動程式,支援多種NVMe裝置。[36]在 vSphere 6 update 1 更新中,VMWare的VSAN軟體模擬的存儲子系統也開始支援NVMe裝置。[37]
Windows
微軟在Windows 8.1Windows Server 2012 R2開始,原生支援NVMe裝置。[38][39]同時也為Windows 7Windows 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]

參見

參考資料

  1. Compare: . 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. . tomshardware.com. 2014-08-13 [2014-11-21].
  3. (PDF). Intel: 18, 20–22. 2015-03-20 [2015-04-11]. (原始内容存档 (PDF)于2015-04-02).
  4. Paul Alcorn. . Tom's Hardware. 2015-06-05 [2015-06-09].
  5. Dave Landsman. (PDF). SATA-IO. 2013-08-09 [2013-10-02]. (原始内容存档 (PDF)于2013-10-05).
  6. Walker, Don H. (PDF). 31 July 2012. SATA-IO. [3 July 2013]. (原始内容存档 (PDF)于2019-02-12).
  7. (PDF). 9 April 2014 [21 March 2015]. (原始内容存档 (PDF)于2016-03-04).
  8. (新闻稿). [2017-11-09]. (原始内容存档于2017-07-02).
  9. . [2022-12-25]. (原始内容存档于2023-01-18).
  10. 王楠. . tech.huanqiu.com. [2018-11-13]. (原始内容存档于2018-11-13) (英语).
  11. . [2022-12-25]. (原始内容存档于2023-01-18).
  12. Werner Fischer; Georg Schönberger. . Thomas-Krenn.AG. 2015-06-01 [2015-06-08]. (原始内容存档于2019-06-29).
  13. . [2017-08-22]. (原始内容存档于2017-03-31).
  14. . nvmexpress.org. [21 March 2015]. (原始内容存档于2016-04-22).
  15. . googlesource.com. [21 March 2015]. (原始内容存档于2017-08-23).
  16. . www.dragonflybsd.org. [2016-09-08]. (原始内容存档于2016-09-04).
  17. . FreeBSD source tree. The FreeBSD Project. [16 October 2012]. (原始内容存档于2013-05-29).
  18. . FreeBSD source tree. The FreeBSD Project. [3 July 2013]. (原始内容存档于2018-02-16).
  19. . The FreeBSD Project. [5 August 2015]. (原始内容存档于2017-06-18).
  20. . dev.haiku-os.org. [2016-07-28]. (原始内容存档于2016-08-06).
  21. . github.com. [2016-05-23]. (原始内容存档于2017-05-10).
  22. Ho, Joshua. . www.anandtech.com. [2016-06-01]. (原始内容存档于2016-05-26).
  23. Matthew Wilcox. . LWN.net. 2011-03-03 [2013-11-05]. (原始内容存档于2012-07-17).
  24. Keith Busch. (PDF). flashmemorysummit.com. 2013-08-12 [2013-11-05]. (原始内容存档 (PDF)于2013-11-05).
  25. (PDF). activeevents.com. 2013 [2014-01-11]. (原始内容 (PDF)存档于2014-01-11).
  26. . kernel.org. 2012-01-18 [2013-11-05].
  27. . kernelnewbies.org. 2014-12-07 [2014-12-18]. (原始内容存档于2014-12-18).
  28. . kernelnewbies.org. 2015-05-01 [2015-05-02]. (原始内容存档于2015-05-04).
  29. . thomas-krenn.com. 2015-06-08 [2015-06-08]. (原始内容存档于2016-03-03).
  30. . NetBSD manual pages. 2016-01-01 [2016-09-02]. (原始内容存档于2016-09-15).
  31. David Gwynne. . BSD Cross Reference. 2014-04-16 [2014-04-27]. (原始内容存档于2014-04-28).
  32. David Gwynne. . OpenBSD man page. 2016-04-14 [2016-08-07]. (原始内容存档于2016-08-21).
  33. . macrumors.com. [11 April 2015]. (原始内容存档于2017-08-23).
  34. . Oracle. [2014-12-02]. (原始内容存档于2015-12-09).
  35. . intel.com. 2015-09-25 [2016-03-17]. (原始内容存档于2016-03-25).
  36. . vmware.com. [2016-03-17]. (原始内容存档于2016-03-25).
  37. . vmware.com. 2015-11-11 [2016-03-17]. (原始内容存档于2016-03-25).
  38. Andy Herron. (PDF). snia.org. 2013 [2014-01-11]. (原始内容存档 (PDF)于2014-01-10).
  39. . Myce.com. 2013-09-06 [2014-01-11]. (原始内容存档于2014-01-10).
  40. . Microsoft. 2014-11-13 [2014-11-17]. (原始内容存档于2014-11-29).
  41. . Project web site. [September 18, 2013]. (原始内容存档于2013年6月12日).
  42. . [2017-08-22]. (原始内容存档于2017-05-10).

外部連結

维基共享资源上的相关多媒体资源:NVM Express
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.