qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH v5 0/8] Add dbus-vmstate


From: Marc-André Lureau
Subject: Re: [PATCH v5 0/8] Add dbus-vmstate
Date: Fri, 29 Nov 2019 12:47:21 +0400

Hi

On Fri, Oct 4, 2019 at 3:23 PM Marc-André Lureau
<address@hidden> wrote:
>
> Hi,
>
> With external processes or helpers participating to the VM support, it
> becomes necessary to handle their migration. Various options exist to
> transfer their state:
> 1) as the VM memory, RAM or devices (we could say that's how
>    vhost-user devices can be handled today, they are expected to
>    restore from ring state)
> 2) other "vmstate" (as with TPM emulator state blobs)
> 3) left to be handled by management layer
>
> 1) is not practical, since an external processes may legitimatelly
> need arbitrary state date to back a device or a service, or may not
> even have an associated device.
>
> 2) needs ad-hoc code for each helper, but is simple and working
>
> 3) is complicated for management layer, QEMU has the migration timing
>
> The proposed "dbus-vmstate" object will connect to a given D-Bus
> address, and save/load from org.qemu.VMState1 owners on migration.
>
> Thus helpers can easily have their state migrated with QEMU, without
> implementing ad-hoc support (such as done for TPM emulation)
>
> D-Bus is ubiquitous on Linux (it is systemd IPC), and can be made to
> work on various other OSes. There are several implementations and good
> bindings for various languages.  (the tests/dbus-vmstate-test.c is a
> good example of how simple the implementation of services can be, even
> in C)
>
> dbus-vmstate is put into use by the libvirt series "[PATCH 00/23] Use
> a slirp helper process".
>

ping

(there is a minor vmstate_register() change required in patch 2 for
the next rebase)


> v5:
> - trying to fix patchew/ci: install dbus-daemon in containers, skip
>   test if unavailable
>
> v4:
> - add Daniel security scenarios to the D-Bus document
> - misc doc improvements
> - add "util: add dbus helper unit" patch, with
>   qemu_dbus_get_queued_owners()
> - add "configure: add GDBUS_CODEGEN", explaining why gio-unix is
>   required when available
> - silence the expected failing tests
> - update copyright headers, MAINTAINERS
> - add r-b/a-b tags
> - rebased
>
> (Note: patchew dbus test fails for unclear reasons, but I can't
> reproduce locally nor on travis)
>
> v3:
> - after various discussions on helper processes, we settled on a
>   preference for having a bus for communications. This version is
>   actually v1 updated.
> - added a dbus.rst document to describe D-Bus recommendations for QEMU
> - added dbus-vmstate-daemon.sh to play with the dbus-daemon configuration
>   (although it is not very useful in the context of a single UID)
> - added a new vmstate interface, so that any object can implement
>   VMStateDescription, and converted dbus-vmstate
> - added "migration: fix vmdesc leak on vmstate_save() error"
> - convert to g_auto
>
> v2:
> - D-Bus is most common and practical through a bus, but it requires a
>   daemon to be running. I argue that the benefits outweight the cost
>   of running an extra daemon in v1 in the context of multi-process
>   qemu, but it is also possible to connect in p2p mode as done in this
>   new version.
>
> Marc-André Lureau (8):
>   vmstate: add qom interface to get id
>   vmstate: replace DeviceState with VMStateIf
>   docs: start a document to describe D-Bus usage
>   util: add dbus helper unit
>   Add dbus-vmstate object
>   configure: add GDBUS_CODEGEN
>   dockerfiles: add dbus-daemon to some of latest distributions
>   tests: add dbus-vmstate-test
>
>  MAINTAINERS                              |  12 +
>  backends/Makefile.objs                   |   4 +
>  backends/dbus-vmstate.c                  | 496 +++++++++++++++++++++++
>  configure                                |   7 +
>  docs/interop/dbus-vmstate.rst            |  74 ++++
>  docs/interop/dbus.rst                    | 104 +++++
>  docs/interop/index.rst                   |   2 +
>  hw/block/onenand.c                       |   2 +-
>  hw/core/Makefile.objs                    |   1 +
>  hw/core/qdev.c                           |  21 +-
>  hw/core/vmstate-if.c                     |  23 ++
>  hw/ide/cmd646.c                          |   2 +-
>  hw/ide/isa.c                             |   2 +-
>  hw/ide/piix.c                            |   2 +-
>  hw/ide/via.c                             |   2 +-
>  hw/misc/max111x.c                        |   2 +-
>  hw/net/eepro100.c                        |   4 +-
>  hw/nvram/eeprom93xx.c                    |   4 +-
>  hw/ppc/spapr_drc.c                       |   9 +-
>  hw/ppc/spapr_iommu.c                     |   4 +-
>  hw/s390x/s390-skeys.c                    |   2 +-
>  include/hw/vmstate-if.h                  |  40 ++
>  include/migration/register.h             |   4 +-
>  include/migration/vmstate.h              |  10 +-
>  include/qemu/dbus.h                      |  18 +
>  migration/savevm.c                       |  20 +-
>  stubs/vmstate.c                          |   4 +-
>  tests/Makefile.include                   |  23 +-
>  tests/dbus-vmstate-daemon.sh             |  95 +++++
>  tests/dbus-vmstate-test.c                | 399 ++++++++++++++++++
>  tests/dbus-vmstate1.xml                  |  12 +
>  tests/docker/dockerfiles/centos7.docker  |   1 +
>  tests/docker/dockerfiles/debian10.docker |   1 +
>  tests/docker/dockerfiles/fedora.docker   |   1 +
>  tests/docker/dockerfiles/ubuntu.docker   |   1 +
>  util/Makefile.objs                       |   3 +
>  util/dbus.c                              |  55 +++
>  37 files changed, 1428 insertions(+), 38 deletions(-)
>  create mode 100644 backends/dbus-vmstate.c
>  create mode 100644 docs/interop/dbus-vmstate.rst
>  create mode 100644 docs/interop/dbus.rst
>  create mode 100644 hw/core/vmstate-if.c
>  create mode 100644 include/hw/vmstate-if.h
>  create mode 100644 include/qemu/dbus.h
>  create mode 100755 tests/dbus-vmstate-daemon.sh
>  create mode 100644 tests/dbus-vmstate-test.c
>  create mode 100644 tests/dbus-vmstate1.xml
>  create mode 100644 util/dbus.c
>
> --
> 2.23.0
>
>


-- 
Marc-André Lureau



reply via email to

[Prev in Thread] Current Thread [Next in Thread]