Raw-device-mapping-support

Support for Virtio-scsi Passthrough
The corresponding BP is https://blueprints.launchpad.net/nova/+spec/support-for-raw-device-mapping

Virtio-scsi Passthrough
With Virtio-scsi Passthrough, the storage logical unit number (LUN) can be directly connected to a instance or VM from the storage area network (SAN).

For most data center applications, including databases (Oracle RAC, etc), customer relationship management (CRM)applications and enterprise resource planning (ERP) applications, Virtio-scsi Passthrough can be used for configurations involving clustering between virtual machines, between physical and virtual machines or where SAN-aware applications are running inside a virtual machine.

Virtio-scsi Passthrough, which permits the use of existing SAN commands, is generally used to improve performance in I/O-intensive applications and block locking. Physical mode provides access to most hardware functions of the storage system that is mapped.

Goals

 * 1) Boot from a Virtio-scsi Passthrough volume
 * 2) Attach a Virtio-scsi Passthrough volume to instance

Libvirt Driver Support
The domain xml for Virtio-scsi Passthrough is composed by a scsi controller with "virtio-scsi" model and a lun device which is connected to the controller.

The sample xml as follows:

    



The device LUN whose path is '/dev/mapper/360022a110000ecba5db427db00000023' in the physical server can be connected by the instance.For example, running the command "sg_inq /dev/sdb" in the guest.

Notices
When we only specify a disk device with "scsi" bus but without a scsi controller, libvirt will create an scsi controller of "lsi" model by default, which will make Virtio-scsi Passthrough unable to work properly.

If we attach a Virtio-scsi Passthrough volume to an instance already with a scsi controller other than "virtio-scsi" model, we must first attach a "virtio-scsi" controller with a "index" value different from exists scsi controllers, and then attach the volume and set the "controller" in "address" sub-element of disk config to the correct "index" value of the new attached "virtio-scsi" controller.

Related works

 * 1) Block-device-mapping-v2 has already support attach or boot from a volume which is connected to Instance via scsi bus and with a device type of "lun". But cannot generate a virtio-scsi controller.
 * 2) Libvirt-virtio-scsi-driver BP ([1]) whose milestone target is icehouse-3 is aim to support generate a virtio-scsi controller when using an image with virtio-scsi property. But it seems not to take boot-from-volume and attach-volume into account.

Implementation
Disk Configuration

The disk configuration needed by Virtio-scsi Passthrough has already partially support by block-device-mapping-v2 extension, as follows: --block-device id=xxx,source=volume,dest=volume,bus=scsi,type=lun

However, we need to support specify the "controller" of "address" sub-element for the block-device when attaching an Virtio-scsi Passthrough device, see follows.

Virtio-scsi Passthrough volume

Add a "hw_scsi_model" metadata-property to volume with default value "lsi", and can be set to "virtio-scsi" to identify the volume needed be used as Virtio-scsi Passthrough.

Boot from Virtio-scsi Passthrough volume

In libvirt driver, append the virtio-scsi controller (will be introduced by libvirt-virtio-scsi-driver BP [1]) if we booting from a volume with "hw_scsi_model=virtio-scsi" metadata.

Attach Virtio-scsi Passthrough volume


 * 1) If current instance have not a virtio-scsi controller, we first attach a virtio-scsi controller with an unique "index" value.
 * 2) Set the "controller" of "address" sub-element for the volume's corresponding block-device config to the "index" of virtio-scsi controller