Symantec logo

Specifying the I/O policy

You can use the vxdmpadm setattr command to change the I/O policy for distributing I/O load across multiple paths to a disk array or enclosure. You can set policies for an enclosure (for example, HDS01), for all enclosures of a particular type (such as HDS), or for all enclosures of a particular array type (such as A/A for Active/Active, or A/P for Active/Passive).


  Note   Starting with release 4.1 of VxVM, I/O policies are recorded in the file /etc/vx/dmppolicy.info, and are persistent across reboots of the system.
Do not edit this file yourself.


The following policies may be set:

# vxdmpadm setattr enclosure enc1 iopolicy=adaptive

# vxdmpadm setattr enclosure enc0 iopolicy=balanced \

partitionsize=4096

# vxdmpadm setattr enclosure Disk iopolicy=minimumq

This is the default I/O policy for A/A arrays.

# vxdmpadm setattr arrayname SENA iopolicy=priority

# vxdmpadm setattr arraytype A/A iopolicy=round-robin

This is the default I/O policy for A/P and Asymmetric Active/Active (A/A-A) arrays.

# vxdmpadm setattr arrayname DISK iopolicy=singleactive

Scheduling I/O on the paths of an Asymmetric Active/Active array

You can specify the use_all_paths attribute in conjunction with the adaptive, balanced, minimumq, priority and round-robin I/O policies to specify whether I/O requests are to be scheduled on the secondary paths in addition to the primary paths of an Asymmetric Active/Active (A/A-A) array. Depending on the characteristics of the array, the consequent improved load balancing can increase the total I/O throughput. However, this feature should only be enabled if recommended by the array vendor. It has no effect for array types other than A/A-A.

For example, the following command sets the balanced I/O policy with a partition size of 4096 blocks (2MB) on the enclosure enc0, and allows scheduling of I/O requests on the secondary paths:

# vxdmpadm setattr enclosure enc0 iopolicy=balanced \

partitionsize=4096 use_all_paths=no

The default setting for this attribute is use_all_paths=no.

Example of applying load balancing in a SAN

This example describes how to configure load balancing in a SAN environment where there are multiple primary paths to an Active/Passive device through several SAN switches. As can be seen in this sample output from the vxdisk list command, the device c3t2d15s2 has eight primary paths:

# vxdisk list c3t2d15s2

Device: c3t2d15s2

...

numpaths: 8

c2t0d15s2 state=enabled type=primary

c2t1d15s2 state=enabled type=primary

c3t1d15s2 state=enabled type=primary

c3t2d15s2 state=enabled type=primary

c4t2d15s2 state=enabled type=primary

c4t3d15s2 state=enabled type=primary

c5t3d15s2 state=enabled type=primary

c5t4d15s2 state=enabled type=primary

In addition, the device is in the enclosure ENC0, belongs to the disk group mydg, and contains a simple concatenated volume myvol1.

The first step is to enable the gathering of DMP statistics:

# vxdmpadm iostat start

Next the dd command is used to apply an input workload from the volume:

# dd if=/dev/vx/rdsk/mydg/myvol1 of=/dev/null &

By running the vxdmpadm iostat command to display the DMP statistics for the device, it can be seen that all I/O is being directed to one path, c5t4d15s2:

# vxdmpadm iostat show dmpnodename=c3t2d15s2 interval=5 count=2

...

cpu usage = 11294us per cpu memory = 32768b

OPERATIONS KBYTES AVG TIME(ms)

PATHNAME READS WRITES READS WRITES READS WRITES

c2t0d15s2 0 0 0 0 0.000000 0.000000

c2t1d15s2 0 0 0 0 0.000000 0.000000

c3t1d15s2 0 0 0 0 0.000000 0.000000

c3t2d15s2 0 0 0 0 0.000000 0.000000

c4t2d15s2 0 0 0 0 0.000000 0.000000

c4t3d15s2 0 0 0 0 0.000000 0.000000

c5t3d15s2 0 0 0 0 0.000000 0.000000

c5t4d15s2 10986 0 5493 0 0.411069 0.000000

The vxdmpadm command is used to display the I/O policy for the enclosure that contains the device:

# vxdmpadm getattr enclosure ENC0 iopolicy

ENCLR_NAME DEFAULT CURRENT

============================================

ENC0 Round-Robin Single-Active

This shows that the policy for the enclosure is set to singleactive, which explains why all the I/O is taking place on one path.

To balance the I/O load across the multiple primary paths, the policy is set to round-robin as shown here:

# vxdmpadm setattr enclosure ENC0 iopolicy=round-robin

# vxdmpadm getattr enclosure ENC0 iopolicy

ENCLR_NAME DEFAULT CURRENT

============================================

ENC0 Round-Robin Round-Robin

The DMP statistics are now reset:

# vxdmpadm iostat reset

With the workload still running, the effect of changing the I/O policy to balance the load across the primary paths can now be seen.

# vxdmpadm iostat show dmpnodename=sdqc3t2d15s2 interval=5 \
count=2

...

cpu usage = 14403us per cpu memory = 32768b

OPERATIONS KBYTES AVG TIME(ms)

PATHNAME READS WRITES READS WRITES READS WRITES

c2t0d15s2 2041 0 1021 0 0.396670 0.000000

c2t1d15s2 1894 0 947 0 0.391763 0.000000

c3t1d15s2 2008 0 1004 0 0.393426 0.000000

c3t2d15s2 2054 0 1027 0 0.402142 0.000000

c4t2d15s2 2171 0 1086 0 0.390424 0.000000

c4t3d15s2 2095 0 1048 0 0.391221 0.000000

c5t3d15s2 2073 0 1036 0 0.390927 0.000000

c5t4d15s2 2042 0 1021 0 0.392752 0.000000

The enclosure can be returned to the single active I/O policy by entering the following command:

# vxdmpadm setattr enclosure ENC0 iopolicy=singleactive