Veritas Dynamic Multipathing

Veritas Dynamic Multi-Pathing (DMP) provides the multi-pathing capability to the native devices on the system. DMP creates DMP metadevices (DMP nodes) to represent all the device e paths to the same physical LUN.

How DMP works

– VxVM uses the DMP metanodes (DMP nodes) to access disk devices connected to the system. For each disk, DMP maps one node to the set of paths that are connected to the disk. The raw and block devices are created in directories /dev/vx/rdmp and /dev/vx/dmp respectively.

Setting the naming scheme

Depending on the naming scheme you have in VxVM, device names for disks are assigned. There are 2 naming schemes available :

1. OS native
2. Enclosure Based

To check the naming scheme use :

# vxddladm get namingscheme
NAMING_SCHEME PERSISTENCE LOWERCASE USE_AVID
============================================================
OS Native No Yes Yes
To change the naming scheme through command line

# vxddladm set namingscheme=ebn
# vxddladm get namingscheme
NAMING_SCHEME PERSISTENCE LOWERCASE USE_AVID
============================================================
Enclosure Based Yes Yes Yes
How to check if DMP is enabled

1. The easiest way to check whether DMP is enabled or not, is to check the vxdisk path command :

# vxdisk path
SUBPATH DANAME DMNAME GROUP STATE
c1t0d0s2 c1t0d0s2 mydg01 mydg ENABLED
c4t0d0s2 c1t0d0s2 mydg01 mydg ENABLED
c1t1d0s2 c1t1d0s2 mydg02 mydg ENABLED
c4t1d0s2 c1t1d0s2 mydg02 mydg ENABLED
As you can see, there are 2 paths for each of the 2 disks mydg01 and mydg02.

2. Another way is to check multipathing at a single disk :

# vxdisk list c2t0d0s2

Device c2t0d0
devicetag c2t0d0
type sliced
hostid system01
.
.
.
Multipathing information:
numpaths: 2
c2t0d0s2 state=enabled type=primary
c1t0d0s2 state=disabled type=secondary
The numpath parameter shows that there are 2 paths to the disk.

3. Alternatively we can also use the below command to check the multipathing :

# vxdmpadm getsubpaths dmpnodename=devicename
# vxdmpadm getsubpaths dmpnodename=c2t66d0s2

NAME STATE[A] PATH-TYPE[M] CTLR-NAME ENCLR-TYPE ENCLR-NAME ATTRS
=======================================================================
c2t66d0s2 ENABLED(A) PRIMARY c2 ACME enc0 –
c1t66d0s2 ENABLED PRIMARY c1 ACME enc0 –
Getting DMP node information

To list all the DMP nodes under all enclosures :

# vxdmpadm list dmpnode all
To list all the DMP nodes under a specific enclosure enc0 :

# vxdmpadm getdmpnode enclosure=enc0

NAME STATE ENCLR-TYPE PATHS ENBL DSBL ENCLR-NAME
=========================================================
c2t1d0s2 ENABLED T300 2 2 0 enc0
c2t1d1s2 ENABLED T300 2 2 0 enc0
c2t1d2s2 ENABLED T300 2 2 0 enc0
c2t1d3s2 ENABLED T300 2 2 0 enc0
To get information about a particula DMP node :

# vxdmpadm getdmpnode nodename=c0t5006016041E03B33d0s2

NAME STATE ENCLR-TYPE PATHS ENBL DSBL ENCLR-NAME
====================================================================
emc_clariion0_16 ENABLED EMC_CLARiiON 6 6 0 emc_clariion0
Displaying information about paths

To display all the subpaths known to DMP :

# vxdmpadm getsubpaths

NAME STATE[A] PATH-TYPE[M] DMPNODENAME ENCLR-NAME CTLR ATTRS
=======================================================================
c1t65d0s2 ENABLED(A) – Disk_1 Disk c1 –
c1t66d0s2 ENABLED(A) – Disk_2 Disk c1 –
c2t65d0s2 ENABLED(A) – Disk_1 Disk c2 –
c2t66d0s2 ENABLED(A) – Disk_2 Disk c2 –
To get the information on all the subpaths connected to the same HBA card controller :

# vxdmpadm getsubpaths ctlr=c2

NAME STATE[-] PATH-TYPE[-] CTLR-NAME ENCLR-TYPE ENCLR-NAME ATTRS
======================================================================
c2t1d0s2 ENABLED(A) PRIMARY c2t1d0s2 ACME enc0 –
c2t2d0s2 ENABLED(A) PRIMARY c2t2d0s2 ACME enc0 –
c2t3d0s2 DISABLED SECONDARY c2t3d0s2 ACME enc0 –
c2t4d0s2 ENABLED SECONDARY c2t4d0s2 ACME enc0 –
Similarly, to get information on subpaths connected to the same enclosure and portid :

# vxdmpadm getsubpaths enclosure=enc0 portid=1A

NAME STATE[A] PATH-TYPE[M] DMPNODENAME ENCLR-NAME CTLR ATTRS
=======================================================================
c1t65d0s2 ENABLED(A) PRIMARY c1t65d0s2 enc0 c1 –
c1t66d0s2 ENABLED(A) PRIMARY c1t66d0s2 enc0 c1 –
To list all the subpaths through an array port through the WWN:

# vxdmpadm getsubpaths pwwn=20:00:00:E0:8B:06:5F:19

NAME STATE[A] PATH-TYPE[M] DMPNODENAME ENCLR-NAME CTLR ATTRS
=======================================================================
c1t65d0s2 ENABLED(A) PRIMARY c1t65d0s2 HDS9500-ALUA0 c1 –
c1t66d0s2 ENABLED(A) PRIMARY c1t66d0s2 HDS9500-ALUA0 c1 –
Displaying information about controllers

To diplay all the HBA controllers available on the system :

# vxdmpadm listctlr all

CTLR-NAME ENCLR-TYPE STATE ENCLR-NAME
===================================================
c1 OTHER ENABLED other0
c2 X1 ENABLED jbod0
c3 ACME ENABLED enc0
c4 ACME ENABLED enc0
To list controllers under a specific enclosure :

# vxdmpadm listctlr enclosure=enc0

CTLR-NAME ENCLR-TYPE STATE ENCLR-NAME
======================================================
c2 ACME ENABLED enc0
c3 ACME ENABLED enc0
Displaying information about enclosures

To list information about all enclosures in the system :

# vxdmpadm listenclosure all

ENCLR_NAME ENCLR_TYPE ENCLR_SNO STATUS ARRAY_TYPE LUN_COUNT
================================================================================
Disk Disk DISKS CONNECTED Disk 6
SENA0 SENA 508002000001d660 CONNECTED A/A 57
enc0 T3 60020f20000001a90000 CONNECTED A/P 30
To display information about specific enclosure :

# vxdmpadm listenclosure enc0

ENCLR_NAME ENCLR_TYPE ENCLR_SNO STATUS ARRAY_TYPE LUN_COUNT
=============================================================================
enc0 T3 60020f20000001a90000 CONNECTED A/P 30
Displaying I/O statistics

vxdmp iostat command can be used to gather and display I/O statistics on a specific path, DMP node or enclosure. To start gathering the statistics :

# vxdmpadm iostat start
To display I/O statistics on all paths and a cumulative r/w operations :

# vxdmpadm iostat show all
cpu usage = 7952us per cpu memory = 8192b
OPERATIONS KBYTES AVG TIME(ms)
PATHNAME READS WRITES READS WRITES READS WRITES
c0t0d0 1088 0 557056 0 0.00 0.00
c2t118d0 87 0 44544 0 0.00 0.00
c3t118d0 0 0 0 0 0.00 0.00
c2t122d0 87 0 44544 0 0.00 0.00
To display I/O statistics on specific pathname, DMP nodename and enclosure name :

# vxdmpadm iostat show pathname=c3t115d0s2
cpu usage = 8132us per cpu memory = 4096b
OPERATIONS BYTES AVG TIME(ms)
PATHNAME READS WRITES READS WRITES READS WRITES
c3t115d0s2 0 0 0 0 0.00 0.00
# vxdmpadm iostat show dmpnodename=c0t0d0s2
cpu usage = 8501us per cpu memory = 4096b
OPERATIONS BYTES AVG TIME(ms)
PATHNAME READS WRITES READS WRITES READS WRITES
c0t0d0s2 1088 0 557056 0 0.00 0.00
# vxdmpadm iostat show enclosure=Disk
cpu usage = 8626us per cpu memory = 4096b
OPERATIONS BYTES AVG TIME(ms)
PATHNAME READS WRITES READS WRITES READS WRITES
c0t0d0s2 1088 0 57056 0 0.00 0.00
To specify interval and samples for iostat command :

# vxdmpadm iostat show dmpnodename=emc_clariion0_342 interval=1 count=2
To reset the I/O statistics counters to zero :

# vxdmpadm iostat reset
To disable the gathering of I/O statistics :

# vxdmpadm iostat stop
I/O policies

You can set I/O policies to distribute the load across multiple paths the storage array. The I/O policies are recorded in the file /etc/vx/dmppolicy.info. Do not edit this file manually. The I/O policies that can be configured are :

adaptive
balanced
minimumq
priority
round-robin
singleactive
To set the required policy on an array :

# vxdmpadm setattr enclosure enc1 iopolicy=[policy]
To display a set policy on the enclosure :

# vxdmpadm getattr enclosure Disk iopolicy

ENCLR_NAME DEFAULT CURRENT
—————————————
Disk MinimumQ Balanced