qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v2] virtio: add some migration doc
@ 2015-09-17 16:42 Cornelia Huck
  2015-09-17 16:56 ` Dr. David Alan Gilbert
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Cornelia Huck @ 2015-09-17 16:42 UTC (permalink / raw)
  To: qemu-devel, mst, gkurz; +Cc: Cornelia Huck, jasowang, kraxel

Try to cover the basics of virtio migration.

Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Reviewed-by: Greg Kurz <gkurz@linux.vnet.ibm.com>
---
v1->v2: make copyright explicit
---
 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.
-- 
2.3.8

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [Qemu-devel] [PATCH v2] virtio: add some migration doc
  2015-09-17 16:42 [Qemu-devel] [PATCH v2] virtio: add some migration doc Cornelia Huck
@ 2015-09-17 16:56 ` Dr. David Alan Gilbert
  2015-09-18  2:25 ` Jason Wang
  2015-10-07 10:39 ` Cornelia Huck
  2 siblings, 0 replies; 5+ messages in thread
From: Dr. David Alan Gilbert @ 2015-09-17 16:56 UTC (permalink / raw)
  To: Cornelia Huck; +Cc: jasowang, gkurz, kraxel, qemu-devel, mst

* Cornelia Huck (cornelia.huck@de.ibm.com) wrote:
> Try to cover the basics of virtio migration.

Thank you for doing this; I don't know the innards of virtio, but having
to debug migration with it in the mix, it is nice to have something to
look at.

Dave

> Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
> Reviewed-by: Greg Kurz <gkurz@linux.vnet.ibm.com>
> ---
> v1->v2: make copyright explicit
> ---
>  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.
> -- 
> 2.3.8
> 
> 
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Qemu-devel] [PATCH v2] virtio: add some migration doc
  2015-09-17 16:42 [Qemu-devel] [PATCH v2] virtio: add some migration doc Cornelia Huck
  2015-09-17 16:56 ` Dr. David Alan Gilbert
@ 2015-09-18  2:25 ` Jason Wang
  2015-10-07 10:39 ` Cornelia Huck
  2 siblings, 0 replies; 5+ messages in thread
From: Jason Wang @ 2015-09-18  2:25 UTC (permalink / raw)
  To: Cornelia Huck, qemu-devel, mst, gkurz; +Cc: kraxel



On 09/18/2015 12:42 AM, Cornelia Huck wrote:
> Try to cover the basics of virtio migration.
>
> Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
> Reviewed-by: Greg Kurz <gkurz@linux.vnet.ibm.com>
> ---
> v1->v2: make copyright explicit
> ---

Reviewed-by: Jason Wang <jasowang@redhat.com>

Thanks

>  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.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Qemu-devel] [PATCH v2] virtio: add some migration doc
  2015-09-17 16:42 [Qemu-devel] [PATCH v2] virtio: add some migration doc Cornelia Huck
  2015-09-17 16:56 ` Dr. David Alan Gilbert
  2015-09-18  2:25 ` Jason Wang
@ 2015-10-07 10:39 ` Cornelia Huck
  2015-10-16  8:56   ` Cornelia Huck
  2 siblings, 1 reply; 5+ messages in thread
From: Cornelia Huck @ 2015-10-07 10:39 UTC (permalink / raw)
  To: mst; +Cc: jasowang, kraxel, qemu-devel, gkurz

On Thu, 17 Sep 2015 18:42:57 +0200
Cornelia Huck <cornelia.huck@de.ibm.com> wrote:

> Try to cover the basics of virtio migration.
> 
> Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
> Reviewed-by: Greg Kurz <gkurz@linux.vnet.ibm.com>
> ---
> v1->v2: make copyright explicit
> ---
>  docs/virtio-migration.txt | 106 ++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 106 insertions(+)
>  create mode 100644 docs/virtio-migration.txt

Michael: Do you want to take this through your tree?

> 
> 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.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Qemu-devel] [PATCH v2] virtio: add some migration doc
  2015-10-07 10:39 ` Cornelia Huck
@ 2015-10-16  8:56   ` Cornelia Huck
  0 siblings, 0 replies; 5+ messages in thread
From: Cornelia Huck @ 2015-10-16  8:56 UTC (permalink / raw)
  To: mst; +Cc: jasowang, kraxel, qemu-devel, gkurz

On Wed, 7 Oct 2015 12:39:17 +0200
Cornelia Huck <cornelia.huck@de.ibm.com> wrote:

> On Thu, 17 Sep 2015 18:42:57 +0200
> Cornelia Huck <cornelia.huck@de.ibm.com> wrote:
> 
> > Try to cover the basics of virtio migration.
> > 
> > Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
> > Reviewed-by: Greg Kurz <gkurz@linux.vnet.ibm.com>
> > ---
> > v1->v2: make copyright explicit
> > ---
> >  docs/virtio-migration.txt | 106 ++++++++++++++++++++++++++++++++++++++++++++++
> >  1 file changed, 106 insertions(+)
> >  create mode 100644 docs/virtio-migration.txt
> 
> Michael: Do you want to take this through your tree?

Ping :)

> 
> > 
> > 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.
> 

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2015-10-16  8:57 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-09-17 16:42 [Qemu-devel] [PATCH v2] virtio: add some migration doc Cornelia Huck
2015-09-17 16:56 ` Dr. David Alan Gilbert
2015-09-18  2:25 ` Jason Wang
2015-10-07 10:39 ` Cornelia Huck
2015-10-16  8:56   ` Cornelia Huck

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).