Re: [Qemu-devel] [PATCH 0/17 v2] Localhost migration with side channel for ram

2013-11-21 Thread Lei Li

On 10/25/2013 08:24 PM, Lei Li wrote:

On 10/25/2013 03:30 PM, Paolo Bonzini wrote:

Il 25/10/2013 06:58, Lei Li ha scritto:

Right now just has inaccurate numbers without the new vmsplice, which
based on
the result from info migrate, as the guest ram size increases, 
although the

'total time' is number of times less compared with the current live
migration, but the 'downtime' performs badly.

Of course.

For a 1GB ram guest,

total time: 702 milliseconds
downtime: 692 milliseconds

And when the ram size of guest increasesexponentially, those numbers 
are

proportional to it.
  I will make a list of the performance with the new vmsplice later, 
I am

sure it'd be much better than this at least.

Yes, please.  Is the memory usage is still 2x without vmsplice?

I think you have a nice proof of concept, but on the other hand this
probably needs to be coupled with some kind of postcopy live migration,
that is:

* the source starts sending data

* but the destination starts running immediately

* if the machine needs a page that is missing, the destination asks the
source to send it

* as soon as it arrives, the destination can restart

Using postcopy is problematic for reliability: if the destination fails,
the virtual machine is lost because the source doesn't have the latest
content of memory.  However, this is a much, much smaller problem for
live QEMU upgrade where the network cannot fail.

If you do this, you can achieve pretty much instantaneous live upgrade,
well within your original 200 ms goals.  But the flipping code with
vmsplice should be needed anyway to avoid doubling memory usage, and


Yes, I have read the postcopy migration patches, it does perform very
good on downtime, as just send the vmstates then switch the execution
to destination host. And as you pointed out, it can not avoid
doubling memory usage.

The numbers list above are based on the old vmsplice as I have not yet
worked on the benchmark for performance, it actually copys data rather
than moving. As the feedback for this version is positive, now I am
trying to get a real result out with the new vmsplice.

BTW, kernel side is looking for huge page solution for the improvement of
performance.

The recently patches from kernel as link,

http://article.gmane.org/gmane.linux.kernel/1574277


Hi Paolo,

I have been working on the benchmark of the performance, I am afraid that it 
may take
a bit more time as there has some problems on the new vmsplice which kernel 
side is
working on right now.

I will post a v3 of the series with your comments in previous version fixed 
soon.




it's looking pretty good in this version already!  I'm relieved that the
RDMA code was designed right!


I am happy with it too. :)
Those RDMA hooks really make thingsmore flexible!



Paolo







--
Lei




Re: [Qemu-devel] [PATCH 0/17 v2] Localhost migration with side channel for ram

2013-10-25 Thread Paolo Bonzini
Il 25/10/2013 06:58, Lei Li ha scritto:
 Right now just has inaccurate numbers without the new vmsplice, which
 based on
 the result from info migrate, as the guest ram size increases, although the
 'total time' is number of times less compared with the current live
 migration, but the 'downtime' performs badly.

Of course.
 
 For a 1GB ram guest,
 
 total time: 702 milliseconds
 downtime: 692 milliseconds
 
 And when the ram size of guest increasesexponentially, those numbers are
 proportional to it.
  
 I will make a list of the performance with the new vmsplice later, I am
 sure it'd be much better than this at least.

Yes, please.  Is the memory usage is still 2x without vmsplice?

I think you have a nice proof of concept, but on the other hand this
probably needs to be coupled with some kind of postcopy live migration,
that is:

* the source starts sending data

* but the destination starts running immediately

* if the machine needs a page that is missing, the destination asks the
source to send it

* as soon as it arrives, the destination can restart

Using postcopy is problematic for reliability: if the destination fails,
the virtual machine is lost because the source doesn't have the latest
content of memory.  However, this is a much, much smaller problem for
live QEMU upgrade where the network cannot fail.

If you do this, you can achieve pretty much instantaneous live upgrade,
well within your original 200 ms goals.  But the flipping code with
vmsplice should be needed anyway to avoid doubling memory usage, and
it's looking pretty good in this version already!  I'm relieved that the
RDMA code was designed right!

Paolo




Re: [Qemu-devel] [PATCH 0/17 v2] Localhost migration with side channel for ram

2013-10-25 Thread Anthony Liguori
On Oct 25, 2013 8:30 AM, Paolo Bonzini pbonz...@redhat.com wrote:

 Il 25/10/2013 06:58, Lei Li ha scritto:
  Right now just has inaccurate numbers without the new vmsplice, which
  based on
  the result from info migrate, as the guest ram size increases, although
the
  'total time' is number of times less compared with the current live
  migration, but the 'downtime' performs badly.

 Of course.
 
  For a 1GB ram guest,
 
  total time: 702 milliseconds
  downtime: 692 milliseconds
 
  And when the ram size of guest increasesexponentially, those numbers are
  proportional to it.
 
  I will make a list of the performance with the new vmsplice later, I am
  sure it'd be much better than this at least.

 Yes, please.  Is the memory usage is still 2x without vmsplice?

 I think you have a nice proof of concept, but on the other hand this
 probably needs to be coupled with some kind of postcopy live migration,
 that is:

 * the source starts sending data

 * but the destination starts running immediately

 * if the machine needs a page that is missing, the destination asks the
 source to send it

 * as soon as it arrives, the destination can restart

 Using postcopy is problematic for reliability: if the destination fails,
 the virtual machine is lost because the source doesn't have the latest
 content of memory.  However, this is a much, much smaller problem for
 live QEMU upgrade where the network cannot fail.

 If you do this, you can achieve pretty much instantaneous live upgrade,
 well within your original 200 ms goals.

This is actually a very nice justification for post copy.

Regards,

Anthony Liguori

But the flipping code with
 vmsplice should be needed anyway to avoid doubling memory usage, and
 it's looking pretty good in this version already!  I'm relieved that the
 RDMA code was designed right!

 Paolo




Re: [Qemu-devel] [PATCH 0/17 v2] Localhost migration with side channel for ram

2013-10-25 Thread Lei Li

On 10/25/2013 03:30 PM, Paolo Bonzini wrote:

Il 25/10/2013 06:58, Lei Li ha scritto:

Right now just has inaccurate numbers without the new vmsplice, which
based on
the result from info migrate, as the guest ram size increases, although the
'total time' is number of times less compared with the current live
migration, but the 'downtime' performs badly.

Of course.

For a 1GB ram guest,

total time: 702 milliseconds
downtime: 692 milliseconds

And when the ram size of guest increasesexponentially, those numbers are
proportional to it.
  
I will make a list of the performance with the new vmsplice later, I am

sure it'd be much better than this at least.

Yes, please.  Is the memory usage is still 2x without vmsplice?

I think you have a nice proof of concept, but on the other hand this
probably needs to be coupled with some kind of postcopy live migration,
that is:

* the source starts sending data

* but the destination starts running immediately

* if the machine needs a page that is missing, the destination asks the
source to send it

* as soon as it arrives, the destination can restart

Using postcopy is problematic for reliability: if the destination fails,
the virtual machine is lost because the source doesn't have the latest
content of memory.  However, this is a much, much smaller problem for
live QEMU upgrade where the network cannot fail.

If you do this, you can achieve pretty much instantaneous live upgrade,
well within your original 200 ms goals.  But the flipping code with
vmsplice should be needed anyway to avoid doubling memory usage, and


Yes, I have read the postcopy migration patches, it does perform very
good on downtime, as just send the vmstates then switch the execution
to destination host. And as you pointed out, it can not avoid
doubling memory usage.

The numbers list above are based on the old vmsplice as I have not yet
worked on the benchmark for performance, it actually copys data rather
than moving. As the feedback for this version is positive, now I am
trying to get a real result out with the new vmsplice.

BTW, kernel side is looking for huge page solution for the improvement of
performance.

The recently patches from kernel as link,

http://article.gmane.org/gmane.linux.kernel/1574277


it's looking pretty good in this version already!  I'm relieved that the
RDMA code was designed right!


I am happy with it too. :)
Those RDMA hooks really make thingsmore flexible!



Paolo




--
Lei




Re: [Qemu-devel] [PATCH 0/17 v2] Localhost migration with side channel for ram

2013-10-24 Thread Paolo Bonzini
Il 22/10/2013 04:25, Lei Li ha scritto:
 This patch series tries to introduce a mechanism using side
 channel pipe for RAM via SCM_RIGHTS with unix domain socket
 protocol migration.
 
 This side channel is used for the page flipping by vmsplice,
 which is the internal mechanism for localhost migration that
 we are trying to add to QEMU. The backgroud info and previous
 patch series for reference,
 
 Localhost migration
 http://lists.nongnu.org/archive/html/qemu-devel/2013-08/msg02916.html
 
 migration: Introduce side channel for RAM
 http://lists.gnu.org/archive/html/qemu-devel/2013-09/msg04043.html
 
 I have picked patches from the localhost migration series and rebased 
 it on the series of side channel, now it is a complete series that
 passed the basic test.
 
 Please let me know if there is anything needs to be fixed or improved.
 Your suggestions and comments are very welcome, and thanks for Paolo
 for his review and useful suggestions.

Thanks to you for listening. :)

What is performance like?  How much downtime do you get as the guest
size increases?

Paolo



Re: [Qemu-devel] [PATCH 0/17 v2] Localhost migration with side channel for ram

2013-10-24 Thread Lei Li

On 10/24/2013 10:17 PM, Paolo Bonzini wrote:

Il 22/10/2013 04:25, Lei Li ha scritto:

This patch series tries to introduce a mechanism using side
channel pipe for RAM via SCM_RIGHTS with unix domain socket
protocol migration.

This side channel is used for the page flipping by vmsplice,
which is the internal mechanism for localhost migration that
we are trying to add to QEMU. The backgroud info and previous
patch series for reference,

Localhost migration
http://lists.nongnu.org/archive/html/qemu-devel/2013-08/msg02916.html

migration: Introduce side channel for RAM
http://lists.gnu.org/archive/html/qemu-devel/2013-09/msg04043.html

I have picked patches from the localhost migration series and rebased
it on the series of side channel, now it is a complete series that
passed the basic test.

Please let me know if there is anything needs to be fixed or improved.
Your suggestions and comments are very welcome, and thanks for Paolo
for his review and useful suggestions.

Thanks to you for listening. :)

What is performance like?  How much downtime do you get as the guest
size increases?


Hi Paolo,

Thanks very much for your continued reviews, as well as those nice suggestions
and comments!

For the performance, we have not yet benchmarked it from QEMU layer, as now it's
just an initial implementation, and Robert Jennings has been worked on the
improvement of performance on kernel side.

Right now just has inaccurate numbers without the new vmsplice, which based on
the result from info migrate, as the guest ram size increases, although the
'total time' is number of times less compared with the current live migration,
but the 'downtime' performs badly.

For a 1GB ram guest,

total time: 702 milliseconds
downtime: 692 milliseconds

And when the ram size of guest increasesexponentially, those numbers are
proportional to it.
 
I will make a list of the performance with the new vmsplice later, I am sure

it'd be much better than this at least.


Paolo




--
Lei




[Qemu-devel] [PATCH 0/17 v2] Localhost migration with side channel for ram

2013-10-21 Thread Lei Li
This patch series tries to introduce a mechanism using side
channel pipe for RAM via SCM_RIGHTS with unix domain socket
protocol migration.

This side channel is used for the page flipping by vmsplice,
which is the internal mechanism for localhost migration that
we are trying to add to QEMU. The backgroud info and previous
patch series for reference,

Localhost migration
http://lists.nongnu.org/archive/html/qemu-devel/2013-08/msg02916.html

migration: Introduce side channel for RAM
http://lists.gnu.org/archive/html/qemu-devel/2013-09/msg04043.html

I have picked patches from the localhost migration series and rebased 
it on the series of side channel, now it is a complete series that
passed the basic test.

Please let me know if there is anything needs to be fixed or improved.
Your suggestions and comments are very welcome, and thanks for Paolo
for his review and useful suggestions.


Changes since V1:
  Address suggestions from Paolo Bonzini including:

- Use Unix socket QEMUFile as basis of code and adjust the way
  of overriding RDMA hooks.

- Involve the vmsplice for page flipping.

- Add new RunState RUN_STATE_FLIPPING_MIGRATE and add it to
  runstate_needs_reset() for the adjustment of the current
  migration process with page flipping.



Lei Li (17):
  rename is_active to is_block_active
  QAPI: introduce magration capability unix_page_flipping
  migration: add migrate_unix_page_flipping()
  qmp-command.hx: add missing docs for migration capabilites
  migration-local: add QEMUFileLocal with socket based QEMUFile
  migration-local: introduce qemu_fopen_socket_local()
  migration-local: add send_pipefd()
  migration-local: add recv_pipefd()
  migration-local: override before_ram_iterate to send pipefd
  savevm: adjust ram_control_save_page with page flipping
  migration-local: override save_page for page transmit
  migration-local: override hook_ram_load 
  migration-unix: replace qemu_fopen_socket with qemu_fopen_socket_local
  add new RanState RAN_STATE_FLIPPING_MIGRATE
  migration-unix: page flipping support on unix outgoing
  migration: adjust migration_thread() process for unix_page_flipping
  hmp: better fomat for info migrate_capabilities

 Makefile.target   |   1 +
 block-migration.c |   2 +-
 migration-local.c | 512 ++
 hmp.c |   5 +-
 include/migration/migration.h |   3 +
 include/migration/qemu-file.h |   2 +
 include/migration/vmstate.h   |   2 +-
 migration-unix.c  |  27 ++-
 migration.c   |  18 +-
 qapi-schema.json  |  18 +-
 qmp-commands.hx   |   8 +
 savevm.c  |  21 +-
 vl.c  |  12 +-
 13 files changed, 624 insertions(+), 27 deletions(-)
 create mode 100644 migration-local.c