[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 3/4] docs: add pvscsi.txt
Signed-off-by: Olaf Hering <olaf@xxxxxxxxx> Cc: Ian Campbell <ian.campbell@xxxxxxxxxx> Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> Cc: Jan Beulich <jbeulich@xxxxxxxx> Cc: Keir Fraser <keir@xxxxxxx> Cc: Tim Deegan <tim@xxxxxxx> --- docs/misc/pvscsi.txt | 147 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) diff --git a/docs/misc/pvscsi.txt b/docs/misc/pvscsi.txt new file mode 100644 index 0000000..2af050f --- /dev/null +++ b/docs/misc/pvscsi.txt @@ -0,0 +1,147 @@ +. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +PVSCSI + +== Overview == + +PVSCSI allows to assing a "physical" SCSI device from dom0 to a domU. The device +is not limited to be a native SCSI device. Everything visible as SCSI device in +dom0 can be used. Currently PVSCSI is only available in Linux dom0 and domU. + +== TODO === + +How to do live migration? + - pdev will likely be evaluated again on the target host if it came from + domU.cfg. But what about pdev from 'xl scsi-attach pdev vdev'? Its required + to adjust h:c:t:l on the target host. + +Implement checks for duplicate pdev assignments? + - Not sure if SCSI devices can be shared. Will the state be consistent during + concurrent access? Should the host admin assume cooperative access from + multiple domUs? + - The easiest way would be to do nothing and assume the host admin knows what + to do. + +How to handle FIXME in libxl_retrieve_domain_configuration? + - "MERGE(vscsi, vscsis, COMPARE_DEVID, {});", when does this code run? + +Implement libvirt integration. + - Is the API used by xl usable for libvirt? + - How does libvirt assign a raw SCSI device? + Jim said: + > vscsi=[ '/dev/sda,0:1:2:3', '4:3:2:1,1:1:1:1,feature-host' ] + In libvirt-speak, this is SCSI host device assignment + http://libvirt.org/formatdomain.html#elementsHostDev + Here's the SCSI example + <devices> + <hostdev mode='subsystem' type='scsi' sgio='filtered' rawio='yes'> + <source> + <adapter name='scsi_host0'/> + <address type='scsi' bus='0' target='0' unit='0'/> + </source> + <readonly/> + <address type='drive' controller='0' bus='0' target='0' unit='0'/> + </hostdev> + ... + </devices> + I suppose 'feature-host' maps to attributes such as 'sgio' and 'rawio'. + The source element describes the SCSI device as seen from the host. + + +== History == + +Support for PVSCSI was added to the classic xenlinux kernel and to xend in +xen-3.3 in 2008. Support for PVSCSI was added to the upstream pvops kernel 3.18 +in 2014. Backends exists just for Linux. A frontend exists for Linux, and maybe +for FreeBSD according to google. + + +== Config Format == + +The domU.cfg syntax is "vscsi=[ 'pdev,vdev[,option]' ]". pdev is the dom0 device +in either /dev/$device or pHOST:CHANNEL:TARGET:LUN notation. vdev is the domU +device in vHOST:CHANNEL:TARGET:LUN notation. 'option' lists additional flags. +Currently only the value "feature-host" is recognized. SCSI command emulation in +backend driver is bypassed when "feature-host" is specified. + + +== Xenstore Format == + +The backend driver uses a single_host:many_devices notation to manage domU +devices. Everything is stored in /local/domain/0/backend/vscsi/. The xenstore +layout looks like this: + + <domid>/<vhost>/feature-host = "0" + <domid>/<vhost>/frontend = "/local/domain/<domid>/device/vscsi/0" + <domid>/<vhost>/frontend-id = "<domid>" + <domid>/<vhost>/online = "1" + <domid>/<vhost>/state = "4" + <domid>/<vhost>/vscsi-devs/dev-0/p-dev = "8:0:2:1" + <domid>/<vhost>/vscsi-devs/dev-0/state = "4" + <domid>/<vhost>/vscsi-devs/dev-0/v-dev = "0:0:0:0" + <domid>/<vhost>/vscsi-devs/dev-1/p-dev = "8:0:2:2" + <domid>/<vhost>/vscsi-devs/dev-1/state = "4" + <domid>/<vhost>/vscsi-devs/dev-1/v-dev = "0:0:1:0" + +The frontend driver maintains its state in /local/domain/<domid>/device/vscsi/. + + <vhost>/backend = "/local/domain/0/backend/vscsi/<domid>/<vhost>" + <vhost>/backend-id = "0" + <vhost>/event-channel = "20" + <vhost>/ring-ref = "43" + <vhost>/state = "4" + <vhost>/vscsi-devs/dev-0/state = "4" + <vhost>/vscsi-devs/dev-1/state = "4" + +In addition to the entries for backend and frontend these flags are stored for +the toolstack: + + <domid>/<vhost>/vscsi-devs/dev-1/p-devname = "/dev/$device" + + +== Backend - Frontend Protocol == + +To create a vhost along with a device: + <domid>/<vhost>/feature-host = "0" + <domid>/<vhost>/frontend = "/local/domain/<domid>/device/vscsi/0" + <domid>/<vhost>/frontend-id = "<domid>" + <domid>/<vhost>/online = "1" + <domid>/<vhost>/state = "1" + <domid>/<vhost>/vscsi-devs/dev-0/p-dev = "8:0:2:1" + <domid>/<vhost>/vscsi-devs/dev-0/state = "1" + <domid>/<vhost>/vscsi-devs/dev-0/v-dev = "0:0:0:0" +Wait for <domid>/<vhost>/state + <domid>/<vhost>/vscsi-devs/dev-0/state become 4 + +To add another device to a vhost: + <domid>/<vhost>/state = "7" + <domid>/<vhost>/vscsi-devs/dev-1/p-dev = "8:0:2:2" + <domid>/<vhost>/vscsi-devs/dev-1/state = "1" + <domid>/<vhost>/vscsi-devs/dev-1/v-dev = "0:0:1:0" +Wait for <domid>/<vhost>/state + <domid>/<vhost>/vscsi-devs/dev-1/state become 4 + +To remove a device from a vhost: + <domid>/<vhost>/state = "7" + <domid>/<vhost>/vscsi-devs/dev-1/state = "5" +Wait for <domid>/<vhost>/state to become 4 +Wait for <domid>/<vhost>/vscsi-devs/dev-1/state become 6 +Remove <domid>/<vhost>/vscsi-devs/dev-1/{state,p-dev,v-dev,p-devname} +Remove <domid>/<vhost>/vscsi-devs/dev-1/ + + +== Interface in xl == + +xl scsi-attach domid <PhysDevice> <VirtDevice>[,<option>] +xl scsi-detach domid <VirtDevice> +xl scsi-list domid [domid, ...] + + +== Interface in libxl == + +To be defined so that both xl and libvirt pass in the same data. + + +== Interface in libvirt == + +Has yet to be found. + +. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +# vim: tw=80 et ts=4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |