Asymmetric Logical Unit Assignment

The Linux SCSI Target Wiki

(Difference between revisions)
Jump to: navigation, search
m (Implementation)
Line 1: Line 1:
-
'''Asymmetric Logical Unit Assignment''' (ALUA) is a multipathing method that allows each SCSI Initiator port to manage certain connection attributes on a per SCSI Target port basis.
+
'''Asymmetric Logical Unit Assignment''' (ALUA) is a multipathing method that allows each SCSI Target port to manage access states and path attributes using an explict method (via MO_SET_TARGET_PGS from the SCSI Initiator port) or implictly using target side configfs operations by a target administrator.
-
 
+
== Overview ==  
== Overview ==  

Revision as of 00:54, 20 November 2010

Asymmetric Logical Unit Assignment (ALUA) is a multipathing method that allows each SCSI Target port to manage access states and path attributes using an explict method (via MO_SET_TARGET_PGS from the SCSI Initiator port) or implictly using target side configfs operations by a target administrator.

Contents

Overview

SCSI-4 Asymmetric Logical Unit Assigment (ALUA) is a method for outer-nexus OS dependent multipathing on the SCSI Initiator port that allows ALUA Access States to be set on per SCSI target port basis. This allows SCSI Initiator ports to make intelligent path decisions to optimize usage of the available bandwith. ALUA can be used for iSCSI and other SCSI transport fabrics like Fibre Channel (FC) and Serial Attached SCSI (SAS).

Standards compliance

The TCM/configFS ALUA implementation conforms to SPC-4 r17. ALUA with SPC-4 PRs is supported on Target ports with Activate Persist across Target power loss (PR APTPL) with TCM 3.x.

Supported features

ALUA engine

CLI

lio-utils supports the following operations:

Unsupported features

Implementation

SPC-4 ALUA implict/explict level fabric support in a SCSI fabric module independent method in TCM (see target_core_alua.c).

The patch sets were as follows:

Any Host OS that is SPC-3/SPC-4 MPIO/ALUA capable should work just fine, using OPTIMIZED and NON-OPTIMIZED states. Explicit ALUA using SET_TARGET_PORT_GROUPS can change ALUA access states according to admin or automated initiator side actions.

Test and validation

The implementation has been extensively validated against the following OSs/Initiators:

Setup

Implicit ALUA is controlled through target-side configFS actions with target_core_mod and iscsi_target_mod, or through the following ALUA lio-utils CLI operations:

tcm_node.py

  --addlungp=LU_GP_NAME
                        Add ALUA Logical Unit Group
  --addtgptgp=HBA/DEV <TG_PT_GP_NAME>, --addaluatpg=HBA/DEV <TG_PT_GP_NAME>
                        Add ALUA Target Port Group to Storage Object
  --clearaluapref=HBA/DEV <TG_PT_GP_NAME>
                        Clear ALUA Target Port Group Preferred Bit
  --dellungp=LU_GP_NAME
                        Delete ALUA Logical Unit Group
  --deltgptgp=HBA/DEV TG_PT_GP_NAME, --delaluatpg=HBA/DEV TG_PT_GP_NAME
                        Delete ALUA Target Port Group from Storage Object
  --listlugps           List ALUA Logical Unit Groups
  --listtgptgp=HBA/DEV <TG_PT_GP_NAME>, --listaluatpg=HBA/DEV <TG_PT_GP_NAME>
                        List specific ALUA Target Port Group for Storage
                        Object
  --listtgptgps=HBA/DEV, --listaluatpgs=HBA/DEV
                        List all ALUA Target Port Groups for Storage Object
  --setaluapref=HBA/DEV <TG_PT_GP_NAME>
                        Set ALUA Target Port Group Preferred Bit
  --setaluastate=HBA/DEV <TG_PT_GP_NAME> <ALUA_ACCESS_STATE>
                        Set ALUA access state for TG_PT_GP_NAME on Storage
                        Object.  The value access states are "o" =
                        active/optimized, "a" = active/nonoptimized, "s" =
                        standby, "u" = unavailable
  --setaluatype=HBA/DEV <TG_PT_GP_NAME> <ALUA_ACCESS_TYPE>
                        Set ALUA access type for TG_PT_GP_NAME on Storage
                        Object.  The value type states are "both" =
                        implict/explict, "explict", "implict", or "none"
  --setlugp=HBA/DEV LU_GP_NAME
                        Set ALUA Logical Unit Group

lio_node.py

  --cleartgptoff=TARGET_IQN TPGT LUN, --clearaluaoff=TARGET_IQN TPGT LUN
                        Clear ALUA Target Port Secondary State OFFLINE
  --settgptgp=TARGET_IQN TPGT LUN TG_PT_GP_NAME, --setaluatpg=TARGET_IQN TPGT LUN TG_PT_GP_NAME
                        Set ALUA Target Port Group for LIO-Target Port/LUN
  --settgptoff=TARGET_IQN TPGT LUN, --setaluaoff=TARGET_IQN TPGT LUN
                        Set ALUA Target Port Secondary State OFFLINE
  --showtgptgp=TARGET_IQN TPGT LUN
                        Show ALUA Target Port Group for LIO-Target Port/LUN

ConfigFS object tree

     # ALUA Logical Unit Group(s), which contain associations to storage objects
     # in /sys/kernel/config/target/core/$HBA/$DEV/
     target# tree /sys/kernel/config/target/core/alua/
     /sys/kernel/config/target/core/alua/
     `-- lu_gps
         `-- default_lu_gp
             |-- lu_gp_id
             `-- members
         `-- lio_lu_gp
             |-- lu_gp_id
             `-- members

     # For ALUA Target Port Groups, which contain associations to fabric module
     # SCSI Target Port/LUNs for each individual storage object
     target# tree /sys/kernel/config/target/core/iblock_0/lvm_test0/alua
     /sys/kernel/config/target/core/iblock_0/lvm_test0/alua
     |-- default_tg_pt_gp
     |   |-- alua_access_state
     |   |-- alua_access_status
     |   |-- alua_access_type
     |   |-- members
     |   |-- nonop_delay_msecs
     |   |-- preferred
     |   `-- tg_pt_gp_id
     |-- lio_alua_east
     |   |-- alua_access_state
     |   |-- alua_access_status
     |   |-- alua_access_type
     |   |-- members
     |   |-- nonop_delay_msecs
     |   |-- preferred
     |   `-- tg_pt_gp_id
     `-- lio_alua_west
         |-- alua_access_state
         |-- alua_access_status
         |-- alua_access_type
         |-- members
         |-- nonop_delay_msecs
         |-- preferred
         `-- tg_pt_gp_id

This running configuration provides an example for implict and explict ALUA operation.

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox
Google AdSense