Features/Migration: Difference between revisions

From QEMU
mNo edit summary
 
(10 intermediate revisions by 4 users not shown)
Line 1: Line 1:
== Summary ==
== Documentations ==


Migration roadmap.
You can find the latest migration documentation here:


== Owner ==
  https://qemu.org/docs/master/devel/migration


* '''Name:''' Juan Quintela
== TODO List ==
* '''Email:''' quintela@redhat.com


== Detailed Summary ==
If you're looking for something to work on for migration, please have a look at:


This page describes what are the changes planned for migration and who is supposed to do each of the changes.
  https://wiki.qemu.org/ToDo/LiveMigration
If you want to collaborate on any of the items don't doubt to contact me directly or asking on the qemu mailing list.


== Status ==
== Other references ==


This is the roadmap, features are integrated upstream as they are done.
* http://www.linux-kvm.org/page/KVM_Forum
* http://developerblog.redhat.com/2015/03/24/live-migrating-qemu-kvm-virtual-machines/


== ToDo list ==
== Contact ==


* use TLS for communication (Volunteer?)
If you have any question or want to reach out, feel free to contact:


Right now all migration communication are done through clear channels. If you need to encrypt the channel, you need to use an external program.  The problem with this is the performance loss.  We need to transfer all data to another program, and then to the network.
* qemu-devel@nongnu
* Peter Xu <peterx@redhat.com>
* Fabiano Rosas <farosas@suse.de>


* Improve migration bitmap handling (Volunteer?)
== Credits ==


** Split bitmap use. We always use all bitmaps, VGA, CODE & Migration, independently of what we are doing.  We could improve it with:
This is a place we want to show special thanks to to the old good migration maintainers.
*** VGA:  only add it to VGA framebuffers
*** MIGRATION: We only need to allocate/handle it during migration.
*** CODE: Only needed with TCG, no need at all for KVM


* KVM migration bitmap (Volunteer?)
* Juan Quintela
** We could use the native bitmap format, and change/improve kernel to only set bits for dirty pages, not cleaning clean ones.
* Dr. David Alan Gilbert
** We could change kernel log code to set the bitmap for "used" pages when we start logging, this would allow us to not migration zero pages at all, right now we have to "allocate" the pages, to check that they are zero, and then sent them as zero pages
* Amit Shah
 
* Abstract QEMUFile use (Google Summer of Code Project)
''Note this has a lot of overlap with the Visitor/BER patches series of Dave Gilbert that abstracts the format out of QEMUFile''
 
We can change QEMUFile use to something like:
 
<pre>
struct MigrationChannel {
    void *opaque;
    uint32 get_uint32(struct MigrationChannel *)
    int put_uint32(structMigrationCHannel *)
/* the same for all the basic types */
}
</pre>
 
And then change all ocurrences of:
 
<pre>
qemu_get_sbe32(f, &foo);
</pre>
 
into
 
<pre>
foo = MC->get_uint32(MC);
</pre>
 
Where migration channel has been initialized properly for QEMUFile.  This would make trivial to change the protocol format to anything else.
 
** Continuous VMState testing (GSOC project)
--Note this has overlaps with the fault tolerance/micro checkpoint work and the reverse-emulation/debugging schemes that both take regular snapshots--
Add a new flag that during normal operation at random intervals:
*** stops the VM
*** saves all device state to a buffer
*** reset all devices
*** load all device state from that buffer
 
This way, we could test that we can migrate at any moment, and if we have a problem, we know exactly what the device state that caused the problem is.
 
 
* Finish conversion to VMState.  Pending things are:
** send generated fields
** rebase cpu ports to latest (need previous one)
** virtio: exist very old version (very old means as of more than 1 year ago).  Problem is how to describe lists easily in VMState
** slirp: some patches exist, same previous problem, how to handle easily lists.  Slirp is basically list of lists of lists.
** misc devices: almost all of them don't work on a migrated platform, so we could change them.
 
* Protocol changes
 
** Add size + checksum to sections.  This is one incompatible change and needs further thought.
** Make embedded sections real sections, with headers.  This will allow us to version internal state.
** Unit testing.  In colaboration with qdev, allow devices to be tested alone with old/new migration versions/subsections.
 
** Change to BER/ASN.1?
 
* Improve testing
** Add testing for all VMSTATE_FOO() macros and interpreter
 
Patches posted, pending integration
 
** How to be sure that ideas we are compatible (or not) with previous versions
 
Amit is working on that with a tester that outputs the code from all devices, and check what is different from two versions.
 
* Define target machine in the monitor
This would allow us to sent the configuration through the migration channel.  This needs very big changes in qemu, but we are heading on that direction.
 
* Fault Tolerance (David Gilbert)
 
Adapting QEMU To fault tolerance.
 
== Code ==
 
The code still not merged is currently kept in several branches of this git repository:
 
* https://github.com/juanquintela/qemu

Latest revision as of 03:22, 10 January 2024

Documentations

You can find the latest migration documentation here:

 https://qemu.org/docs/master/devel/migration

TODO List

If you're looking for something to work on for migration, please have a look at:

 https://wiki.qemu.org/ToDo/LiveMigration

Other references

Contact

If you have any question or want to reach out, feel free to contact:

  • qemu-devel@nongnu
  • Peter Xu <peterx@redhat.com>
  • Fabiano Rosas <farosas@suse.de>

Credits

This is a place we want to show special thanks to to the old good migration maintainers.

  • Juan Quintela
  • Dr. David Alan Gilbert
  • Amit Shah