qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v6 00/11] rdma: migration support
@ 2013-04-24 19:00 mrhines
  2013-04-24 19:00 ` [Qemu-devel] [PATCH v6 01/11] rdma: add documentation mrhines
                   ` (11 more replies)
  0 siblings, 12 replies; 25+ messages in thread
From: mrhines @ 2013-04-24 19:00 UTC (permalink / raw)
  To: quintela; +Cc: aliguori, qemu-devel, owasserm, abali, mrhines, gokul, pbonzini

From: "Michael R. Hines" <mrhines@us.ibm.com>

Please pull.

Changes since v5:

- Removed max_size hook.
- Waiting for Signed-Off bys....

Wiki: http://wiki.qemu.org/Features/RDMALiveMigration
Github: git@github.com:hinesmr/qemu.git

Here is a brief summary of total migration time and downtime using RDMA:

Using a 40gbps infiniband link performing a worst-case stress test,
using an 8GB RAM virtual machine:
Using the following command:

$ apt-get install stress
$ stress --vm-bytes 7500M --vm 1 --vm-keep

RESULTS:

1. Migration throughput: 26 gigabits/second.
2. Downtime (stop time) varies between 15 and 100 milliseconds.

EFFECTS of memory registration on bulk phase round:

For example, in the same 8GB RAM example with all 8GB of memory in 
active use and the VM itself is completely idle using the same 40 gbps 
infiniband link:

1. x-rdma-pin-all disabled total time: approximately 7.5 seconds @ 9.5 Gbps
2. x-rdma-pin-all enabled total time: approximately 4 seconds @ 26 Gbps

These numbers would of course scale up to whatever size virtual machine
you have to migrate using RDMA.

Enabling this feature does *not* have any measurable affect on 
migration *downtime*. This is because, without this feature, all of the 
memory will have already been registered already in advance during
the bulk round and does not need to be re-registered during the successive
iteration rounds.

The following changes since commit f3aa844bbb2922a5b8393d17620eca7d7e921ab3:

  build: include config-{, all-}devices.mak after defining CONFIG_SOFTMMU and CONFIG_USER_ONLY (2013-04-24 12:18:41 -0500)

are available in the git repository at:

  git@github.com:hinesmr/qemu.git rdma_patch_v6

for you to fetch changes up to 75e6fac1f642885b93cefe6e1874d648e9850f8f:

  rdma: send pc.ram (2013-04-24 14:55:01 -0400)

----------------------------------------------------------------
Michael R. Hines (11):
      rdma: add documentation
      rdma: export yield_until_fd_readable()
      rdma: export throughput w/ MigrationStats QMP
      rdma: introduce qemu_file_mode_is_not_valid()
      rdma: export qemu_fflush()
      rdma: introduce  ram_handle_compressed()
      rdma: introduce qemu_ram_foreach_block()
      rdma: new QEMUFileOps hooks
      rdma: introduce capability x-rdma-pin-all
      rdma: core logic
      rdma: send pc.ram

 Makefile.objs                 |    1 +
 arch_init.c                   |   59 +-
 configure                     |   29 +
 docs/rdma.txt                 |  404 ++++++
 exec.c                        |    9 +
 hmp.c                         |    2 +
 include/block/coroutine.h     |    6 +
 include/exec/cpu-common.h     |    5 +
 include/migration/migration.h |   25 +
 include/migration/qemu-file.h |   30 +
 migration-rdma.c              | 2707 +++++++++++++++++++++++++++++++++++++++++
 migration.c                   |   27 +
 qapi-schema.json              |   12 +-
 qemu-coroutine-io.c           |   23 +
 savevm.c                      |  107 +-
 15 files changed, 3398 insertions(+), 48 deletions(-)
 create mode 100644 docs/rdma.txt
 create mode 100644 migration-rdma.c

-- 
1.7.10.4

^ permalink raw reply	[flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH v6 00/11] rdma: migration support
@ 2013-05-03 23:28 Chegu Vinod
  2013-05-09 17:20 ` Michael R. Hines
  0 siblings, 1 reply; 25+ messages in thread
From: Chegu Vinod @ 2013-05-03 23:28 UTC (permalink / raw)
  To: Michael R. Hines
  Cc: Karen Noel, Juan Jose Quintela Carreira, Michael S. Tsirkin,
	qemu-devel qemu-devel, Orit Wasserman, Anthony Liguori,
	Paolo Bonzini

[-- Attachment #1: Type: text/plain, Size: 2828 bytes --]


Hi Michael,

I picked up the qemu bits from your github branch and gave it a try.   
(BTW the setup I was given temporary access to has a pair of MLX's  IB 
QDR cards connected back to back via QSFP cables)

Observed a couple of things and wanted to share..perhaps you may be 
aware of them already or perhaps these are unrelated to your specific 
changes ? (Note: Still haven't finished the review of your changes ).

a) x-rdma-pin-all off case

Seem to only work sometimes but fails at other times. Here is an example...

(qemu) rdma: Accepting rdma connection...
rdma: Memory pin all: disabled
rdma: verbs context after listen: 0x555556757d50
rdma: dest_connect Source GID: fe80::2:c903:9:53a5, Dest GID: 
fe80::2:c903:9:5855
rdma: Accepted migration
qemu-system-x86_64: VQ 1 size 0x100 Guest index 0x4d2 inconsistent with 
Host ind
ex 0x4ec: delta 0xffe6
qemu: warning: error while loading state for instance 0x0 of device 
'virtio-net'
load of migration failed


b) x-rdma-pin-all on case :

The guest is not resuming on the target host. i.e. the source host's 
qemu states that migration is complete but the guest is not responsive 
anymore... (doesn't seem to have crashed but its stuck somewhere).    
Have you seen this behavior before ? Any tips on how I could extract 
additional info ?

Besides the list of noted restrictions/issues around having to pin all 
of guest memory....if the pinning is done as part of starting of the 
migration it ends up taking noticeably long time for larger guests. 
Wonder whether that should be counted as part of the total migration 
time ?.

Also the act of pinning all the memory seems to "freeze" the guest. e.g. 
: For larger enterprise sized guests (say 128GB and higher) the guest is 
"frozen" is anywhere from nearly a minute (~50seconds) to multiple 
minutes as the guest size increases...which imo kind of defeats the 
purpose of live guest migration.

Would like to hear if you have already thought about any other 
alternatives to address this issue ? for e.g. would it be better to pin 
all of the guest's memory as part of starting the guest itself ? Yes 
there are restrictions when we do pinning...but it can help with 
performance.
---
BTW, a different (yet sort of related) topic... recently a patch went 
into upstream that provided an option to qemu to mlock all of guest 
memory :

https://lists.gnu.org/archive/html/qemu-devel/2013-04/msg03947.html .

but when attempting to do the mlock for larger guests a lot of time is 
spent bringing each page into cache and clearing/zeron'g it etc.etc.

https://lists.gnu.org/archive/html/qemu-devel/2013-04/msg04161.html


----

Note: The basic tcp based live guest migration in the same qemu version 
still works fine on the same hosts over a pair of non-RDMA cards 10Gb 
NICs connected back-to-back.

Thanks
Vinod




[-- Attachment #2: Type: text/html, Size: 3808 bytes --]

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

end of thread, other threads:[~2013-06-07  5:38 UTC | newest]

Thread overview: 25+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-04-24 19:00 [Qemu-devel] [PATCH v6 00/11] rdma: migration support mrhines
2013-04-24 19:00 ` [Qemu-devel] [PATCH v6 01/11] rdma: add documentation mrhines
2013-04-24 19:00 ` [Qemu-devel] [PATCH v6 02/11] rdma: export yield_until_fd_readable() mrhines
2013-04-24 19:00 ` [Qemu-devel] [PATCH v6 03/11] rdma: export throughput w/ MigrationStats QMP mrhines
2013-04-24 19:00 ` [Qemu-devel] [PATCH v6 04/11] rdma: introduce qemu_file_mode_is_not_valid() mrhines
2013-04-24 19:00 ` [Qemu-devel] [PATCH v6 05/11] rdma: export qemu_fflush() mrhines
2013-04-24 19:00 ` [Qemu-devel] [PATCH v6 06/11] rdma: introduce ram_handle_compressed() mrhines
2013-04-24 19:00 ` [Qemu-devel] [PATCH v6 07/11] rdma: introduce qemu_ram_foreach_block() mrhines
2013-04-24 19:00 ` [Qemu-devel] [PATCH v6 08/11] rdma: new QEMUFileOps hooks mrhines
2013-04-24 19:00 ` [Qemu-devel] [PATCH v6 09/11] rdma: introduce capability x-rdma-pin-all mrhines
2013-04-24 19:00 ` [Qemu-devel] [PATCH v6 10/11] rdma: core logic mrhines
2013-04-25 19:45   ` Anthony Liguori
2013-04-25 19:49     ` Michael R. Hines
2013-04-25 20:13       ` Anthony Liguori
2013-04-24 19:00 ` [Qemu-devel] [PATCH v6 11/11] rdma: send pc.ram mrhines
2013-04-24 21:50 ` [Qemu-devel] [PATCH v6 00/11] rdma: migration support Paolo Bonzini
2013-04-24 23:48   ` Michael R. Hines
  -- strict thread matches above, loose matches on Subject: below --
2013-05-03 23:28 Chegu Vinod
2013-05-09 17:20 ` Michael R. Hines
2013-05-09 22:20   ` Chegu Vinod
2013-05-09 22:45     ` Michael R. Hines
2013-06-02  4:09       ` Michael R. Hines
2013-06-06 23:51         ` Chegu Vinod
2013-06-07  5:38           ` Michael R. Hines
2013-05-10  7:58     ` Paolo Bonzini

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