NVM Express

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search
Non-Volatile Memory Host Controller Interface Specification
NVM Express logo.svg
Year started 2011; 7 years ago (2011)
Abbreviation NVMe
Website www.nvmexpress.org

NVM Express (NVMe) or Non-Volatile Memory Host Controller Interface Specification (NVMHCIS) is an open logical device interface specification for accessing non-volatile storage media attached via a PCI Express (PCIe) bus. The acronym NVM stands for non-volatile memory, which is often NAND flash memory that comes in several physical form factors, including solid-state drives (SSDs), PCI Express (PCIe) add in cards and other forms such as M.2 cards. NVM Express, as a logical device interface, has been designed from the ground up to capitalize on the low latency and internal parallelism of solid-state storage devices.[1]

By its design, NVM Express allows host hardware and software to fully exploit the levels of parallelism possible in modern SSDs. As a result, NVM Express reduces I/O overhead and brings various performance improvements relative to previous logical-device interfaces, including multiple, long command queues, and reduced latency. (The previous interface protocols were developed for use with far slower hard disk drives (HDD) where a very lengthy delay (relative to CPU operations) exists between a request and data transfer, where data speeds are much slower than RAM speeds, and where disk rotation and seek time give rise to further optimization requirements.)

NVM Express devices are chiefly available in the form of standard-sized PCI Express expansion cards[2] and as 2.5-inch form-factor devices that provide a four-lane PCI Express interface through the U.2 connector (formerly known as SFF-8639).[3][4] However, there are also storage devices using SATA Express and the M.2 specification which support NVM Express as the logical device interface.[5][6]

Specifications[edit]

Specifications for NVMe released to date include:[7]

  • 1.0e (Jan. 2013)
  • 1.1b (July 2014)
  • 1.2 (Nov. 2014)
  • 1.2a (Oct. 2015)
  • 1.2b (June 2016)
  • 1.2.1 (June 2016)
  • 1.3 (May 2017)
  • 1.3a (Oct. 2017)
  • 1.3b (May. 2018)

Main change between 1.2 and 1.3 and new features are:[8]

  • Identify Namespace return list of Namespace Identifiers
    • A list of Namespace Identification Descriptor structures is returned to the host for the namespace specified.

A number of differences and optional features have been added, including: Device Self-Test, Sanitize, Directives, Boot Partition, Telemetry, Virtualization Enhancements, NVMe-MI Management Enhancements, Host Controlled Thermal Management, Timestamp, Emulated Controller Performance Enhancement, along with a number of changes from past behaviour, see: NVMe 1.3 Changes Overview (.PDF download webpage) for details.

Background[edit]

Intel SSD 750 series, an SSD that uses NVM Express, in form of a PCI Express 3.0 ×4 expansion card (front and rear views)

Historically, most SSDs used buses such as SATA, SAS or Fibre Channel for interfacing with the rest of a computer system. Since SSDs became available in mass markets, SATA has become the most typical way for connecting SSDs in personal computers; however, SATA was designed primarily for interfacing with mechanical hard disk drives (HDDs), and it became increasingly inadequate for SSDs, which improved in speed over time.[9] For example, within about 5 years of mass market mainstream adoption (2005–2010) many SSDs were already held back by the comparatively slow data rates available for hard drives—unlike hard disk drives, some SSDs are limited by the maximum throughput of SATA.

High-end SSDs had been made using the PCI Express bus before NVMe, but using non-standard specification interfaces. By standardizing the interface of SSDs, operating systems only need one driver to work with all SSDs adhering to the specification. It also means that each SSD manufacturer does not have to use additional resources to design specific interface drivers. This is similar to how USB mass storage devices are built to follow the USB mass-storage device class specification and work with all computers, with no per-device drivers needed.[10]

History[edit]

The first details of a new standard for accessing non-volatile memory emerged at the Intel Developer Forum 2007, when NVMHCI was shown as the host-side protocol of a proposed architectural design that had Open NAND Flash Interface Working Group (ONFI) on the memory (flash) chips side.[11] A NVMHCI working group led by Intel was formed that year. The NVMHCI 1.0 specification was completed in April 2008 and released on Intel's web site.[12][13][14]

Technical work on NVMe began in the second half of 2009.[15] The NVMe specifications were developed by the NVM Express Workgroup, which consists of more than 90 companies; Amber Huffman of Intel was the working group's chair. Version 1.0 of the specification was released on 1 March 2011,[16] while version 1.1 of the specification was released on 11 October 2012.[17] Major features added in version 1.1 are multi-path I/O (with namespace sharing) and arbitrary-length scatter-gather I/O. It is expected that future revisions will significantly enhance namespace management.[15] Because of its feature focus, NVMe 1.1 was initially called "Enterprise NVMHCI".[18] An update for the base NVMe specification, called version 1.0e, was released in January 2013.[19] In June 2011, a Promoter Group led by seven companies was formed.

The first commercially available NVMe chipsets were released by Integrated Device Technology (89HF16P04AG3 and 89HF32P08AG3) in August 2012.[20][21] The first NVMe drive, Samsung's XS1715 enterprise drive, was announced in July 2013; according to Samsung, this drive supported 3 GB/s read speeds, six times faster than their previous enterprise offerings.[22] The LSI SandForce SF3700 controller family, released in November 2013, also supports NVMe.[23] Sample engineering boards with the PCI Express 2.0 ×4 model of this controller found 1,800 MB/sec read/write sequential speeds and 150K/80K random IOPS.[24] A Kingston HyperX "prosumer" product using this controller was showcased at the Consumer Electronics Show 2014 and promised similar performance.[25][26] In June 2014, Intel announced their first NVM Express products, the Intel SSD data center family that interfaces with the host through PCI Express bus, which includes the DC P3700 series, the DC P3600 series, and the DC P3500 series.[27] As of November 2014, NVMe drives are commercially available.

In March 2014, the group incorporated to become NVM Express, Inc., which as of November 2014 consists of more than 65 companies from across the industry. NVM Express specifications are owned and maintained by NVM Express, Inc., which also promotes industry awareness of NVM Express as an industry-wide standard. NVM Express, Inc. is directed by a thirteen-member board of directors selected from the Promoter Group, which includes Cisco, Dell, EMC, HGST, Intel, Micron, Microsoft, NetApp, Oracle, PMC, Samsung, SanDisk and Seagate.[28]

In September 2016, the CompactFlash Association announced that it would be releasing a new memory card specification, CFexpress, which uses NVMe.[citation needed]

Toshiba has claimed its new consumer NVMe SSD outperforms SATA SSDs. The RC100 is an M.2 card format SSD and was previewed at CES in January 2018. Toshiba has positioned it as a budget drive and hopes it will spread NVMe adoption outwards from the enterprise market to the consumer one. Comparing it with Toshiba's two-year-old Q300 Pro shows what a difference two years can make in storage technology. The Q300 Pro came in 256GB, 512GB and 1TB capacity points. It used 15nm MLC (2bits/cell) flash with a 6Gbit/s SATA interface, and was positioned as an SSD for gamers and workstations. The RC100 is an M.2 (2242 card) format drive, using TLC (3bits/cell) 64-layer 3D NAND with a PCie gen 3 interface. It is classed as a budget NVMe SSD and comes in 120, 240 and 480GB capacities.[29]

NVMeOF[edit]

NVMeOF is concept of using transport protocol over network to connect remote devices, contrary to NVMe where devices connected directly to PCIe bus (or over PCIe switch to PCIe bus). There are few types of NVMeOF depending on underlying transport protocol, FC-NVMe one of examples. In September 2014, a standard for using NVMe over Fibre Channel (FC) was proposed[30] this combination often referred as FC-NVMe (or sometimes NVMe/FC). NVM Express over Fabrics (NVMeOF) is a communication protocol that allows one computer to access block-level storage devices attached to another computer via remote direct memory access over number of transport protocols like FC, TCP/IP or InfiniBand. The standard for this protocol was published by NVM Express, Inc. in 2016.[31][32]

The following drivers implement the NVMeOF protocol:

  • the Linux NVMeOF initiator and target drivers[33]
  • the Storage Performance Development Kit (SPDK) NVMeOF initiator and target drivers.[34]
  • an NVMeOF initiator driver for Microsoft Windows[35]

Comparison with AHCI[edit]

The Advanced Host Controller Interface (AHCI) has the benefit of wide software compatibility, but has the downside of not delivering optimal performance when used with SSDs connected via the PCI Express bus. As a logical interface, AHCI was developed when the purpose of a host bus adapter (HBA) in a system was to connect the CPU/memory subsystem with a much slower storage subsystem based on rotating magnetic media. As a result, AHCI introduces certain inefficiencies when used with SSD devices, which behave much more like DRAM than like spinning media.[5]

The NVMe device interface has been designed from the ground up, capitalizing on the low latency and parallelism of PCI Express SSDs, and complementing the parallelism of contemporary CPUs, platforms and applications. At a high level, the basic advantages of NVMe over AHCI relate to its ability to exploit parallelism in host hardware and software, manifested by the differences in command queue depths, efficiency of interrupt processing, the number of uncacheable register accesses, etc., resulting in various performance improvements.[5][36]:17–18

The table below summarizes high-level differences between the NVMe and AHCI logical device interfaces.

High-level comparison of AHCI and NVMe[5]
  AHCI NVMe
Maximum queue depth One command queue;
32 commands per queue
65535 queues;[37]
65536 commands per queue
Uncacheable register accesses
(2000 cycles each)
Six per non-queued command;
nine per queued command
Two per command
MSI-X
and interrupt steering
A single interrupt;
no steering
2048 MSI-X interrupts
Parallelism
and multiple threads
Requires synchronization lock
to issue a command
No locking
Efficiency
for 4 KB commands
Command parameters require
two serialized host DRAM fetches
Gets command parameters
in one 64-byte fetch

Operating system support[edit]

The position of NVMe data paths and multiple internal queues within various layers of the Linux kernel's storage stack.[38]
Chrome OS
On February 24, 2015, support for booting from NVM Express devices was added to Chrome OS.[39][40]
DragonFly BSD
The first release of DragonFly BSD with NVMe support is version 4.6.[41]
FreeBSD
Intel sponsored a NVM Express driver for FreeBSD's head and stable/9 branches.[42][43] The nvd(4) and nvme(4) drivers are included in the GENERIC kernel configuration by default since FreeBSD version 10.2.[44]
Haiku
Haiku support for NVMe is planned; however no work has been completed yet.[45]
illumos
illumos received support for NVMe on October 15, 2014.[46]
iOS
With the release of the iPhone 6S and 6S Plus, Apple introduced the first mobile deployment of NVMe over PCIe in smartphones. Apple followed these releases with the release of the iPad Pro and iPhone SE that also use NVMe over PCIe.[47]
Linux
Intel published an NVM Express driver for Linux on 3 March 2011,[48][49][50] which was merged into the Linux kernel mainline on 18 January 2012 and released as part of versions 3.3 of the Linux kernel on 19 March 2012.[51]
NetBSD
NetBSD has support for NVMe in the development version (NetBSD-current).[52] Implementation is derived from OpenBSD 6.0.
OpenBSD
Development work required to support NVMe in OpenBSD has been started in April 2014 by a senior developer formerly responsible for USB 2.0 and AHCI support.[53] Support for NVMe has been enabled in the OpenBSD 6.0 release.[54]
OS X/macOS
In the 10.10.3 update for OS X Yosemite, Apple introduced support for NVM Express. The Retina MacBook and 2016 MacBook Pro use NVMe over PCIe as the logical device interface.[55]
Solaris
Solaris received support for NVMe in Oracle Solaris 11.2.[56]
VMware
Intel has provided an NVMe driver for VMware,[57] which is included in vSphere 6.0 and later builds, supporting various NVMe devices.[58] As of vSphere 6 update 1, VMware's VSAN software-defined storage subsystem also supports NVMe devices.[59]
Windows
Microsoft added native support for NVMe to Windows 8.1 and Windows Server 2012 R2.[36][60] Native drivers for Windows 7 and Windows Server 2008 R2 have been added in updates.[61]
The OpenFabrics Alliance maintains an open-source NVMe Windows Driver for Windows 7/8/8.1 and Windows Server 2008R2/2012/2012R2, developed from the baseline code submitted by several promoter companies in the NVMe workgroup, specifically IDT, Intel, and LSI.[62] The current release is 1.5 from December 2016.[63]

Software support[edit]

QEMU
NVMe is supported by QEMU since version 1.6 released on August 15, 2013.[64]
UEFI
An open source NVMe driver for UEFI is available on SourceForge.[65]

References[edit]

  1. ^ Compare: "NVM Express". NVM Express, Inc. Retrieved 2017-01-24. 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 (2014-08-13). "Intel SSD DC P3700 800GB and 1.6TB Review: The Future of Storage". tomshardware.com. Retrieved 2014-11-21. 
  3. ^ "Intel Solid-State Drive DC P3600 Series" (PDF). Intel. 2015-03-20. pp. 18, 20–22. Retrieved 2015-04-11. 
  4. ^ Paul Alcorn (2015-06-05). "SFFWG Renames PCIe SSD SFF-8639 Connector To U.2". Tom's Hardware. Retrieved 2015-06-09. 
  5. ^ a b c d Dave Landsman (2013-08-09). "AHCI and NVMe as Interfaces for SATA Express Devices – Overview" (PDF). SATA-IO. Retrieved 2013-10-02. 
  6. ^ Paul Wassenberg (2013-06-25). "SATA Express: PCIe Client Storage" (PDF). SATA-IO. Retrieved 2014-11-21. 
  7. ^ http://nvmexpress.org/resources/specifications/
  8. ^ http://nvmexpress.org/changes/
  9. ^ Walker, Don H. "A Comparison of NVMe and AHCI" (PDF). 31 July 2012. SATA-IO. Retrieved 3 July 2013. 
  10. ^ "NVM Express Explained" (PDF). nvmexpress.org. 9 April 2014. Retrieved 21 March 2015. 
  11. ^ "Speeding up Flash... in a flash". The Inquirer. 2007-10-13. Retrieved 2014-01-11. 
  12. ^ http://www.bswd.com/FMS09/FMS09-T2A-Huffman.pdf
  13. ^ "Flash new standard tips up". The Inquirer. 2008-04-16. Retrieved 2014-01-11. 
  14. ^ http://www.flashmemorysummit.com/English/Collaterals/Proceedings/2008/20080813_T2A_Huffman.pdf
  15. ^ a b http://www.flashmemorysummit.com/English/Collaterals/Proceedings/2013/20130813_A12_Onufryk.pdf
  16. ^ "New Promoter Group Formed to Advance NVM Express" (PDF). Press release. June 1, 2011. Retrieved September 18, 2013. 
  17. ^ Amber Huffman editor (October 11, 2012). "NVM Express Revision 1.1" (PDF). Specification. Retrieved September 18, 2013. 
  18. ^ David A. Deming (2013-06-08). "PCIe-based Storage" (PDF). snia.org. Archived from the original (PDF) on 2013-09-20. Retrieved 2014-01-12. 
  19. ^ Amber Huffman editor (January 23, 2013). "NVM Express Revision 1.0e" (PDF). Specification. Retrieved September 18, 2013. 
  20. ^ "IDT releases two NVMe PCI-Express SSD controllers". The Inquirer. 2012-08-21. Retrieved 2014-01-11. 
  21. ^ "IDT Shows Off The First NVMe PCIe SSD Processor and Reference Design - FMS 2012 Update". The SSD Review. 2012-08-24. Retrieved 2014-01-11. 
  22. ^ "Samsung Announces Industry's First 2.5-inch NVMe SSD | StorageReview.com - Storage Reviews". StorageReview.com. 2013-07-18. Retrieved 2014-01-11. 
  23. ^ "LSI SF3700 SandForce Flash Controller Line Unveiled | StorageReview.com - Storage Reviews". StorageReview.com. 2013-11-18. Retrieved 2014-01-11. 
  24. ^ "LSI Introduces Blazing Fast SF3700 Series SSD Controller, Supports Both PCIe and SATA 6Gbps". hothardware.com. Retrieved 21 March 2015. 
  25. ^ Jane McEntegart. "Kingston Unveils First PCIe SSD: 1800 MB/s Read Speeds". Tom's Hardware. Retrieved 21 March 2015. 
  26. ^ "Kingston HyperX Predator PCI Express SSD Unveiled With LSI SandForce SF3700 PCIe Flash Controller". hothardware.com. Retrieved 21 March 2015. 
  27. ^ "Intel® Solid-State Drive Data Center Family for PCIe*". Intel. Retrieved 21 March 2015. 
  28. ^ "NVM Express  » NVM Express Organization History". www.nvmexpress.org. Retrieved 23 December 2015. 
  29. ^ "PC nerds: Can't get no SATA-isfaction? Toshiba flaunts NVMe SSD action". 
  30. ^ "Fibre Channel Industry Association Collaborating with NVM Express, Inc. to Define New Standard for Fabric-Based Solid-State Storage Devices" (Press release). 
  31. ^ "NVM Express over Fabrics Revision 1.0" (PDF). NVM Express, Inc. 5 June 2016. 
  32. ^ Woolf, David (9 February 2018). "What NVMe over Fabrics Means for Data Storage". 
  33. ^ Hellwig, Christoph (17 July 2016). "NVMe Over Fabrics Support in Linux" (PDF). 
  34. ^ Stern, Jonathan (7 June 2016). "Announcing the SPDK NVMf Target". 
  35. ^ Randall, Robert (20 July 2016). "Windows NVMeOF host / initiator demo at FMS". 
  36. ^ a b Andy Herron (2013). "Advancements in Storage and File Systems in Windows 8.1" (PDF). snia.org. Archived from the original (PDF) on 2014-01-10. Retrieved 2014-01-11. 
  37. ^ "NVM Express specification revision 1.2" (PDF). section 1.4 Theory of Operation. 
  38. ^ Werner Fischer; Georg Schönberger (2015-06-01). "Linux Storage Stack Diagram". Thomas-Krenn.AG. Retrieved 2015-06-08. 
  39. ^ "NVM Express  » ChromeOS adds boot support for NVM Express". nvmexpress.org. Retrieved 21 March 2015. 
  40. ^ "4f503189f7339c667b045ab80a949964ecbaf93e - chromiumos/platform/depthcharge - Git at Google". googlesource.com. Retrieved 21 March 2015. 
  41. ^ "DragonFly BSD 4.6". www.dragonflybsd.org. Retrieved 2016-09-08. 
  42. ^ "Log of /head/sys/dev/nvme". FreeBSD source tree. The FreeBSD Project. Retrieved 16 October 2012. 
  43. ^ "Log of /stable/9/sys/dev/nvme". FreeBSD source tree. The FreeBSD Project. Retrieved 3 July 2013. 
  44. ^ "FreeBSD 10.2-RELEASE Release Notes". The FreeBSD Project. Retrieved 5 August 2015. 
  45. ^ "#9910 NVMe devices support". dev.haiku-os.org. Retrieved 2016-07-28. 
  46. ^ "4053 Add NVME Driver Support to Illumos". github.com. Retrieved 2016-05-23. 
  47. ^ Ho, Joshua. "iPhone 6s and iPhone 6s Plus Preliminary Results". www.anandtech.com. Retrieved 2016-06-01. 
  48. ^ Matthew Wilcox (2011-03-03). "NVM Express driver". LWN.net. Archived from the original on 2012-07-17. Retrieved 2013-11-05. 
  49. ^ Keith Busch (2013-08-12). "Linux NVMe Driver" (PDF). flashmemorysummit.com. Retrieved 2013-11-05. 
  50. ^ "IDF13 Hands-on Lab: Compiling the NVM Express Linux Open Source Driver and SSD Linux Benchmarks and Optimizations" (PDF). activeevents.com. 2013. Archived from the original (PDF) on 2014-01-11. Retrieved 2014-01-11. 
  51. ^ "Merge git://git.infradead.org/users/willy/linux-nvme". kernel.org. 2012-01-18. Retrieved 2013-11-05. 
  52. ^ "nvme -- Non-Volatile Memory Host Controller Interface". NetBSD manual pages. 2016-01-01. Retrieved 2016-09-02. 
  53. ^ David Gwynne (2014-04-16). "non volatile memory express controller (/sys/dev/ic/nvme.c)". BSD Cross Reference. Retrieved 2014-04-27. 
  54. ^ David Gwynne (2016-04-14). "man 4 nvme". OpenBSD man page. Retrieved 2016-08-07. 
  55. ^ "Faster 'NVM Express' SSD Interface Arrives on Retina MacBook and OS X 10.10.3". macrumors.com. Retrieved 11 April 2015. 
  56. ^ "nvme(7D)". Oracle. Retrieved 2014-12-02. 
  57. ^ "Intel Solid-State for NVMe Drivers". intel.com. 2015-09-25. Retrieved 2016-03-17. 
  58. ^ "VMware Compatibility Guide for NVMe devices". vmware.com. Retrieved 2016-03-17. 
  59. ^ "VSAN Now Supporting NVMe Devices". vmware.com. 2015-11-11. Retrieved 2016-03-17. 
  60. ^ "Windows 8.1 to support hybrid disks and adds native NVMe driver". Myce.com. 2013-09-06. Retrieved 2014-01-11. 
  61. ^ "Update to support NVM Express by using native drivers in Windows 7 or Windows Server 2008 R2". Microsoft. 2014-11-13. Retrieved 2014-11-17. 
  62. ^ "Windows NVM Express". Project web site. Archived from the original on June 12, 2013. Retrieved September 18, 2013. 
  63. ^ https://svn.openfabrics.org/svnrepo/nvmewin/releases/
  64. ^ "ChangeLog/1.6". qemu.org. Retrieved 21 March 2015. 
  65. ^ "Download EDK II from". SourceForge.net. Retrieved 2014-01-11. 

External links[edit]