From: Lei Li <lilei@linux.vnet.ibm.com>
To: qemu-devel@nongnu.org
Cc: aarcange@redhat.com, aliguori@us.ibm.com,
Lei Li <lilei@linux.vnet.ibm.com>,
quintela@redhat.com, mrhines@linux.vnet.ibm.com,
lagarcia@br.ibm.com, pbonzini@redhat.com, rcj@linux.vnet.ibm.com
Subject: [Qemu-devel] [PATCH 0/18 RFC v3] Localhost migration
Date: Wed, 21 Aug 2013 15:18:37 +0800 [thread overview]
Message-ID: <1377069536-12658-1-git-send-email-lilei@linux.vnet.ibm.com> (raw)
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
next reply other threads:[~2013-08-21 7:20 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-21 7:18 Lei Li [this message]
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
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1377069536-12658-1-git-send-email-lilei@linux.vnet.ibm.com \
--to=lilei@linux.vnet.ibm.com \
--cc=aarcange@redhat.com \
--cc=aliguori@us.ibm.com \
--cc=lagarcia@br.ibm.com \
--cc=mrhines@linux.vnet.ibm.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=rcj@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).