Sun Microsystems, Inc.  Sun System Handbook - ISO 3.4 June 2011 Internal/Partner Edition
   Home | Current Systems | Former STK Products | EOL Systems | Components | General Info | Search | Feedback

Asset ID: 1-71-1004918.1
Update Date:2010-06-14
Keywords:

Solution Type  Technical Instruction Sure

Solution  1004918.1 :   Sun StorEdge[TM] SAN Software 4.4: Logical block MPxIO load balancing method  


Related Items
  • Sun Fire V480 Server
  •  
  • Sun Fire V880 Server
  •  
  • Sun Fire V1280 Server
  •  
  • Sun Storage Traffic Manager Software
  •  
Related Categories
  • GCS>Sun Microsystems>Storage Software>Storage Resource Management
  •  
  • GCS>Sun Microsystems>Servers>Entry-Level Servers
  •  

PreviouslyPublishedAs
206894


Description
A new efficient MPxIO load balancing method that improves performance for devices (FCAL) and special devices which have pre-fetch cache algorithm like Hitachi Data Systems 99x0.
The MPxIO load balancing method is available with the Sun StorEdge[TM] SAN Software 4.4
version of scsi_vhci and MPxIO driver. It is configured through the "device-
type-mpxio-options-list" property. This document offers advice on configuring
and using the new load balancing method.


Steps to Follow
The Logical Block method of load balancing is available with SAN 4.4
version of scsi_vhci and MPxIO driver, the load balancing properity is
configurable using the /kernel/drv/scsi_vhci.conf file.
This is provided through the new property, "device-type-mpxio-options-list".
The global MPxIO option, however, will be applied to all the devices that
do not have a per device type MPxIO option specified in the
device-type-mpxio-options-list. In other words, the list should be used to
override the global option.
The following is an example of a SUN/SENA device using logical block
load balance algorithm.
device-type-mpxio-options-list=
"device-type=SUN     SENA", "load-balance-options=logical-block-options";
logical-block-options="load-balance=logical-block", "region-size=15";
The MPxIO property, "device-type-mpxio-options-list", consists of
key/value pairs.
The following keys are valid for the "device-type-mpxio-options-list"
property:
1. device-type=<VendorId/PropertyId>
2. load-balance-options=<load_balance_property>
The key, "device-type" has a value of VendorId/PropertyId as reported
by the Inquiry command.  The key, "load-balance-options", has a value which
defines a new load balance property. For instance,
"load-balance-options=logical-block-options" would define a property of
"logical-block-options". The load balance property will use key/value pairs
to define the load balancing algorithm and any load balancing arguments for
the device type.
The following keys are valid for the load_balance_property:
1. load-balance
2. valid load balance algorithm arguments
The following values are valid for the "load-balance" key:
1. round-robin
2. logical-block
3. none.
If the user defines any other load-balance value, the load-balance will
default back to the global load-balance setting. A load balancing algorithm
may have
tunable arguments. Currently, the only load balancing algorithm that has
an argument is the logical-block algorithm.  The key/value pair for
this is: region-size=<value>.
The region size partitions the disk into regions, with each region
assigned to a fixed path. A shift factor of 18 results in a region size
of 128MB. Any I/O that is addressed to this region will get routed to
the same path. This is an example where it may be beneficial to
use the same path to take advantage the devices caching algorithm.
If an illegal argument is given for the specified load-balance algorithm,
it will
be ignored. If the region-size is not specified, it will default to 18.
In detail , here is the explanation of region-size variable.
This parameter is the way to determine which mpxio path will be used when
a block needs to be accessed. The formula is in /usr/src/uts/common/os/sunmdi.c source code :
path_index = (bp->b_blkno >> region_size) % path_cnt
where,
- b_blkno is the block number to be accessed. Each block is 512 bytes length.
- region_size determines the number of consecutive block for one mpxio path.
1 : 2^1 = 2 = area of 1KB
2 : 2^2 = 4 = area of 2 KB
...
15 : 2^15 = 32768  = area of 16MB
16 : 2^16 = 65536  = area of 32MB
17 : 2^17 = 131072 = area of 64MB
18 : 2^18 = 262144 = area of 128MB
For region_size=15, all blocks in the same 32768 blocks area (or in the
same offset of buffer of 16MB range) will be accessed thru 1 dedicated
mpxio path.
- path_cnt is the number of physical paths configured for device access.
Dummy example with region_size=2, path_cnt=2 :
blkno binary >>2   path_index
0     0000   0000  0
1     0001   0000  0
2     0010   0000  0
3     0011   0000  0
4     0100   0001  1
5     0101   0001  1
6     0110   0001  1
7     0111   0001  1
8     1000   0010  0
9     1001   0010  0
A     1010   0010  0
B     1011   0010  0
C     1100   0011  1
D     1101   0011  1
E     1110   0011  1
F     1111   0011  1
Here, the region size is 2^2=4, so each block within the same range of 4 blocks will be accessed thru 1 dedicated path. Region size is 4*512 = 2KB.
The following is an example for two devices:
The SUN[TM]/SENA entry
enables logical block load balancing with a region-size of 18.
The SUN/StorEdge[TM] device-type entry enables round robin load balancing.
device-type-mpxio-options-list =
"device-type=SUN     SENA",
"load-balance-options=logical-block-options",
"device-type=SUN     StorEdge 3510",
"load-balance-options=round-robin-options";
logical-block-options="load-balance=logical-block", "region-size=18";
round-robin-options="load-balance=round-robin";
Note: The Product Id in the device-type string should start at the ninth
character, otherwise the entry will not be accepted and load balancing would
default to the round-robin method. Spaces should be used to pad between the
Vendor ID and the Product ID. For example (using '%' for 'space' for the
purposes of illustration), the device-type string should read
"SUN%%%%%StorEdge 3510"
If a device performs better with a different region-size then the
user can specify a different region-size to the logical-block algorithm
by defining a new "load-balance-options" value.  For example:
"device-type=SUN     SENA", "load-balance-options=logical-block-options",
"device-type=SUN     SE6920", "load-balance-options=sun-se-options";
logical-block-options="load-balance=logical-block", "region-size=15";
sun-se-options="load-balance=logical-block", "region-size=18";
Tests that were run:
The first test was a sequential read test that starts at the beginning
of the slice and reads until the end is reached.  Each read was done
in a 256K byte size block.  The second test was a random read test
that reads 256K byte blocks from random locations on the slice.  The
third test was a caching random read test.  What this means is the the
random reads were constrained to be executed from an area on the slice
that is small enough to fit into the cache of the HDS device.
Bug report 4671130 is what caused this new algorithm to be implemented.
The new load-balancing algorithm is over what we currently
ship and what is reported in the bug report.  The Bug report 4966589 fixes
this  in Solaris[TM] 8 and confirms the method addresses performance
problem seen with other  devices.


Product
Midframe & Midrange Servers
Sun StorageTek Traffic Manager 4.4 Software
Sun StorageTek SAN Foundation Software S10 Update 1
Sun StorageTek SAN 4.4.4 Software
Sun Fire V1280 Server
Sun Fire V480 Server
Sun Fire V880 Server

MPxIO, HDS, v880, v480, v1280, Internal FC devices, SDS, SVM, VxVM, striped, striping
Previously Published As
76505

Change History
Date: 2006-06-15
User Name: 7058
Action: Update Canceled
Comment: *** Restored Published Content *** Working copy gets deleted.
SonSolve copy stays in tact with changed audience tag.
See history for details on this change.
Version: 0
Date: 2006-06-15
User Name: 7058
Action: Update Started
Comment: Updating audience tag.

Attachments
This solution has no attachment
  Copyright © 2011 Sun Microsystems, Inc.  All rights reserved.
 Feedback