Users Guide

Broadcom DRVLin-LPe-UG124-100
119
Emulex Drivers for Linux User Guide
When Native NVMe Multipathing is not enabled, because each controller is seen as unique, namespaces for the subsystem
are created for every controller on which the namespace is found. Processing of I/O requests by the device name are
handled only by the controller, and they are blindly passed on to the storage device. If concurrent actions occur on
namespaces on different controllers connected to the same subsystem, the application or administrator must realize that the
namespace is a single entity behind the controllers, and the application or administrator must access the two controllers
accordingly, so as to provide data coherency and to avoid data corruption.
When Native NVMe Multipathing is enabled, namespace device names are created when the device initially connects to the
subsystem, and the controller is the first path to the subsystem. The device name reflects the subsystem of which the
controller is a part. If multiple controllers connect to the same subsystem, no additional namespace device names are
created, because the controllers are simply paths that provide access to the same storage device. To maintain compatibility
with utilities that are operating on NVMe devices on which Native NVMe Multipathing is not enabled, the name format used
for the namespace device name has been kept the same. This can present some confusion, because the namespace device
name (for example, /dev/nvme0n1) contains an nvme<x> prefix that, when Native NVMe Multipathing is not enabled, was
the controller name, but on systems on which Native NVMe Multipathing is enabled, is a prefix for the subsystem instance.
In addition, for compatibility with management of NVMe controllers, the device name used for NVMe controllers (for example,
/dev/nvme2) was left the same in systems which have Native NVMe Multipathing enabled. So, when Native NVMe
Multipathing is enabled, you might see both a /dev/nvme3 controller name and a /dev/nvme3n1 namespace name, but
no correlation exists between the nvme3 portion of both names. In summary, when Native NVMe Multipathing is enabled,
the name /dev/nvme<A>n<x> means namespace number <x> on subsystem instance <A>, whereas the name /dev/
nvme<A> means controller instance <A>. The only way the two names correlate is if controller instance <A> actually
connects to subsystem instance <A>, and is therefore a path to subsystem instance <A>.
Beyond the device name difference, the other place this change in behavior is seen is in system utilities, such as nvme-cli.
For example, the nvme list
command lists all NVMe namespace devices.
NOTE: Two similar commands can be used to list all NVMe namespace devices:
nvme list (with a space) is a native NVMe CLI command.
nvme-list-linux (with a hyphen) is an Emulex OneCommand Manager CLI command.
This appendix refers to the nvme list command.
Thus, if two controllers are connected to a single subsystem with a single namespace, information similar to the following is
displayed when Native NVMe Multipathing is not enabled:
On the other hand, information similar to the following is displayed in when Native NVMe Multipathing is enabled:
Node SN Model Namespace Usage Format FW Rev
/dev/nvme0n1 0000000000000000 Linux 1 268.44 GB / 268.44 GB 512 B + 0 B 4.4.131-
/dev/nvme1n1 0000000000000000 Linux 1 268.44 GB / 268.44 GB 512 B + 0 B 4.4.131-
Node SN Model Namespace Usage Format FW Rev
/dev/nvme0n1 0000000000000000 Linux 1 268.44 GB / 268.44 GB 512 B + 0 B 4.4.131-