[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [PATCH v5 0/8] Add dbus-vmstate,
Marc-André Lureau <=