Accessing NVMe volumes

I/O is directed to virtual device targets by the Linux host. The DM-MP manages the physical paths underlying these virtual targets.

Virtual devices are I/O targets

Make sure you are running I/O only to the virtual devices created by DM-MP and not to the physical device paths. If you are running I/O to the physical paths, DM-MP cannot manage a failover event and the I/O fails.

To run raw I/O, make sure your targets are virtual devices created by DM-MP to manage the physical paths. You can access these block devices through the dm device or the symlink in /dev/mapper, for example:

/dev/dm-1
/dev/mapper/eui.00001bc7593b7f5f00a0980000af4462

Example

The following example output from the nvme list command shows the host node name and its correlation with the namespace ID.

NODE         SN           MODEL           NAMESPACE

/dev/nvme1n1 021648023072 NetApp E-Series 10
/dev/nvme1n2 021648023072 NetApp E-Series 11
/dev/nvme1n3 021648023072 NetApp E-Series 12
/dev/nvme1n4 021648023072 NetApp E-Series 13
/dev/nvme2n1 021648023151 NetApp E-Series 10
/dev/nvme2n2 021648023151 NetApp E-Series 11
/dev/nvme2n3 021648023151 NetApp E-Series 12
/dev/nvme2n4 021648023151 NetApp E-Series 13	
Column Description

Node

The node name includes two parts:

  • The notation nvme1 represents controller A and nvme2 represents controller B.
  • The notation n1, n2, and so on represent the namespace identifier from the host perspective. These identifiers are repeated in the table, once for controller A and once for controller B.

Namespace

The Namespace column lists the namespace ID (NSID), which is the identifier from the storage array perspective.

In the following multipath -ll output, the optimized paths are shown with a prio value of 50, while the non-optimized paths are shown with a prio value of 10.

The Linux operating system routes I/O to the path group that is shown as status=active, while the path groups listed as status=enabled are available for failover.

eui.00001bc7593b7f500a0980000af4462 dm-0 NVME,NetApp E-Series
size=15G features='1 queue_if_no_path' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=50 status=active
| `- #:#:#:# nvme1n1 259:5 active ready running
`-+- policy='service-time 0' prio=10 status=enabled
  `- #:#:#:# nvme2n1 259:9  active ready running

eui.00001bc7593b7f5f00a0980000af4462 dm-0 NVME,NetApp E-Series
size=15G features='1 queue_if_no_path' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=0 status=enabled
| `- #:#:#:# nvme1n1 259:5 failed faulty running
`-+- policy='service-time 0' prio=10 status=active
  `- #:#:#:# nvme2n1 259:9  active ready running
Line item Description

policy='service-time 0' prio=50 status=active

This line and the following line show that nvme1n1, which is the namespace with an NSID of 10, is optimized on the path with a prio value of 50 and a status value of active.

This namespace is owned by controller A.

policy='service-time 0' prio=10 status=enabled

This line shows the failover path for namespace 10, with a prio value of 10 and a status value of enabled. I/O is not being directed to the namespace on this path at the moment.

This namespace is owned by controller B.

policy='service-time 0' prio=0 status=enabled

This example shows multipath -ll output from a different point in time, while controller A is rebooting. The path to namespace 10 is shown as failed faulty running with a prio value of 0 and a status value of enabled.

policy='service-time 0' prio=10 status=active

Note that the active path refers to nvme2, so the I/O is being directed on this path to controller B.