Paravirtualized SCSI

From Xen


Paravirtualized SCSI (PVSCSI) was added to Xen 3.3.0. PVSCSI allows high performance passthrough of SCSI devices (or LUNs) from dom0 to a Xen PV or HVM guest. PVSCSI can be used to passthrough a tape drive, tape autoloader or basicly any SCSI/FC device. By using PVSCSI the guest can have direct access to the SCSI device (required by for example some management tools). PVSCSI can also be used to passthrough multiple SCSI devices or the whole SCSI HBA.

Note that disks (any block device in dom0) can be passed to the Xen guest using the normal Xen blkback functionality, PVSCSI is not needed for that.

PVSCSI requirements

  • PVSCSI requires a scsiback backend driver in dom0 kernel.
  • PVSCSI requires a scsifront frontend driver in the guest kernel.
  • Xen 3.3.0 or newer.

PVSCSI driver availability

PVSCSI drivers can be found from at least the following Xen kernel trees:

  • Upstream Linux kernel version 3.18 (and later versions) includes Xen PVSCSI drivers, both xen-scsiback and xen-scsifront, out-of-the-box!
  • linux-2.6.18-xen from contains both scsiback and scsifront.
  • Xen PV-on-HVM drivers ("unmodified_drivers" in Xen source tree) contains PVSCSI scsifront driver for Linux 2.6.18, 2.6.27 and 2.6.32.
  • SUSE SLES11 SP1 2.6.32 Xenlinux kernel (and later versions) has PVSCSI drivers.
  • SUSE SLES12 Xenlinux kernel has PVSCSI drivers.
  • Windows Xen GPLPV drivers have scsifront driver.

Xen toolstack support for PVSCSI features

  • xm/xend toolstack supports PVSCSI since Xen 3.3, up to Xen 4.4.
  • xl / libxl toolstack currently does not yet have support for PVSCSI (as of Xen 4.7).



The syntax in domU.cfg is vscsi=[ 'pdev,vdev[,options]', ... ] 'pdev' describes the physical device, preferable in a persistent format such as /dev/disk/by-*/*. 'vdev' is the domU device in vHOST:CHANNEL:TARGET:LUN notation, all integers. 'options' lists additional flags which a backend may recognize.


xl scsi-attach domU 'pdev' 'vdev' ['options']

xl scsi-detach domU 'vdev'


Very limited way to describe host device, just 'H:C:T:L' notation for pdev supported:

 <hostdev mode='subsystem' type='scsi' managed='no' sgio='filtered' rawio='yes'>
    <adapter name='scsi_host5'/>
    <address bus='0' target='1' unit='0'/>
  <address type='drive' controller='0' bus='0' target='0' unit='0'/>

More information and links