[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH V7 1/2] libxl: Add support for Virtio disk configuration
On Sat, Apr 23, 2022 at 10:39:14AM +0300, Oleksandr wrote: > > On 22.04.22 12:41, Roger Pau Monné wrote: > > > Hello Roger > > > On Fri, Apr 08, 2022 at 09:21:04PM +0300, Oleksandr Tyshchenko wrote: > > > From: Oleksandr Tyshchenko <oleksandr_tyshchenko@xxxxxxxx> > > > > > > This patch adds basic support for configuring and assisting virtio-mmio > > > based virtio-disk backend (emualator) which is intended to run out of > > > Qemu and could be run in any domain. > > > Although the Virtio block device is quite different from traditional > > > Xen PV block device (vbd) from the toolstack's point of view: > > > - as the frontend is virtio-blk which is not a Xenbus driver, nothing > > > written to Xenstore are fetched by the frontend (the vdev is not > > > passed to the frontend) > > > - the ring-ref/event-channel are not used for the backend<->frontend > > > communication, the proposed IPC for Virtio is IOREQ/DM > > > it is still a "block device" and ought to be integrated in existing > > > "disk" handling. So, re-use (and adapt) "disk" parsing/configuration > > > logic to deal with Virtio devices as well. > > > > > > For the immediate purpose and an ability to extend that support for > > > other use-cases in future (Qemu, virtio-pci, etc) perform the following > > > actions: > > > - Add new disk backend type (LIBXL_DISK_BACKEND_OTHER) and reflect > > > that in the configuration > > > - Introduce new disk protocol field to libxl_device_disk struct > > > (with LIBXL_DISK_PROTOCOL_XEN and LIBXL_DISK_PROTOCOL_VIRTIO_MMIO > > > types) and reflect that in the configuration (new "protocol" option > > > with "xen" protocol being default value) > > > - Add new device kind (LIBXL__DEVICE_KIND_VIRTIO_DISK) as current > > > one (LIBXL__DEVICE_KIND_VBD) doesn't fit into Virtio disk model > > > > > > An example of domain configuration for Virtio disk: > > > disk = [ 'phy:/dev/mmcblk0p3, xvda1, backendtype=other, > > > protocol=virtio-mmio'] > > > > > > Nothing has changed for default Xen disk configuration. > > > > > > Please note, this patch is not enough for virtio-disk to work > > > on Xen (Arm), as for every Virtio device (including disk) we need > > > to allocate Virtio MMIO params (IRQ and memory region) and pass > > > them to the backend, also update Guest device-tree. The subsequent > > > patch will add these missing bits. For the current patch, > > > the default "irq" and "base" are just written to the Xenstore. > > > This is not an ideal splitting, but this way we avoid breaking > > > the bisectability. > > > > > > Signed-off-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@xxxxxxxx> > > > --- > > > Changes RFC -> V1: > > > - no changes > > > > > > Changes V1 -> V2: > > > - rebase according to the new location of libxl_virtio_disk.c > > > > > > Changes V2 -> V3: > > > - no changes > > > > > > Changes V3 -> V4: > > > - rebase according to the new argument for DEFINE_DEVICE_TYPE_STRUCT > > > > > > Changes V4 -> V5: > > > - split the changes, change the order of the patches > > > - update patch description > > > - don't introduce new "vdisk" configuration option with own parsing > > > logic, > > > re-use Xen PV block "disk" parsing/configuration logic for the > > > virtio-disk > > > - introduce "virtio" flag and document it's usage > > > - add LIBXL_HAVE_DEVICE_DISK_VIRTIO > > > - update libxlu_disk_l.[ch] > > > - drop num_disks variable/MAX_VIRTIO_DISKS > > > - drop Wei's T-b > > > > > > Changes V5 -> V6: > > > - rebase on current staging > > > - use "%"PRIu64 instead of %lu for disk->base in device_disk_add() > > > - update *.gen.go files > > > > > > Changes V6 -> V7: > > > - rebase on current staging > > > - update *.gen.go files and libxlu_disk_l.[ch] files > > > - update patch description > > > - rework significantly to support more flexible configuration > > > and have more generic basic implementation for being able to extend > > > that for other use-cases (virtio-pci, qemu, etc). > > > --- > > > docs/man/xl-disk-configuration.5.pod.in | 37 +- > > > tools/golang/xenlight/helpers.gen.go | 6 + > > > tools/golang/xenlight/types.gen.go | 11 + > > > tools/include/libxl.h | 6 + > > > tools/libs/light/libxl_device.c | 57 +- > > > tools/libs/light/libxl_disk.c | 111 +++- > > > tools/libs/light/libxl_internal.h | 1 + > > > tools/libs/light/libxl_types.idl | 10 + > > > tools/libs/light/libxl_types_internal.idl | 1 + > > > tools/libs/light/libxl_utils.c | 2 + > > > tools/libs/util/libxlu_disk_l.c | 952 > > > +++++++++++++++--------------- > > > tools/libs/util/libxlu_disk_l.h | 2 +- > > > tools/libs/util/libxlu_disk_l.l | 9 + > > > tools/xl/xl_block.c | 11 + > > > 14 files changed, 736 insertions(+), 480 deletions(-) > > > > > > diff --git a/docs/man/xl-disk-configuration.5.pod.in > > > b/docs/man/xl-disk-configuration.5.pod.in > > > index 71d0e86..36c851f 100644 > > > --- a/docs/man/xl-disk-configuration.5.pod.in > > > +++ b/docs/man/xl-disk-configuration.5.pod.in > > > @@ -232,7 +232,7 @@ Specifies the backend implementation to use > > > =item Supported values > > > -phy, qdisk > > > +phy, qdisk, other > > > =item Mandatory > > > @@ -244,11 +244,13 @@ Automatically determine which backend to use. > > > =back > > > -This does not affect the guest's view of the device. It controls > > > -which software implementation of the Xen backend driver is used. > > > +It controls which software implementation of the backend driver is used. > > > +Depending on the "protocol" option this may affect the guest's view > > > +of the device. > > > Not all backend drivers support all combinations of other options. > > > -For example, "phy" does not support formats other than "raw". > > > +For example, "phy" and "other" do not support formats other than "raw" > > > and > > > +"other" does not support protocols other than "virtio-mmio". > > > Normally this option should not be specified, in which case libxl will > > > automatically determine the most suitable backend. > > > @@ -344,8 +346,35 @@ can be used to disable "hole punching" for file > > > based backends which > > > were intentionally created non-sparse to avoid fragmentation of the > > > file. > > > +=item B<protocol>=I<PROTOCOL> > > > + > > > +=over 4 > > > + > > > +=item Description > > > + > > > +Specifies the communication protocol to use for the chosen "backendtype" > > > option > > > + > > > +=item Supported values > > > + > > > +xen, virtio-mmio > > From a user PoV, I think it would be better to just select xen or > > virtio here, but not the underlying configuration mechanism used to > > expose the devices to the guest. > > I got your point. > > > > > > > We would likely need to add a different option to select mmio or pci > > then, but that should be set by default based on architecture/guest > > type. For example on x86 it should default to pci, while on Arm I > > guess it will depend on whether the guest has PCI or not? > > > > In any case, I think we should offer an option that's selecting > > between xen or virtio protocol, and the way to expose the > > configuration of the device shouldn't need to be explicitly selected > > by the user. > > > ok, for now I will use "xen and virtio" values for the "protocol" option, > then internally toolstack will assume that "virtio" really means > "virtio-mmio". > > When there is a need to expand that support to "virtio-pci", we will see how > to deal with it from the configuration PoV, probably like you suggested > above by adding another option (e.g. "transport") with default values based > on the architecture/guest type. I think this likely also wants to be a separate field in libxl_device_disk, which could be left empty and libxl will attempt to set a default. For example have the following in libxl_types.idl: libxl_device_protocol = Enumeration("device_protocol", [ (0, "UNKNOWN"), (1, "XEN"), (2, "VIRTIO"), ]) libxl_device_configuration = Enumeration("device_configuration", [ (0, "UNKNOWN"), (1, "XENBUS"), (2, "MMIO"), ]) libxl_device_disk = Struct("device_disk", [ ("protocol", libxl_device_protocol), ("configuration", libxl_device_configuration), ]) I don't like libxl_device_configuration much, I think is too generic, but I can't think of anything better. Maybe others can provide better names. Thanks, Roger.
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |