qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/18 RFC v3] Localhost migration
@ 2013-08-21  7:18 Lei Li
  2013-08-21  7:18 ` [Qemu-devel] [PATCH 01/18] migration: export MIG_STATE_xxx flags Lei Li
                   ` (18 more replies)
  0 siblings, 19 replies; 64+ messages in thread
From: Lei Li @ 2013-08-21  7:18 UTC (permalink / raw)
  To: qemu-devel
  Cc: aarcange, aliguori, Lei Li, quintela, mrhines, lagarcia, pbonzini,
	rcj

Hi,

This patch series tries to add a new approach to localhost migration 
support in QEMU. 

When doing localhost migration, the host memory will balloon up 
during the period. This procedure might need to consume twice the 
memory needed to run the guest for some time. So we want to add 
a new live migration mechanism for localhost migration. 

Following I copied from last version that Anthony added for the 
benefit of the other reviewers:

The goal here is to allow "live upgrade" of a running QEMU instance.  
The work flow would look like this:

1) Guests are running QEMU release 1.6.1
2) Admin installs QEMU release 1.6.2 via RPM or deb
3) Admin does localhost migration with page flipping to use new version
   of QEMU.

Page flipping is used in order to avoid requiring that there is enough
free memory to fit an additional copy of the largest guest which is the
requirement today with localhost migration.

You can also read from the link below:
http://lists.gnu.org/archive/html/qemu-devel/2013-06/msg02577.html

The plan is:

1) Add new command to do localhost migration.

   The qmp interface introduced like:

   { 'command': 'localhost-migrate', 'data': {'uri': 'str'} }

2) Use different mechanism than current live migration.

   The very basic work flow like:

       qemu on the source (the source and destination are both on localhost)
              |
              V
           Stop VM
              |
              V   
          Create threads
              |
              V
       Page flipping through vmsplice
              |
              V
       MADV_DONTNEED the ram pages which are already flipped
              |
              V
       Migration completes

   As stopping VM first, we expect/resume the page flipping through vmsplice
   is fast enough to meet *live migration (low downtime).

Notes:
Currently the work flow is not exactly the same as description
above. For the first step, the work flow we implemented is:
stop VM and copy ram pages via unix domain socket, MADV_DONTNEED 
ram pages that already copied. After that, will replace to vmsplice
mechanism instead of copying pages.

Known issues:
Now it has not been completely tested, and there is one problem
on exporting MemoryRegion and RAMBlock into migration-local.c, as 
the code of overriding of rdma hooks like save_page was moved there. 
So still mark it as RFC.

To avoid wasting time and make sure it's the way should be headed, 
send it out earlier to have your suggestions.

Your suggestions and comments would be very appreciated!


Changes since v1&v2:
  - Interface changes including:
      Convert a new qmp command to a capability suggested by Anthony
      and Paolo.
      Create a new URI prefix 'local' instead of a new command-line 
      switch suggested by Michael R. Hines.

  - Integrate to migration_thread from Michael R. Hines.
  - Override rdma hooks suggested by Paolo and Michael R.  

TODO:
- Introduce a mechanism to exchange a PIPE via SCM_RIGHTS.
- benchmark/evaluation.

Lei Li (18):
  migration: export MIG_STATE_xxx flags 
  savevm: export qemu_save_device_state()
  rename is_active to is_block_active
  savevm: set right return value for qemu_file_rate_limit
  savevm: add comments for qemu_file_get_error()
  rdma: bugfix for ram_control_load_hook
  arch_init: export RAM_SAVE_xxx flags
  migration-local: introduce qemu_fopen_local()
  exec: export qemu_get_ram_block()
  migration-local: implementation of outgoing part
  migration: introduce capability localhost
  arch_init: factor out ram_save_blocks()
  arch_init: adjust ram_save_setup() for migrate_is_localhost
  arch_init: skip migration_bitmap_sync for local migration
  migration: adjust migration_thread() for local migration
  migration-local: implementation of incoming part
  migration: add prefix for local migration to incoming migration
  hmp: better fomat for info migrate_capabilities

 Makefile.objs                 |    1 +
 arch_init.c                   |   62 ++++---
 block-migration.c             |    2 +-
 exec.c                        |    7 +-
 hmp.c                         |    5 +-
 include/exec/cpu-all.h        |    1 +
 include/migration/migration.h |   37 ++++
 include/migration/qemu-file.h |   10 +-
 include/migration/vmstate.h   |    2 +-
 include/sysemu/sysemu.h       |    1 +
 migration-local.c             |  397 +++++++++++++++++++++++++++++++++++++++++
 migration.c                   |  107 ++++++----
 qapi-schema.json              |    8 +-
 savevm.c                      |   47 ++++--
 14 files changed, 688 insertions(+), 89 deletions(-)
 create mode 100644 migration-local.c

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

end of thread, other threads:[~2013-08-29 14:06 UTC | newest]

Thread overview: 64+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-08-21  7:18 [Qemu-devel] [PATCH 0/18 RFC v3] Localhost migration Lei Li
2013-08-21  7:18 ` [Qemu-devel] [PATCH 01/18] migration: export MIG_STATE_xxx flags Lei Li
2013-08-21  7:18 ` [Qemu-devel] [PATCH 02/18] savevm: export qemu_save_device_state() Lei Li
2013-08-21 11:13   ` Paolo Bonzini
2013-08-21  7:18 ` [Qemu-devel] [PATCH 03/18] rename is_active to is_block_active Lei Li
2013-08-21  7:18 ` [Qemu-devel] [PATCH 04/18] savevm: set right return value for qemu_file_rate_limit Lei Li
2013-08-21 10:42   ` Paolo Bonzini
2013-08-23  3:18     ` Lei Li
2013-08-23  5:34       ` Paolo Bonzini
2013-08-23  9:11         ` Lei Li
2013-08-23  9:14           ` Paolo Bonzini
2013-08-23  9:18             ` Lei Li
2013-08-23  9:22               ` Paolo Bonzini
2013-08-23  9:25                 ` Lei Li
2013-08-21  7:18 ` [Qemu-devel] [PATCH 05/18] savevm: add comments for qemu_file_get_error() Lei Li
2013-08-21 10:43   ` Paolo Bonzini
2013-08-21  7:18 ` [Qemu-devel] [PATCH 06/18] bugfix: wrong error set by ram_control_load_hook() Lei Li
2013-08-21 10:40   ` Paolo Bonzini
2013-08-23  3:22     ` Lei Li
2013-08-23  5:34       ` Paolo Bonzini
2013-08-23  6:31         ` Lei Li
2013-08-21  7:18 ` [Qemu-devel] [PATCH 07/18] arch_init: export RAM_SAVE_xxx flags Lei Li
2013-08-21 10:49   ` Paolo Bonzini
2013-08-22 20:14     ` Michael R. Hines
2013-08-23  7:36       ` Paolo Bonzini
2013-08-21  7:18 ` [Qemu-devel] [PATCH 08/18] migration-local: introduce qemu_fopen_local() Lei Li
2013-08-22 20:42   ` Michael R. Hines
2013-08-23  7:44     ` Lei Li
2013-08-28  3:26       ` Lei Li
2013-08-28  6:37         ` Paolo Bonzini
2013-08-29  8:28           ` Lei Li
2013-08-29 14:05           ` Michael R. Hines
2013-08-21  7:18 ` [Qemu-devel] [PATCH 09/18] exec: export qemu_get_ram_block() Lei Li
2013-08-21  7:18 ` [Qemu-devel] [PATCH 10/18] migration-local: implementation of outgoing part Lei Li
2013-08-21 10:44   ` Paolo Bonzini
2013-08-22 20:49   ` Michael R. Hines
2013-08-21  7:18 ` [Qemu-devel] [PATCH 11/18] migration: introduce capability localhost Lei Li
2013-08-21 15:08   ` Eric Blake
2013-08-28  4:22     ` Lei Li
2013-08-21 15:18   ` Paolo Bonzini
2013-08-22 20:50     ` Michael R. Hines
2013-08-23  7:40       ` Paolo Bonzini
2013-08-23  7:51         ` Lei Li
2013-08-23  8:01           ` Paolo Bonzini
2013-08-23  9:21             ` Lei Li
2013-08-21  7:18 ` [Qemu-devel] [PATCH 12/18] arch_init: factor out ram_save_blocks() Lei Li
2013-08-21  7:18 ` [Qemu-devel] [PATCH 13/18] arch_init: adjust ram_save_setup() for migrate_is_localhost Lei Li
2013-08-21 10:48   ` Paolo Bonzini
2013-08-23  6:25     ` Lei Li
2013-08-23  7:48       ` Paolo Bonzini
2013-08-23  7:57         ` Alex Bligh
2013-08-23  8:06           ` Paolo Bonzini
2013-08-23  9:00         ` Lei Li
2013-08-23  9:12           ` Paolo Bonzini
2013-08-21  7:18 ` [Qemu-devel] [PATCH 14/18] arch_init: skip migration_bitmap_sync for local migration Lei Li
2013-08-21 10:50   ` Paolo Bonzini
2013-08-21  7:18 ` [Qemu-devel] [PATCH 15/18] migration: adjust migration_thread " Lei Li
2013-08-21 10:47   ` Paolo Bonzini
2013-08-21  7:18 ` [Qemu-devel] [PATCH 16/18] migration-local: implementation of incoming part Lei Li
2013-08-21  7:18 ` Lei Li
2013-08-21  7:18 ` [Qemu-devel] [PATCH 17/18] migration: add prefix for local migration to incoming migration Lei Li
2013-08-21 10:52   ` Paolo Bonzini
2013-08-23 14:02     ` Lei Li
2013-08-21  7:18 ` [Qemu-devel] [PATCH 18/18] hmp: better fomat for info migrate_capabilities Lei Li

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