Sun System Handbook - ISO 3.4 June 2011 Internal/Partner Edition | |||
|
|
Solution Type Technical Instruction Sure Solution 1004918.1 : Sun StorEdge[TM] SAN Software 4.4: Logical block MPxIO load balancing method
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 |
||||||||||||
|