[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 08/38] virtio: add some migration doc
From: |
Michael S. Tsirkin |
Subject: |
[Qemu-devel] [PULL 08/38] virtio: add some migration doc |
Date: |
Wed, 21 Oct 2015 13:26:51 +0300 |
From: Cornelia Huck <address@hidden>
Try to cover the basics of virtio migration.
Signed-off-by: Cornelia Huck <address@hidden>
Reviewed-by: Greg Kurz <address@hidden>
Reviewed-by: Michael S. Tsirkin <address@hidden>
Signed-off-by: Michael S. Tsirkin <address@hidden>
Reviewed-by: Jason Wang <address@hidden>
---
docs/virtio-migration.txt | 106 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 106 insertions(+)
create mode 100644 docs/virtio-migration.txt
diff --git a/docs/virtio-migration.txt b/docs/virtio-migration.txt
new file mode 100644
index 0000000..cf66458
--- /dev/null
+++ b/docs/virtio-migration.txt
@@ -0,0 +1,106 @@
+Virtio devices and migration
+============================
+
+Copyright 2015 IBM Corp.
+
+This work is licensed under the terms of the GNU GPL, version 2 or later. See
+the COPYING file in the top-level directory.
+
+Saving and restoring the state of virtio devices is a bit of a twisty maze,
+for several reasons:
+- state is distributed between several parts:
+ - virtio core, for common fields like features, number of queues, ...
+ - virtio transport (pci, ccw, ...), for the different proxy devices and
+ transport specific state (msix vectors, indicators, ...)
+ - virtio device (net, blk, ...), for the different device types and their
+ state (mac address, request queue, ...)
+- most fields are saved via the stream interface; subsequently, subsections
+ have been added to make cross-version migration possible
+
+This file attempts to document the current procedure and point out some
+caveats.
+
+
+Save state procedure
+====================
+
+virtio core virtio transport virtio device
+----------- ---------------- -------------
+
+ save() function registered
+ via register_savevm()
+virtio_save() <----------
+ ------> save_config()
+ - save proxy device
+ - save transport-specific
+ device fields
+- save common device
+ fields
+- save common virtqueue
+ fields
+ ------> save_queue()
+ - save transport-specific
+ virtqueue fields
+ ------> save_device()
+ - save device-specific
+ fields
+- save subsections
+ - device endianness,
+ if changed from
+ default endianness
+ - 64 bit features, if
+ any high feature bit
+ is set
+ - virtio-1 virtqueue
+ fields, if VERSION_1
+ is set
+
+
+Load state procedure
+====================
+
+virtio core virtio transport virtio device
+----------- ---------------- -------------
+
+ load() function registered
+ via register_savevm()
+virtio_load() <----------
+ ------> load_config()
+ - load proxy device
+ - load transport-specific
+ device fields
+- load common device
+ fields
+- load common virtqueue
+ fields
+ ------> load_queue()
+ - load transport-specific
+ virtqueue fields
+- notify guest
+ ------> load_device()
+ - load device-specific
+ fields
+- load subsections
+ - device endianness
+ - 64 bit features
+ - virtio-1 virtqueue
+ fields
+- sanitize endianness
+- sanitize features
+- virtqueue index sanity
+ check
+ - feature-dependent setup
+
+
+Implications of this setup
+==========================
+
+Devices need to be careful in their state processing during load: The
+load_device() procedure is invoked by the core before subsections have
+been loaded. Any code that depends on information transmitted in subsections
+therefore has to be invoked in the device's load() function _after_
+virtio_load() returned (like e.g. code depending on features).
+
+Any extension of the state being migrated should be done in subsections
+added to the core for compatibility reasons. If transport or device specific
+state is added, core needs to invoke a callback from the new subsection.
--
MST
- [Qemu-devel] [PULL 00/38] vhost, pc, virtio features, fixes, cleanups, Michael S. Tsirkin, 2015/10/21
- [Qemu-devel] [PULL 01/38] intel_iommu: Add support for translation for devices behind bridges, Michael S. Tsirkin, 2015/10/21
- [Qemu-devel] [PULL 02/38] exec: factor out duplicate mmap code, Michael S. Tsirkin, 2015/10/21
- [Qemu-devel] [PULL 03/38] net: don't set native endianness, Michael S. Tsirkin, 2015/10/21
- [Qemu-devel] [PULL 04/38] tests: re-enable vhost-user-test, Michael S. Tsirkin, 2015/10/21
- [Qemu-devel] [PULL 06/38] pc-dimm: add vhost slots limit check before commiting to hotplug, Michael S. Tsirkin, 2015/10/21
- [Qemu-devel] [PULL 07/38] vhost: fail backend intialization early, Michael S. Tsirkin, 2015/10/21
- [Qemu-devel] [PULL 05/38] vhost: add vhost_has_free_slot() interface, Michael S. Tsirkin, 2015/10/21
- [Qemu-devel] [PULL 08/38] virtio: add some migration doc,
Michael S. Tsirkin <=
- [Qemu-devel] [PULL 09/38] configure: probe for memfd, Michael S. Tsirkin, 2015/10/21
- [Qemu-devel] [PULL 11/38] build-sys: split util-obj- on multi-lines, Michael S. Tsirkin, 2015/10/21
- [Qemu-devel] [PULL 12/38] util: add linux-only memfd fallback, Michael S. Tsirkin, 2015/10/21
- [Qemu-devel] [PULL 13/38] util: add memfd helpers, Michael S. Tsirkin, 2015/10/21
- [Qemu-devel] [PULL 14/38] util: add fallback for qemu_memfd_alloc(), Michael S. Tsirkin, 2015/10/21
- [Qemu-devel] [PULL 15/38] vhost: document log resizing, Michael S. Tsirkin, 2015/10/21
- [Qemu-devel] [PULL 16/38] vhost: add vhost_set_log_base op, Michael S. Tsirkin, 2015/10/21
- [Qemu-devel] [PULL 10/38] linux-headers: add unistd.h, Michael S. Tsirkin, 2015/10/21
- [Qemu-devel] [PULL 17/38] vhost-user: add vhost_user_requires_shm_log(), Michael S. Tsirkin, 2015/10/21
- [Qemu-devel] [PULL 18/38] vhost: alloc shareable log, Michael S. Tsirkin, 2015/10/21