Features/Migration: Difference between revisions

From QEMU
Line 18: Line 18:
== TODO Short Term ==
== TODO Short Term ==


* send RHEL fix to get qcow2 working with migration
* use TLS for communication (Orit)
* split migration in its own thread/subroutine. This allows several improments:
 
** monitor can be used on migration target
** vcpus/iothreads can work while live migration part is working
** we can remove several layers of buffering (due to the mainloop design, we are forced to have several layers of buffering).


* split foo_live_migration_calls() onto its partsOther devices that don't have live migration also need the setup part (ivshm, device assignment).
Right now all migration communication are done through clear channelsIf 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.
** foo_setup()    (was stage 1)
** foo_save_live() (was stage 2)
** foo_save_rest() (was stage 3, better name needed)
** foo_cancel()    (was stage -1)


* Once previous split is done, we can create the setup of live handlers for the ones that really exit, not for the rest of them.
* Improve migration bitmap handling (Juan)


* fix migration while using a cdrom (cdrom is not opened correctly on target)
We have a dirty bitmap that has 8 bits for each page.  But we only use three of them (MIGRATION, VGA and CODE).  CODE is only needed for TCG, KVM only cares about MIGRATION, and VGA only is needed for VGA frame bufferes.  Idea is to split this bitmap in three smaller ones that are only used/allocated when needed.  This is specially important when the RAM size of the guest is very big.


* fix migration during reboot (haven't triaged what data is missing)
* Improvements in migration performance (Juan, Paolo)


* port rest of devices to VMState (several of them are already done, but they are on my local tree and not upstream).
Remove last performance problems.  Migration code has already moved to a thread.  We are removing all the extra copies.
 
* Migration native over infiniband?
 
Study.


== TODO Long Term ==  
== TODO Long Term ==  

Revision as of 13:18, 1 February 2013

Summary

Migration roadmap.

Owner

  • Name: Juan Quintela
  • Email: quintela@redhat.com

Detailed Summary

This page describes what are the changes planned for migration and who is supposed to do each of the changes.

Status

This is the roadmap, features are integrated upstream as they are done.

TODO Short Term

  • use TLS for communication (Orit)

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.

  • Improve migration bitmap handling (Juan)

We have a dirty bitmap that has 8 bits for each page. But we only use three of them (MIGRATION, VGA and CODE). CODE is only needed for TCG, KVM only cares about MIGRATION, and VGA only is needed for VGA frame bufferes. Idea is to split this bitmap in three smaller ones that are only used/allocated when needed. This is specially important when the RAM size of the guest is very big.

  • Improvements in migration performance (Juan, Paolo)

Remove last performance problems. Migration code has already moved to a thread. We are removing all the extra copies.

  • Migration native over infiniband?

Study.

TODO Long Term

  • 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.
  • define target machine from the monitor. This will allow us to migrate the configuration of the machine from source to destination, instead of having to had an identical command line in both places.

Code

The code still not merged is currently kept in several branches of this git repository: