NVMe Overview
You can use the non-volatile memory express (NVMe) protocol to provide storage in a SAN environment. The NVMe protocol is optimized for performance with solid state storage.
For NVMe, storage targets are called namespaces. An NVMe namespace is a quantity of non-volatile storage that can be formatted into logical blocks and presented to a host as a standard block device. You create namespaces and subsystems, and then map the namespaces to the subsystems, similar to the way LUNs are provisioned and mapped to igroups for FC and iSCSI.
NVMe targets are connected to the network through a standard FC infrastructure using FC switches or a standard TCP infrastructure using Ethernet switches and host-side adapters.
Support for NVMe varies based on your version of ONTAP. See NVMe support and limitations for details.
What NVMe is
The nonvolatile memory express (NVMe) protocol is a transport protocol used for accessing nonvolatile storage media.
NVMe over Fabrics (NVMeoF) is a specification-defined extension to NVMe that enables NVMe-based communication over connections other than PCIe. This interface allows for external storage enclosures to be connected to a server.
NVMe is designed to provide efficient access to storage devices built with non-volatile memory, from flash technology to higher performing, persistent memory technologies. As such, it does not have the same limitations as storage protocols designed for hard disk drives. Flash and solid state devices (SSDs) are a type of non-volatile memory (NVM). NVM is a type of memory that keeps its content during a power outage. NVMe is a way that you can access that memory.
The benefits of NVMe include increased speeds, productivity, throughput, and capacity for data transfer. Specific characteristics include the following:
-
NVMe is designed to have up to 64 thousand queues.
Each queue in turn can have up to 64 thousand concurrent commands.
-
NVMe is supported by multiple hardware and software vendors
-
NMVe is more productive with Flash technologies enabling faster response times
-
NVMe allows for multiple data requests for each “request” sent to the SSD.
NVMe takes less time to decode a “request” and does not require thread locking in a multithreaded program.
-
NVMe supports functionality that prevents bottlenecking at the CPU level and enables massive scalability as systems expand.
About NVMe namespaces
An NVMe namespace is a quantity of non-volatile memory (NVM) that can be formatted into logical blocks. Namespaces are used when a storage virtual machine is configured with the NVMe protocol and are the equivalent of LUNs for FC and iSCSI protocols.
One or more namespaces are provisioned and connected to an NVMe host. Each namespace can support various block sizes.
The NVMe protocol provides access to namespaces through multiple controllers. Using NVMe drivers, which are supported on most operating systems, solid state drive (SSD) namespaces appear as standard-block devices on which file systems and applications can be deployed without any modification.
A namespace ID (NSID) is an identifier used by a controller to provide access to a namespace. When setting the NSID for a host or host group, you also configure the accessibility to a volume by a host. A logical block can only be mapped to a single host group at a time, and a given host group does not have any duplicate NSIDs.
About NVMe subsystems
An NVMe subsystem includes one or more NVMe controllers, namespaces, NVM subsystem ports, an NVM storage medium, and an interface between the controller and the NVM storage medium. When you create an NVMe namespace, by default it is not mapped to a subsystem. You can also choose to map it a new or existing subsystem.
-
Learn to provision NVMe storage on ASA, AFF, and FAS systems
-
Learn to map an NVMe namespace to a subsystem on ASA AFF and FAS systems.
-
Learn to provision SAN storage on ASA r2 (ASA A1K, ASA A70, or ASA A90) storage systems.