All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dor Laor <dlaor@redhat.com>
To: Anthony Liguori <anthony@codemonkey.ws>
Cc: kvm@vger.kernel.org, satoshi.itoh@aist.go.jp,
	t.hirofuchi@aist.go.jp, Juan Quintela <quintela@redhat.com>,
	Michael Roth <mdroth@linux.vnet.ibm.com>,
	qemu-devel@nongnu.org, Isaku Yamahata <yamahata@valinux.co.jp>,
	Umesh Deshpande <umesh_d@live.com>
Subject: Re: [PATCH 00/21][RFC] postcopy live migration
Date: Sun, 01 Jan 2012 11:52:27 +0200	[thread overview]
Message-ID: <4F002CDB.7070708@redhat.com> (raw)
In-Reply-To: <4EFCEC38.3080308@codemonkey.ws>

On 12/30/2011 12:39 AM, Anthony Liguori wrote:
> On 12/28/2011 07:25 PM, Isaku Yamahata wrote:
>> Intro
>> =====
>> This patch series implements postcopy live migration.[1]
>> As discussed at KVM forum 2011, dedicated character device is used for
>> distributed shared memory between migration source and destination.
>> Now we can discuss/benchmark/compare with precopy. I believe there are
>> much rooms for improvement.
>>
>> [1] http://wiki.qemu.org/Features/PostCopyLiveMigration
>>
>>
>> Usage
>> =====
>> You need load umem character device on the host before starting
>> migration.
>> Postcopy can be used for tcg and kvm accelarator. The implementation
>> depend
>> on only linux umem character device. But the driver dependent code is
>> split
>> into a file.
>> I tested only host page size == guest page size case, but the
>> implementation
>> allows host page size != guest page size case.
>>
>> The following options are added with this patch series.
>> - incoming part
>> command line options
>> -postcopy [-postcopy-flags<flags>]
>> where flags is for changing behavior for benchmark/debugging
>> Currently the following flags are available
>> 0: default
>> 1: enable touching page request
>>
>> example:
>> qemu -postcopy -incoming tcp:0:4444 -monitor stdio -machine accel=kvm
>>
>> - outging part
>> options for migrate command
>> migrate [-p [-n]] URI
>> -p: indicate postcopy migration
>> -n: disable background transferring pages: This is for
>> benchmark/debugging
>>
>> example:
>> migrate -p -n tcp:<dest ip address>:4444
>>
>>
>> TODO
>> ====
>> - benchmark/evaluation. Especially how async page fault affects the
>> result.
>
> I'll review this series next week (Mike/Juan, please also review when
> you can).
>
> But we really need to think hard about whether this is the right thing
> to take into the tree. I worry a lot about the fact that we don't test
> pre-copy migration nearly enough and adding a second form just
> introduces more things to test.

It is an issue but it can't be a merge criteria, Isaku is not blame of 
pre copy live migration lack of testing.

I would say that 90% of issues of live migration problems are not 
related to the pre|post stage but more of issues of device model save 
state. So post-copy shouldn't add a significant regression here.

Probably it will be good to ask every migration patch writer to write an 
additional unit test for migration.

> It's also not clear to me why post-copy is better. If you were going to
> sit down and explain to someone building a management tool when they
> should use pre-copy and when they should use post-copy, what would you
> tell them?

Today, we have a default of max-downtime of 100ms.
If either the guest work set size or the host networking throughput 
can't match the downtime, migration won't end.
The mgmt user options are:
  - increase the downtime more and more to an actual stop
  - fail migrate

W/ post-copy there is another option.
Performance measurements will teach us (probably prior to commit) when 
this stage is valuable. Most likely, we better try first with pre-copy 
and if we can't meet the downtime we can optionally use post-copy.

Here's a paper by Umesh (the migration thread writer):
http://osnet.cs.binghamton.edu/publications/hines09postcopy_osr.pdf

Regards,
Dor

>
> Regards,
>
> Anthony Liguori
>

WARNING: multiple messages have this Message-ID (diff)
From: Dor Laor <dlaor@redhat.com>
To: Anthony Liguori <anthony@codemonkey.ws>
Cc: kvm@vger.kernel.org, satoshi.itoh@aist.go.jp,
	t.hirofuchi@aist.go.jp, Juan Quintela <quintela@redhat.com>,
	Michael Roth <mdroth@linux.vnet.ibm.com>,
	qemu-devel@nongnu.org, Isaku Yamahata <yamahata@valinux.co.jp>,
	Umesh Deshpande <umesh_d@live.com>
Subject: Re: [Qemu-devel] [PATCH 00/21][RFC] postcopy live migration
Date: Sun, 01 Jan 2012 11:52:27 +0200	[thread overview]
Message-ID: <4F002CDB.7070708@redhat.com> (raw)
In-Reply-To: <4EFCEC38.3080308@codemonkey.ws>

On 12/30/2011 12:39 AM, Anthony Liguori wrote:
> On 12/28/2011 07:25 PM, Isaku Yamahata wrote:
>> Intro
>> =====
>> This patch series implements postcopy live migration.[1]
>> As discussed at KVM forum 2011, dedicated character device is used for
>> distributed shared memory between migration source and destination.
>> Now we can discuss/benchmark/compare with precopy. I believe there are
>> much rooms for improvement.
>>
>> [1] http://wiki.qemu.org/Features/PostCopyLiveMigration
>>
>>
>> Usage
>> =====
>> You need load umem character device on the host before starting
>> migration.
>> Postcopy can be used for tcg and kvm accelarator. The implementation
>> depend
>> on only linux umem character device. But the driver dependent code is
>> split
>> into a file.
>> I tested only host page size == guest page size case, but the
>> implementation
>> allows host page size != guest page size case.
>>
>> The following options are added with this patch series.
>> - incoming part
>> command line options
>> -postcopy [-postcopy-flags<flags>]
>> where flags is for changing behavior for benchmark/debugging
>> Currently the following flags are available
>> 0: default
>> 1: enable touching page request
>>
>> example:
>> qemu -postcopy -incoming tcp:0:4444 -monitor stdio -machine accel=kvm
>>
>> - outging part
>> options for migrate command
>> migrate [-p [-n]] URI
>> -p: indicate postcopy migration
>> -n: disable background transferring pages: This is for
>> benchmark/debugging
>>
>> example:
>> migrate -p -n tcp:<dest ip address>:4444
>>
>>
>> TODO
>> ====
>> - benchmark/evaluation. Especially how async page fault affects the
>> result.
>
> I'll review this series next week (Mike/Juan, please also review when
> you can).
>
> But we really need to think hard about whether this is the right thing
> to take into the tree. I worry a lot about the fact that we don't test
> pre-copy migration nearly enough and adding a second form just
> introduces more things to test.

It is an issue but it can't be a merge criteria, Isaku is not blame of 
pre copy live migration lack of testing.

I would say that 90% of issues of live migration problems are not 
related to the pre|post stage but more of issues of device model save 
state. So post-copy shouldn't add a significant regression here.

Probably it will be good to ask every migration patch writer to write an 
additional unit test for migration.

> It's also not clear to me why post-copy is better. If you were going to
> sit down and explain to someone building a management tool when they
> should use pre-copy and when they should use post-copy, what would you
> tell them?

Today, we have a default of max-downtime of 100ms.
If either the guest work set size or the host networking throughput 
can't match the downtime, migration won't end.
The mgmt user options are:
  - increase the downtime more and more to an actual stop
  - fail migrate

W/ post-copy there is another option.
Performance measurements will teach us (probably prior to commit) when 
this stage is valuable. Most likely, we better try first with pre-copy 
and if we can't meet the downtime we can optionally use post-copy.

Here's a paper by Umesh (the migration thread writer):
http://osnet.cs.binghamton.edu/publications/hines09postcopy_osr.pdf

Regards,
Dor

>
> Regards,
>
> Anthony Liguori
>

  parent reply	other threads:[~2012-01-01  9:52 UTC|newest]

Thread overview: 88+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-12-29  1:25 [PATCH 00/21][RFC] postcopy live migration Isaku Yamahata
2011-12-29  1:25 ` [Qemu-devel] " Isaku Yamahata
2011-12-29  1:25 ` [PATCH 01/21] arch_init: export sort_ram_list() and ram_save_block() Isaku Yamahata
2011-12-29  1:25   ` [Qemu-devel] " Isaku Yamahata
2011-12-29  1:25 ` [PATCH 02/21] arch_init: export RAM_SAVE_xxx flags for postcopy Isaku Yamahata
2011-12-29  1:25   ` [Qemu-devel] " Isaku Yamahata
2011-12-29  1:25 ` [PATCH 03/21] arch_init/ram_save: introduce constant for ram save version = 4 Isaku Yamahata
2011-12-29  1:25   ` [Qemu-devel] " Isaku Yamahata
2011-12-29  1:25 ` [PATCH 04/21] arch_init: refactor host_from_stream_offset() Isaku Yamahata
2011-12-29  1:25   ` [Qemu-devel] " Isaku Yamahata
2011-12-29  1:25 ` [PATCH 05/21] arch_init/ram_save_live: factor out RAM_SAVE_FLAG_MEM_SIZE case Isaku Yamahata
2011-12-29  1:25   ` [Qemu-devel] " Isaku Yamahata
2011-12-29  1:25 ` [PATCH 06/21] arch_init: refactor ram_save_block() Isaku Yamahata
2011-12-29  1:25   ` [Qemu-devel] " Isaku Yamahata
2011-12-29  1:25 ` [PATCH 07/21] arch_init/ram_save_live: factor out ram_save_limit Isaku Yamahata
2011-12-29  1:25   ` [Qemu-devel] " Isaku Yamahata
2011-12-29  1:25 ` [PATCH 08/21] arch_init/ram_load: refactor ram_load Isaku Yamahata
2011-12-29  1:25   ` [Qemu-devel] " Isaku Yamahata
2011-12-29  1:25 ` [PATCH 09/21] exec.c: factor out qemu_get_ram_ptr() Isaku Yamahata
2011-12-29  1:25   ` [Qemu-devel] " Isaku Yamahata
2011-12-29  1:25 ` [PATCH 10/21] exec.c: export last_ram_offset() Isaku Yamahata
2011-12-29  1:25   ` [Qemu-devel] " Isaku Yamahata
2011-12-29  1:25 ` [PATCH 11/21] savevm: export qemu_peek_buffer, qemu_peek_byte, qemu_file_skip Isaku Yamahata
2011-12-29  1:25   ` [Qemu-devel] " Isaku Yamahata
2011-12-29  1:25 ` [PATCH 12/21] savevm: qemu_pending_size() to return pending buffered size Isaku Yamahata
2011-12-29  1:25   ` [Qemu-devel] " Isaku Yamahata
2011-12-29  1:25 ` [PATCH 13/21] savevm, buffered_file: introduce method to drain buffer of buffered file Isaku Yamahata
2011-12-29  1:25   ` [Qemu-devel] " Isaku Yamahata
2011-12-29  1:25 ` [PATCH 14/21] migration: export migrate_fd_completed() and migrate_fd_cleanup() Isaku Yamahata
2011-12-29  1:25   ` [Qemu-devel] " Isaku Yamahata
2011-12-29  1:25 ` [PATCH 15/21] migration: factor out parameters into MigrationParams Isaku Yamahata
2011-12-29  1:25   ` [Qemu-devel] " Isaku Yamahata
2011-12-29  1:25 ` [PATCH 16/21] umem.h: import Linux umem.h Isaku Yamahata
2011-12-29  1:25   ` [Qemu-devel] " Isaku Yamahata
2011-12-29  1:25 ` [PATCH 17/21] update-linux-headers.sh: teach umem.h to update-linux-headers.sh Isaku Yamahata
2011-12-29  1:25   ` [Qemu-devel] " Isaku Yamahata
2011-12-29  1:25 ` [PATCH 18/21] configure: add CONFIG_POSTCOPY option Isaku Yamahata
2011-12-29  1:25   ` [Qemu-devel] " Isaku Yamahata
2011-12-29  1:25 ` [PATCH 19/21] postcopy: introduce -postcopy and -postcopy-flags option Isaku Yamahata
2011-12-29  1:25   ` [Qemu-devel] " Isaku Yamahata
2011-12-29  1:25 ` [PATCH 20/21] postcopy outgoing: add -p and -n option to migrate command Isaku Yamahata
2011-12-29  1:25   ` [Qemu-devel] " Isaku Yamahata
2011-12-29  1:26 ` [PATCH 21/21] postcopy: implement postcopy livemigration Isaku Yamahata
2011-12-29  1:26   ` [Qemu-devel] " Isaku Yamahata
2011-12-29 15:51   ` Orit Wasserman
2011-12-29 15:51     ` Orit Wasserman
2012-01-04  3:34     ` Isaku Yamahata
2012-01-04  3:34       ` [Qemu-devel] " Isaku Yamahata
2011-12-29 16:06   ` Avi Kivity
2011-12-29 16:06     ` [Qemu-devel] " Avi Kivity
2012-01-04  3:29     ` Isaku Yamahata
2012-01-04  3:29       ` [Qemu-devel] " Isaku Yamahata
2012-01-12 14:15       ` Avi Kivity
2012-01-12 14:15         ` [Qemu-devel] " Avi Kivity
2011-12-29 22:39 ` [PATCH 00/21][RFC] postcopy live migration Anthony Liguori
2011-12-29 22:39   ` [Qemu-devel] " Anthony Liguori
2012-01-01  9:43   ` Orit Wasserman
2012-01-01  9:43     ` [Qemu-devel] " Orit Wasserman
2012-01-01 16:27     ` Stefan Hajnoczi
2012-01-01 16:27       ` Stefan Hajnoczi
2012-01-02  9:28       ` Dor Laor
2012-01-02  9:28         ` Dor Laor
2012-01-02 17:22         ` Stefan Hajnoczi
2012-01-02 17:22           ` [Qemu-devel] " Stefan Hajnoczi
2012-01-01  9:52   ` Dor Laor [this message]
2012-01-01  9:52     ` Dor Laor
2012-01-04  1:30     ` Takuya Yoshikawa
2012-01-04  1:30       ` [Qemu-devel] " Takuya Yoshikawa
2012-01-04  3:48     ` Michael Roth
2012-01-04  3:48       ` [Qemu-devel] " Michael Roth
2012-01-04  3:51   ` Isaku Yamahata
2012-01-04  3:51     ` Isaku Yamahata
     [not found] ` <BLU0-SMTP161AC380D472854F48E33A5BC9A0@phx.gbl>
2012-01-11  2:45   ` 回??: " Isaku Yamahata
2012-01-11  2:45     ` [Qemu-devel] " Isaku Yamahata
2012-01-12  8:29     ` thfbjyddx
2012-01-12  8:29       ` [Qemu-devel] " thfbjyddx
2012-01-12  8:54       ` 回??: [PATCH 00/21][RFC] postcopy live?migration Isaku Yamahata
2012-01-12  8:54         ` [Qemu-devel] " Isaku Yamahata
2012-01-12 13:26         ` thfbjyddx
2012-01-12 13:26           ` [Qemu-devel] " thfbjyddx
2012-01-16  6:51           ` Isaku Yamahata
2012-01-16  6:51             ` [Qemu-devel] " Isaku Yamahata
2012-01-16 10:17             ` Isaku Yamahata
2012-01-16 10:17               ` [Qemu-devel] " Isaku Yamahata
2012-03-12  8:36               ` thfbjyddx
2012-03-12  8:36                 ` [Qemu-devel] " thfbjyddx
2012-03-13  3:21                 ` Isaku Yamahata
2012-03-13  3:21                   ` [Qemu-devel] " Isaku Yamahata

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=4F002CDB.7070708@redhat.com \
    --to=dlaor@redhat.com \
    --cc=anthony@codemonkey.ws \
    --cc=kvm@vger.kernel.org \
    --cc=mdroth@linux.vnet.ibm.com \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    --cc=satoshi.itoh@aist.go.jp \
    --cc=t.hirofuchi@aist.go.jp \
    --cc=umesh_d@live.com \
    --cc=yamahata@valinux.co.jp \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.