[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[dm-devel] Priozier for remote port on fibre channel devices



Hello List,

I'm currently facing a problem with a storage virtualization device which is located in two different datacenters and shows up as another path to a configured SAN-LUN.
The virtualization device is from EMC² and is called V-PLEX.

So I have something like this:

        DC A
Host ---VPLEX-DC A---LUN storage A
  |           |
..|...........|...................
  |     DC B  |
  ------VPLEX-DC B---LUN storage B

The VPLEX device itself is for storage based mirroring and synchronizes write access to storage A to storage B and the other way around.

My problem is, that the virtual LUN I get from the VPLEX does not have any prioritization given by dm-multipath and looks like this:

mpath3 (36000144000000010e06d8f12ec30dfef) dm-9 EMC,Invista
[size=5.0G][features=1 queue_if_no_path][hwhandler=0][rw]
\_ round-robin 0 [prio=1][active]
 \_ 5:0:1:2 sdad 65:208 [active][ready]
 \_ 5:0:4:2 sdak 66:64  [active][ready]
 \_ 5:0:5:2 sdap 66:144 [active][ready]
 \_ 4:0:0:2 sdc  8:32   [active][ready]
 \_ 4:0:1:2 sdh  8:112  [active][ready]
 \_ 4:0:4:2 sdo  8:224  [active][ready]
 \_ 4:0:5:2 sdt  65:48  [active][ready]
 \_ 5:0:0:2 sdy  65:128 [active][ready]

That way, write access is made round-robin and access to the "remote-devices" - device located in the other DC - creating duplicate traffic through the
SAN switches as the access has to be routed to the remote VPLEX-B and it will write to the local VPLEX-A.

I wanted to solve this problem by giving priorities to a path by its remote-port - which is different for each connection to a SAN device. Unfortunately
there currently doesn't exist any priorizer and I have to write one on my own.
To make the definition flexible, I would like to have a file with a list of port-wwns associated with a priority.

For versions shipped with RHEL5 this could be a simple shell script which simply looks up the sysfs file structures of a given device. For RHEL6 this has to be
a binary library. So writing a binary version will make more sense than maintaining two different solutions.

A P-o-c script I wrote runs fine on RHEL5 - althouh a bit slow - but shows the results I wanted to see:

--------- script --------
#! /bin/bash

PRIO_DEF="/etc/dm-multipath-vplex.conf"

DEVICE=${1#/dev/*}

# find scsi-device address
SCSI_ADDR="$(basename $(readlink /sys/block/$DEVICE/device/scsi_device*) )"
# 3:0:2:0

# remove trailing :0
SCSI_ADDR=${SCSI_ADDR%:*}
# 3:0:2

# change x:x:x to x:x-x
SCSI_ADDR=$(echo "$SCSI_ADDR" | sed -e 's/:\([0-9]\)$/-\1/' )

# get port_name for scsi-remote-port
RPORT=$(cat "/sys/class/fc_remote_ports/rport-$SCSI_ADDR/port_name")

# return prio
IGNORECASE=1
awk "/$RPORT/ { print \$1 }"  $PRIO_DEF
------------------------------------------

---------- dm-multipath-vplex.conf --------
# VPLEX DC A
1 0x50001442606d8f00
1 0x50001442606d8f01
1 0x50001442606d8f02
1 0x50001442606d8f03
1 0x50001442706d8f00
1 0x50001442706d8f01
1 0x50001442706d8f02
1 0x50001442706d8f03
# VPLEX DC B
2 0x5000144260641900
2 0x5000144260641901
2 0x5000144260641902
2 0x5000144260641903
2 0x5000144270641900
2 0x5000144270641901
2 0x5000144270641902
2 0x5000144270641903
--------------------------------------------

Do you think that this solutions is worth including it as rport-prio into device mappers source? My C language skills are a bit rusty, but I at least managed to
find out the SCSI-address of a given device and build the sysfs-path to the remote port.
The rest should also be manageable, but I wanted to ask as early a possible to have it included into mainstream and get some feedback on this.


Best regrads,

Andreas Bleischwitz


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]