[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH V7 1/2] libxl: Add support for Virtio disk configuration


  • To: Oleksandr <olekstysh@xxxxxxxxx>
  • From: Roger Pau Monné <roger.pau@xxxxxxxxxx>
  • Date: Mon, 25 Apr 2022 15:12:13 +0200
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ueiUv3ANFHhKZifcnbhcc6x3asJ/gBDKdLEmM6uG4D0=; b=SR9mRJbeLu26wFKYPxzB9kAWWLzYjiijYHw6/RceZuItd0eKIZI1TOeNdzKE+A6jGx03bfdUat7/iIc2MC6RLA2z7ElCtLJfr7WA1kvwmUCraMNiWrv4O0Xo27GshXJGCBDgIaN8GFU7WW5/gsf7XNU5dR3bQ+EWWxBOE37vmQZzeyzoWhqywTIn1BzYH1J+ceIfr3Luad7h9q86kBZ5Vim0DYass7kjYwDf078G65zLT6Qtd/Rk3UtpyoEtRA5L+pXbBroOcrHC1KneNdbS4R6PY5Gslvr9cPF6S6RHS57rubrW6uRHkz5ic6Vs6T5O+tACY1lG1STyapp2B7hUuQ==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nQbkHNoYnIf9F9k8IkRTO7HxNT8FuoNqCv19+AzJX8faYis1uEUU/yv8d83kjTUIE8svvEQrsk7HkSTopn5zWL1R9lEZGwbbWkBtgRxwDK8TrnHkNhASfzesbWTh4McQqJUy21fsnHcSm1pR2PltSbdaLiMAxidmUl2VFlNDV+fMiZl7NIHx9X24lFQm5fYJycokwm/D8TSY4bbl3C9/ONXq5qcUC2yAD8/yafYGuPPC+W2QXgASXFH1/8UH3x0fMo3D6XyaOGRukezeR7EP5vJVrNLbn1Yni+UL5McvbRdV2LKYtLX0/z6lywtey7OL7xX0o7Gycf0qjO9bVD1E3g==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com;
  • Cc: xen-devel@xxxxxxxxxxxxxxxxxxxx, Oleksandr Tyshchenko <oleksandr_tyshchenko@xxxxxxxx>, Wei Liu <wl@xxxxxxx>, Anthony PERARD <anthony.perard@xxxxxxxxxx>, George Dunlap <george.dunlap@xxxxxxxxxx>, Nick Rosbrook <rosbrookn@xxxxxxxxx>, Juergen Gross <jgross@xxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>, Bertrand Marquis <bertrand.marquis@xxxxxxx>
  • Delivery-date: Mon, 25 Apr 2022 13:12:52 +0000
  • Ironport-data: A9a23:potb0aloWj31QiMoFYvHV3bo5gwSJ0RdPkR7XQ2eYbSJt1+Wr1Gzt xJKDTzXOP3ZNGL9Lt9xbNjn8EIGvJbXytVnSQtrpXpkEiMWpZLJC+rCIxarNUt+DCFioGGLT Sk6QoOdRCzhZiaE/n9BCpC48T8kk/vgqoPUUIYoAAgoLeNfYHpn2EoLd9IR2NYy24DlWV7V4 LsenuWEULOb828sWo4rw/rrRCNH5JwebxtB4zTSzdgS1LPvvyF94KA3fMldHFOhKmVgJcaoR v6r8V2M1jixEyHBqD+Suu2TnkUiGtY+NOUV45Zcc/DKbhNq/kTe3kunXRa1hIg+ZzihxrhMJ NtxWZOYFTw7YabzgskkcxRTPRpifqkWxa35GC3q2SCT5xWun3rE5dxLVRhzEahGv+F9DCdJ6 OASLy0LYlabneWqzbmnS+5qwMM+MM3sO4BZsXZlpd3bJa9+HdafHOOXupkBgmdYasNmRJ4yY +IDbjVidlLYagBnMVYLEpMu2uyvgxETdhUG+Q3O+PZtuwA/yiRK+rTtaIHtJuCsXMN6zmy8+ 0za8lbmV0Ry2Nu3jGDtHmiXrujLkCDgRJMJFJW38/drhBuYwWl7IA0bUx63rOe0jma6WslDM AoE9yw2t68w+Ue3CN7nUHWQp3qJvQUVXdZKJPEr8wGGyqfS4AGxC3ANS3hKb9lOnNAybSwn0 BmOhdyBLSZoq7ePTnWe8J+bqDqzPW4eKmpqTS0LVwwe+PH4vZo+yBnIS75LC7Wph9f4HTXxx TGiryUkgbgXy8kR2M2T/03Dgj+qjojESEgy/Aq/dlyi6gR1dYu0fbuC4FLQ7etDBIuBR1zHt 38B8+CU4foSF5iLmGqISf8UAbCyz/+fNXvXhlsHInU63zGk+nrmcYUO5jh7fR5tKpxdJ2+vZ 1LPswRM4pMVJGGtcaJ8f4O2DYIt0LTkEtPmEPvTa7Kif6RMSeNOxwk2DWb44ownuBJEfX0XU XtDTfuRMA==
  • Ironport-hdrordr: A9a23:3Ekc36xBWa6mKkGo81guKrPxvuskLtp133Aq2lEZdPULSKGlfp GV9sjziyWetN9wYh4dcB67Scy9qFfnhOZICO4qTMyftWjdyRKVxeRZgbcKrAeBJ8STzJ8/6U 4kSdkFNDSSNykEsS+Z2njeLz9I+rDunsGVbKXlvhFQpGlRGt1dBmxCe2Km+yNNNWt77c1TLu vg2iMLnUvoRV0nKuCAQlUVVenKoNPG0LrgfB49HhYirC2Dlymh5rLWGwWRmk52aUIF/Z4StU z+1yDp7KSqtP+2jjfaym/o9pxT3P/s0MFKCsCggtUcbh/slgGrToJ8XKDqhkF8nMifrHIR1P XcqRYpOMp+r1vXY2GOuBPonzLt1T4/gkWSvWOwsD/Gm4jUVTg6A81OicZyaR3C8Xctu9l6ze Ziw3+Zn4A/N2KOoA3No/zzEz16nEu9pnQv1cQJiWZEbIcYYLhN6aQC4UJuFosaFi6S0vFqLA BXNrCc2B9qSyLbU5iA1VMfg+BEH05DUytue3Jy9PB8iFNt7TJEJ0hx/r1rop5PzuN5d3B+3Z W0Dk1ZrsAxciYoV9MMOA4ge7rBNoWfe2O7DIqtSW6XZ50vCjbql6PdxokTyaWDRKEopaFC6q gpFmko/1IPRw==
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

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.



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.