Subject: Re: Multi-path SCSI
To: None <sommerfeld@netbsd.org>
From: Jason Thorpe <thorpej@shagadelic.org>
List: tech-kern
Date: 09/21/2004 15:09:56
--Apple-Mail-12--614204044
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset=US-ASCII; format=flowed


On Sep 20, 2004, at 5:35 PM, Bill Sommerfeld wrote:

>> The question is what do we do if we find a match?
>
> Solaris copes with this by optionally reparenting fiber channel disks
> to a "virtual host controller" known as "scsi_vhci"; it also changes
> the device names from the merely unwieldy cNtNdN format to one where
> the "target" part of the device name is the world-unique value.
>
> IMHO, the former is one reasonable way to avoid having to turn the
> device tree into a less-constrained graph; the latter is a pain.

I was thinking about this, and discussing it with Bill (the other Bill 
:-) when I suggested he post to tech-kern about it...

Initially, I was thinking this could be handled with "wedges" (which, 
BTW, I have a prototype implementation of that I plan on posting about 
shortly).  My original idea is that you could simply have "multiple" 
parents of a wedge (representing the various paths) rather than one.

However, I no longer think that's a good idea... there could be all 
sorts of synchronization issues if you wanted to try and load-balance 
traffic across the multiple paths.  (This is even more fun with iSCSI 
... you can have multiple connections within a single session in iSCSI, 
with the session being the path, if I'm not mistaken...)

Anyway, I think maybe something a little simpler than the scsi_vhci 
idea from Solaris could be good... basically, generalize the idea of 
multi-path in our SCSI mid-layer, and instead of a device simply 
pointing to a scsipi_channel, allow it to have a list of channel 
pointers, representing the individual paths.  We could keep a global 
list of scsipi_periphs, and when a new one is found, do multi-path 
detection by scanning that list.

Regarding the device name, my wedges implementation will take care of 
that.  Wedges have a "wedge name" in UTF-8, sort of like a volume name. 
  This wedge name could be used (and will be, eventually, in my 
implementation) to create a device node in /dev that corresponds to the 
wedge.

         -- Jason R. Thorpe <thorpej@shagadelic.org>


--Apple-Mail-12--614204044
content-type: application/pgp-signature; x-mac-type=70674453;
	name=PGP.sig
content-description: This is a digitally signed message part
content-disposition: inline; filename=PGP.sig
content-transfer-encoding: 7bit

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3 (Darwin)

iD8DBQFBUKa0OpVKkaBm8XkRAgm3AKCf8HXRJxkqBXaRprOgB+YlzpHhXwCfT7jJ
S3/EFRYD9LpUvvsFzXhMTxo=
=fn6I
-----END PGP SIGNATURE-----

--Apple-Mail-12--614204044--