scsi_vhci - SCSI virtual host controller interconnect driver
The scsi_vhci driver is a SCSA compliant pseudo nexus driver that supports Solaris operating system I/O multipathing services for SCSI-3 devices. This driver introduces a fundamental restructuring of the Solaris device tree to enable a multipath device to be represented as single device instance rather than as an instance per physical path as in earlier Solaris versions.
The logical units (LUNs) associated multipath SCSI target devices managed by this driver are identified and represented by using the SCSI-3 VPD page (0x83) LUN global unique identifier (GUID) represented as hexadecimal number (64/128 bits)
Symbolic links in /dev/[r]dsk and /dev/scsi/changer continue to adhere to the cNt NdNsN format. cN is the logical controller number assigned to this driver instance. tN is the GUID.
Symbolic links in /dev/rmt/#[l|m|h|c|u],[b],[n] also adhere to the same format as non-multipath devices. Because of persistent binding of tape devices, you may want to remove old non-multipath links when enabling them for multipath.
The following is an example of a system with an A5000 storage array:
... /dev/rdsk/c4t200000203709C3F5d0s0 -> ../../devices/ scsi_vhci/ssd@g200000203709c3f5:a,raw ... /dev/rdsk/c4t200000203709C3F5d0s7 -> ../../devices/ scsi_vhci/ssd@g200000203709c3f5:h,ra ...
The following is an example of a system with a T300 storage array:
... /dev/rdsk/c1t60020F200000033939C2C2B60008D4AEd0s0 -> ../../devices/scsi_vhci/ ssd@g60020f200000033939a2c2b60008d4ae:a,raw ... /dev/rdsk/c1t60020F200000033939A2C2B60008D4AEd0s7 -> ../../devices/scsi_vhci/ ssd@g60020f200000033939a2c2b60008d4ae:h,raw
The scsi_vhci driver receives naming and transport services from one or more physical HBA (host bus adapter) devices. To support multi-pathing, a physical HBA driver must have its multipathing enabled and comply with the multipathing services provided by this driver.
The scsi_vhci driver supports the standard functions provided by the SCSA interface.
For each candidate SCSI target device, the scsi_vhci code must identify a failover module to support the device. If a failover module can't be identified, the device will not function under scsi_vhci multipathing control. For SCSI target devices that support the standard Target Port Group Select, no special vendor/product knowledge is needed. For other SCSI target devices, each failover module understands which devices it supports.
When autoconfiguration does not result in the desired configuration, a vendor/product specific override mechanism is available. This scsi_vhci.conf base mechanism can be used to direct a device to a specific failover module (or to indicate that a device should not be under scsi_vhci multipathing control by way of NONE). In scsi_vhci.conf, the property 'scsi-vhci-failover-override' defines overrides in scsi_get_device_type_string(9F) form. To add a third-party (non-Sun) symmetric storage device to run under scsi_vhci (and thereby take advantage of scsi_vhci multipathing), you add the vendor ID and product ID for the device, as those strings are returned by the SCSI Inquiry command. For example, to add a device from a vendor with the ID of "Acme" and a product ID of "MSU", you would add:
scsi-vhci-failover-override = "Acme MSU", "f_sym",
In addition to "Acme", you also might want to add another entry, for example, a device from "XYZ" vendor with a product ID of "ABC":
scsi-vhci-failover-override = "Acme MSU", "f_sym", "XYZ ABC", "f_sym";
As a last override, you might add an entry so that no devices from "ABC" vendor use scsi_vhci multipathing:
scsi-vhci-failover-override = "Acme MSU", "f_sym", "XYZ ABC", "f_sym", "ABC ", "NONE";
In every entry of scsi-vhci-failover-override, if the vendor ID is less than 8 characters, it must be padded with spaces (ASCII 0x20) to 8 characters. The product ID contains at most sixteen left-adjusted ASCII characters. The product ID has an implicit wild card rule. The product ID in the returned SCSI inquiry string is considered a match if that has the specified product ID as its prefix. For example,
scsi-vhci-failover-override = "XYZ ABC", "f_sym";
will match both product ID ABC3000 and ABC4500 below from vendor XYZ.
"XYZ ABC3000", "f_sym" "XYZ ABC4500", "f_sym"
64–bit kernel module (SPARC).
64-bit kernel module (amd64).
Driver configuration file.
See attributes(7) for descriptions of the following attributes:
fcp(4D), fctl(4D), fp(4D), mpt(4D), sd(4D), sgen(4D), ssd(4D), st(4D), attributes(7), eeprom(8), mpathadm(8), prtconf(8), stmsboot(8), scsi_abort(9F), scsi_get_device_type_scsi_options(9F), scsi_get_device_type_string(9F), scsi_ifgetcap(9F), scsi_reset(9F), scsi_transport(9F), scsi_extended_sense(9S), scsi_inquiry(9S), scsi_pkt(9S)
Small Computer System Interface-3 (SCSI-3)
Each LUN can support a maximum of 64 physical paths.
In previous releases, the scsi_vhci.conf file supported the mpxio-disable property, which allowed you to disable Solaris I/O multipathing on a system-wide basis. This property is not present in the current release of the Solaris operating system. Multipathing is always enabled in scsi_vhci. If you want to disable multipathing, use the mechanisms provided by the HBA drivers. See fp(4D) and mpt(4D).
In previous releases, the override mechanism was based on the scsi_get_device_type_scsi_options(9F) defined "device-type-scsi-options-list" property. During upgrade, scsi_vhci.conf is converted to the new form. After upgrade, a scsi_vhci.conf modification based on the old mechanism is silently ignored.
In previous releases, Solaris I/O multipathing was also known as MPxIO and Sun StorEdge Traffic Manager (STMS).