qemu-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-commits] [qemu/qemu] 817c60: migration: Improve QMP documentation


From: GitHub
Subject: [Qemu-commits] [qemu/qemu] 817c60: migration: Improve QMP documentation
Date: Tue, 26 Mar 2013 13:00:24 -0700

  Branch: refs/heads/master
  Home:   https://github.com/qemu/qemu
  Commit: 817c60457f41e8643b612d451b3737433e9c7e0a
      
https://github.com/qemu/qemu/commit/817c60457f41e8643b612d451b3737433e9c7e0a
  Author: Juan Quintela <address@hidden>
  Date:   2013-03-26 (Tue, 26 Mar 2013)

  Changed paths:
    M qmp-commands.hx

  Log Message:
  -----------
  migration: Improve QMP documentation

Signed-off-by: Juan Quintela <address@hidden>
Reviewed-by: Eric Blake <address@hidden>


  Commit: e344b8a16de429ada3d9126f26e2a96d71348356
      
https://github.com/qemu/qemu/commit/e344b8a16de429ada3d9126f26e2a96d71348356
  Author: David Gibson <address@hidden>
  Date:   2013-03-26 (Tue, 26 Mar 2013)

  Changed paths:
    M include/migration/vmstate.h
    M savevm.c

  Log Message:
  -----------
  savevm: Add VMSTATE_UINT64_EQUAL helpers

The savevm code already includes a number of *_EQUAL helpers which act as
sanity checks verifying that the configuration of the saved state matches
that of the machine we're loading into to work.  Variants already exist
for 8 bit 16 bit and 32 bit integers, but not 64 bit integers.  This patch
fills that hole, adding a UINT64 version.

Signed-off-by: David Gibson <address@hidden>
Signed-off-by: Juan Quintela <address@hidden>


  Commit: d58f5598342ffebe6c6278d8b90792060fca4792
      
https://github.com/qemu/qemu/commit/d58f5598342ffebe6c6278d8b90792060fca4792
  Author: David Gibson <address@hidden>
  Date:   2013-03-26 (Tue, 26 Mar 2013)

  Changed paths:
    M hw/hw.h
    M include/migration/vmstate.h

  Log Message:
  -----------
  savevm: Add VMSTATE_UINTTL_EQUAL helper

This adds an _EQUAL VMSTATE helper for target_ulongs, defined in terms of
VMSTATE_UINT32_EQUAL or VMSTATE_UINT64_EQUAL as appropriate.

Signed-off-by: David Gibson <address@hidden>
Signed-off-by: Juan Quintela <address@hidden>


  Commit: 213945e4d753b5f214468ff746d65fa76e21dbd1
      
https://github.com/qemu/qemu/commit/213945e4d753b5f214468ff746d65fa76e21dbd1
  Author: David Gibson <address@hidden>
  Date:   2013-03-26 (Tue, 26 Mar 2013)

  Changed paths:
    M include/migration/vmstate.h
    M savevm.c

  Log Message:
  -----------
  savevm: Add VMSTATE_FLOAT64 helpers

The current savevm code includes VMSTATE helpers for a number of commonly
used data types, but not for the float64 type used by the internal floating
point emulation code.  This patch fixes the deficiency.

Signed-off-by: David Gibson <address@hidden>
Signed-off-by: Juan Quintela <address@hidden>


  Commit: 8474a9dd6757be064bf4b35f422b4640d1cca0a5
      
https://github.com/qemu/qemu/commit/8474a9dd6757be064bf4b35f422b4640d1cca0a5
  Author: David Gibson <address@hidden>
  Date:   2013-03-26 (Tue, 26 Mar 2013)

  Changed paths:
    M include/migration/vmstate.h

  Log Message:
  -----------
  savevm: Add VMSTATE_STRUCT_VARRAY_POINTER_UINT32

Currently the savevm code contains a VMSTATE_STRUCT_VARRAY_POINTER_INT32
helper (a variably sized array with the number of elements in an int32_t),
but not VMSTATE_STRUCT_VARRAY_POINTER_UINT32 (... with the number of
elements in a uint32_t).  This patch (trivially) fixes the deficiency.

Signed-off-by: David Gibson <address@hidden>
Signed-off-by: Juan Quintela <address@hidden>


  Commit: 377e2cb96b76c2b0023c1acc7230bf3a9e9f9f40
      
https://github.com/qemu/qemu/commit/377e2cb96b76c2b0023c1acc7230bf3a9e9f9f40
  Author: David Gibson <address@hidden>
  Date:   2013-03-26 (Tue, 26 Mar 2013)

  Changed paths:
    M include/migration/vmstate.h

  Log Message:
  -----------
  savevm: Fix bugs in the VMSTATE_VBUFFER_MULTIPLY definition

The VMSTATE_BUFFER_MULTIPLY macro is misnamed - it actually specifies
a variably sized buffer with VMS_VBUFFER, so should be named
VMSTATE_VBUFFER_MULTIPLY.  This patch fixes this (the macro had no current
users under either name).

In addition, unlike the other VMSTATE_VBUFFER variants, this macro did not
specify VMS_POINTER.  This patch fixes this bug as well.

Signed-off-by: David Gibson <address@hidden>
Signed-off-by: Juan Quintela <address@hidden>


  Commit: c61ca00ada744eb24825be2ba4d6ba8fe3a870a4
      
https://github.com/qemu/qemu/commit/c61ca00ada744eb24825be2ba4d6ba8fe3a870a4
  Author: Peter Lieven <address@hidden>
  Date:   2013-03-26 (Tue, 26 Mar 2013)

  Changed paths:
    M arch_init.c
    M include/qemu-common.h

  Log Message:
  -----------
  move vector definitions to qemu-common.h

vector optimizations will now be used at various places
not just in is_dup_page() in arch_init.c

Signed-off-by: Peter Lieven <address@hidden>
Signed-off-by: Juan Quintela <address@hidden>


  Commit: 41a259bd2b1796ddabdae600ee539269a7ddb6a5
      
https://github.com/qemu/qemu/commit/41a259bd2b1796ddabdae600ee539269a7ddb6a5
  Author: Peter Lieven <address@hidden>
  Date:   2013-03-26 (Tue, 26 Mar 2013)

  Changed paths:
    M include/qemu-common.h
    M util/cutils.c

  Log Message:
  -----------
  cutils: add a function to find non-zero content in a buffer

this adds buffer_find_nonzero_offset() which is a SSE2/Altivec
optimized function that searches for non-zero content in a
buffer.

the function starts full unrolling only after the first few chunks have
been checked one by one. analyzing real memory page data has revealed
that non-zero pages are non-zero within the first 256-512 bits in
most cases. as this function is also heavily used to check for zero memory
pages this tweak has been made to avoid the high setup costs of the fully
unrolled check for non-zero pages.

due to the optimizations used in the function there are restrictions
on buffer address and search length. the function
can_use_buffer_find_nonzero_content() can be used to check if
the function can be used safely.

Signed-off-by: Peter Lieven <address@hidden>
Signed-off-by: Juan Quintela <address@hidden>


  Commit: 56ded708ec38e4cb75a7c7357480ca34c0dc6875
      
https://github.com/qemu/qemu/commit/56ded708ec38e4cb75a7c7357480ca34c0dc6875
  Author: Peter Lieven <address@hidden>
  Date:   2013-03-26 (Tue, 26 Mar 2013)

  Changed paths:
    M util/cutils.c

  Log Message:
  -----------
  buffer_is_zero: use vector optimizations if possible

performance gain on SSE2 is approx. 20-25%. altivec
is not tested. performance for unsigned long arithmetic
is unchanged.

Signed-off-by: Peter Lieven <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Reviewed-by: Orit Wasserman <address@hidden>
Signed-off-by: Juan Quintela <address@hidden>


  Commit: 49f676a00ab540fac1d2008be26434cf85607722
      
https://github.com/qemu/qemu/commit/49f676a00ab540fac1d2008be26434cf85607722
  Author: Peter Lieven <address@hidden>
  Date:   2013-03-26 (Tue, 26 Mar 2013)

  Changed paths:
    M util/bitops.c

  Log Message:
  -----------
  bitops: unroll while loop in find_next_bit()

this patch adopts the loop unrolling idea of bitmap_is_zero() to
speed up the skipping of large areas with zeros in find_next_bit().

this routine is extensively used to find dirty pages in
live migration.

testing only the find_next_bit performance on a zeroed bitfield
the loop onrolling decreased executing time by approx. 50% on x86_64.

Signed-off-by: Peter Lieven <address@hidden>
Signed-off-by: Juan Quintela <address@hidden>


  Commit: 3edcd7e6ebae3ef0ac178eed5f4225803159562d
      
https://github.com/qemu/qemu/commit/3edcd7e6ebae3ef0ac178eed5f4225803159562d
  Author: Peter Lieven <address@hidden>
  Date:   2013-03-26 (Tue, 26 Mar 2013)

  Changed paths:
    M arch_init.c

  Log Message:
  -----------
  migration: search for zero instead of dup pages

virtually all dup pages are zero pages. remove
the special is_dup_page() function and use the
optimized buffer_find_nonzero_offset() function
instead.

here buffer_find_nonzero_offset() is used directly
to avoid the unnecssary additional checks in
buffer_is_zero().

raw performace gain checking 1 GByte zeroed memory
over is_dup_page() is approx. 10-12% with SSE2
and 8-10% with unsigned long arithmedtic.

Signed-off-by: Peter Lieven <address@hidden>
Reviewed-by: Orit Wasserman <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Signed-off-by: Juan Quintela <address@hidden>


  Commit: 78d07ae7ac74bcc7f79aeefbaff17fb142f44b4d
      
https://github.com/qemu/qemu/commit/78d07ae7ac74bcc7f79aeefbaff17fb142f44b4d
  Author: Peter Lieven <address@hidden>
  Date:   2013-03-26 (Tue, 26 Mar 2013)

  Changed paths:
    M arch_init.c

  Log Message:
  -----------
  migration: add an indicator for bulk state of ram migration

the first round of ram transfer is special since all pages
are dirty and thus all memory pages are transferred to
the target. this patch adds a boolean variable to track
this stage.

Signed-off-by: Peter Lieven <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Reviewed-by: Orit Wasserman <address@hidden>
Signed-off-by: Juan Quintela <address@hidden>


  Commit: f1c72795af573b24a7da5eb52375c9aba8a37972
      
https://github.com/qemu/qemu/commit/f1c72795af573b24a7da5eb52375c9aba8a37972
  Author: Peter Lieven <address@hidden>
  Date:   2013-03-26 (Tue, 26 Mar 2013)

  Changed paths:
    M arch_init.c
    M hmp.c
    M include/migration/migration.h
    M migration.c
    M qapi-schema.json
    M qmp-commands.hx

  Log Message:
  -----------
  migration: do not sent zero pages in bulk stage

during bulk stage of ram migration if a page is a
zero page do not send it at all.
the memory at the destination reads as zero anyway.

even if there is an madvise with QEMU_MADV_DONTNEED
at the target upon receipt of a zero page I have observed
that the target starts swapping if the memory is overcommitted.
it seems that the pages are dropped asynchronously.

this patch also updates QMP to return the number of
skipped pages in MigrationStats.

Signed-off-by: Peter Lieven <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Signed-off-by: Juan Quintela <address@hidden>


  Commit: 70c8652bf3c1fea79b7b68864e86926715c49261
      
https://github.com/qemu/qemu/commit/70c8652bf3c1fea79b7b68864e86926715c49261
  Author: Peter Lieven <address@hidden>
  Date:   2013-03-26 (Tue, 26 Mar 2013)

  Changed paths:
    M arch_init.c

  Log Message:
  -----------
  migration: do not search dirty pages in bulk stage

avoid searching for dirty pages just increment the
page offset. all pages are dirty anyway.

Signed-off-by: Peter Lieven <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Reviewed-by: Orit Wasserman <address@hidden>
Signed-off-by: Juan Quintela <address@hidden>


  Commit: 5cc11c46cf187c7d5306b68e730ec0d372cd7ef0
      
https://github.com/qemu/qemu/commit/5cc11c46cf187c7d5306b68e730ec0d372cd7ef0
  Author: Peter Lieven <address@hidden>
  Date:   2013-03-26 (Tue, 26 Mar 2013)

  Changed paths:
    M arch_init.c

  Log Message:
  -----------
  migration: use XBZRLE only after bulk stage

at the beginning of migration all pages are marked dirty and
in the first round a bulk migration of all pages is performed.

currently all these pages are copied to the page cache regardless
of whether they are frequently updated or not. this doesn't make sense
since most of these pages are never transferred again.

this patch changes the XBZRLE transfer to only be used after
the bulk stage has been completed. that means a page is added
to the page cache the second time it is transferred and XBZRLE
can benefit from the third time of transfer.

since the page cache is likely smaller than the number of pages
it's also likely that in the second round the page is missing in the
cache due to collisions in the bulk phase.

on the other hand a lot of unnecessary mallocs, memdups and frees
are saved.

the following results have been taken earlier while executing
the test program from docs/xbzrle.txt. (+) with the patch and (-)
without. (thanks to Eric Blake for reformatting and comments)

+ total time: 22185 milliseconds
- total time: 22410 milliseconds

Shaved 0.3 seconds, better than 1%!

+ downtime: 29 milliseconds
- downtime: 21 milliseconds

Not sure why downtime seemed worse, but probably not the end of the world.

+ transferred ram: 706034 kbytes
- transferred ram: 721318 kbytes

Fewer bytes sent - good.

+ remaining ram: 0 kbytes
- remaining ram: 0 kbytes
+ total ram: 1057216 kbytes
- total ram: 1057216 kbytes
+ duplicate: 108556 pages
- duplicate: 105553 pages
+ normal: 175146 pages
- normal: 179589 pages
+ normal bytes: 700584 kbytes
- normal bytes: 718356 kbytes

Fewer normal bytes...

+ cache size: 67108864 bytes
- cache size: 67108864 bytes
+ xbzrle transferred: 3127 kbytes
- xbzrle transferred: 630 kbytes

...and more compressed pages sent - good.

+ xbzrle pages: 117811 pages
- xbzrle pages: 21527 pages
+ xbzrle cache miss: 18750
- xbzrle cache miss: 179589

And very good improvement on the cache miss rate.

+ xbzrle overflow : 0
- xbzrle overflow : 0

Signed-off-by: Peter Lieven <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Reviewed-by: Orit Wasserman <address@hidden>
Signed-off-by: Juan Quintela <address@hidden>


  Commit: d913829f0fd8451abcb1fd9d6dfce5586d9d7e10
      
https://github.com/qemu/qemu/commit/d913829f0fd8451abcb1fd9d6dfce5586d9d7e10
  Author: Orit Wasserman <address@hidden>
  Date:   2013-03-26 (Tue, 26 Mar 2013)

  Changed paths:
    M include/migration/qemu-file.h

  Log Message:
  -----------
  Add QemuFileWritevBuffer QemuFileOps

This will allow us to write an iovec

Signed-off-by: Orit Wasserman <address@hidden>
Reviewed-by: Juan Quintela <address@hidden>
Signed-off-by: Juan Quintela <address@hidden>


  Commit: 28085f7b4d06970efa004257fcef013caf495a08
      
https://github.com/qemu/qemu/commit/28085f7b4d06970efa004257fcef013caf495a08
  Author: Orit Wasserman <address@hidden>
  Date:   2013-03-26 (Tue, 26 Mar 2013)

  Changed paths:
    M savevm.c

  Log Message:
  -----------
  Add socket_writev_buffer function

Signed-off-by: Orit Wasserman <address@hidden>
Signed-off-by: Juan Quintela <address@hidden>


  Commit: 7d8a30bb98e89c203b3d2289ab0638c38bbeb7c1
      
https://github.com/qemu/qemu/commit/7d8a30bb98e89c203b3d2289ab0638c38bbeb7c1
  Author: Orit Wasserman <address@hidden>
  Date:   2013-03-26 (Tue, 26 Mar 2013)

  Changed paths:
    M savevm.c

  Log Message:
  -----------
  Update bytes_xfer in qemu_put_byte

Signed-off-by: Orit Wasserman <address@hidden>
Reviewed-by: Juan Quintela <address@hidden>
Signed-off-by: Juan Quintela <address@hidden>


  Commit: b3ea2bdb792f6d961ba3adf45cf1f0c63c61e09d
      
https://github.com/qemu/qemu/commit/b3ea2bdb792f6d961ba3adf45cf1f0c63c61e09d
  Author: Orit Wasserman <address@hidden>
  Date:   2013-03-26 (Tue, 26 Mar 2013)

  Changed paths:
    M savevm.c

  Log Message:
  -----------
  Store the data to send also in iovec

All data is still copied into the static buffer.
Adjacent iovecs are coalesced so we send one big buffer
instead of many small buffers.

Signed-off-by: Orit Wasserman <address@hidden>
Signed-off-by: Juan Quintela <address@hidden>


  Commit: cb88aa88d7e96cd12328915b33bf4a1bc054aa3f
      
https://github.com/qemu/qemu/commit/cb88aa88d7e96cd12328915b33bf4a1bc054aa3f
  Author: Orit Wasserman <address@hidden>
  Date:   2013-03-26 (Tue, 26 Mar 2013)

  Changed paths:
    M savevm.c

  Log Message:
  -----------
  Use writev ops if available

Update qemu_fflush and stdio_close to use writev ops if they are available
Use the buffers stored in the iovec.

Signed-off-by: Orit Wasserman <address@hidden>
Reviewed-by: Juan Quintela <address@hidden>
Signed-off-by: Juan Quintela <address@hidden>


  Commit: 6181ec245529e0d40ac669fe3044eef3a9e19610
      
https://github.com/qemu/qemu/commit/6181ec245529e0d40ac669fe3044eef3a9e19610
  Author: Orit Wasserman <address@hidden>
  Date:   2013-03-26 (Tue, 26 Mar 2013)

  Changed paths:
    M include/migration/qemu-file.h
    M savevm.c

  Log Message:
  -----------
  Add qemu_put_buffer_async

This allows us to add a buffer to the iovec to send without copying it
into the static buffer, the buffer will be sent later when qemu_fflush is 
called.

Signed-off-by: Orit Wasserman <address@hidden>
Signed-off-by: Juan Quintela <address@hidden>


  Commit: 500f0061d628b52220038939728f0d7aee634468
      
https://github.com/qemu/qemu/commit/500f0061d628b52220038939728f0d7aee634468
  Author: Orit Wasserman <address@hidden>
  Date:   2013-03-26 (Tue, 26 Mar 2013)

  Changed paths:
    M arch_init.c

  Log Message:
  -----------
  Use qemu_put_buffer_async for guest memory pages

This will remove an unneeded copy of guest memory pages.
For the page header and device state we still copy the data to the
static buffer the other option is to allocate the memory on demand
which is more expensive.

Signed-off-by: Orit Wasserman <address@hidden>
Signed-off-by: Juan Quintela <address@hidden>


  Commit: cd18720a294bd7244ffda719677dd9c737317b67
      
https://github.com/qemu/qemu/commit/cd18720a294bd7244ffda719677dd9c737317b67
  Author: Anthony Liguori <address@hidden>
  Date:   2013-03-26 (Tue, 26 Mar 2013)

  Changed paths:
    M include/char/char.h
    M qemu-char.c

  Log Message:
  -----------
  char: introduce a blocking version of qemu_chr_fe_write

Signed-off-by: Anthony Liguori <address@hidden>


  Commit: 0fbf01fe911e84c588be41636570f46f597113d6
      
https://github.com/qemu/qemu/commit/0fbf01fe911e84c588be41636570f46f597113d6
  Author: Anthony Liguori <address@hidden>
  Date:   2013-03-26 (Tue, 26 Mar 2013)

  Changed paths:
    M qtest.c

  Log Message:
  -----------
  qtest: use synchronous I/O for char device

Peter reported that rtc-test would periodically hang.  It turns out
this was due to an EAGAIN occurring on qemu_chr_fe_write.

Instead of heavily refactoring qtest, just use a synchronous version
of the write operation for qemu_chr_fe_write to address this problem.

Reported-by: Peter Maydell <address@hidden>
Signed-off-by: Anthony Liguori <address@hidden>


  Commit: b57ed9bf075e33cdd2f9eb545ff555301dd57221
      
https://github.com/qemu/qemu/commit/b57ed9bf075e33cdd2f9eb545ff555301dd57221
  Author: Cornelia Huck <address@hidden>
  Date:   2013-03-26 (Tue, 26 Mar 2013)

  Changed paths:
    M hw/s390x/s390-virtio-ccw.c

  Log Message:
  -----------
  virtio-ccw: Queue sanity check for notify hypercall.

Verify that the virtio-ccw notify hypercall passed a reasonable
value for queue.

Cc: address@hidden
Reported-by: Alexander Graf <address@hidden>
Signed-off-by: Cornelia Huck <address@hidden>


  Commit: fad5593ca646010d3cb83f7926d78dd30c20c610
      
https://github.com/qemu/qemu/commit/fad5593ca646010d3cb83f7926d78dd30c20c610
  Author: Anthony Liguori <address@hidden>
  Date:   2013-03-26 (Tue, 26 Mar 2013)

  Changed paths:
    M hw/s390x/s390-virtio-ccw.c

  Log Message:
  -----------
  Merge remote-tracking branch 'cohuck/virtio-ccw-upstr' into staging

# By Cornelia Huck
# Via Cornelia Huck
* cohuck/virtio-ccw-upstr:
  virtio-ccw: Queue sanity check for notify hypercall.


  Commit: 18501ae6e825d8da72369fd091018ef71071bd87
      
https://github.com/qemu/qemu/commit/18501ae6e825d8da72369fd091018ef71071bd87
  Author: Anthony Liguori <address@hidden>
  Date:   2013-03-26 (Tue, 26 Mar 2013)

  Changed paths:
    M arch_init.c
    M hmp.c
    M hw/hw.h
    M include/migration/migration.h
    M include/migration/qemu-file.h
    M include/migration/vmstate.h
    M include/qemu-common.h
    M migration.c
    M qapi-schema.json
    M qmp-commands.hx
    M savevm.c
    M util/bitops.c
    M util/cutils.c

  Log Message:
  -----------
  Merge remote-tracking branch 'quintela/migration.next' into staging

# By Peter Lieven (9) and others
# Via Juan Quintela
* quintela/migration.next: (22 commits)
  Use qemu_put_buffer_async for guest memory pages
  Add qemu_put_buffer_async
  Use writev ops if available
  Store the data to send also in iovec
  Update bytes_xfer in qemu_put_byte
  Add socket_writev_buffer function
  Add QemuFileWritevBuffer QemuFileOps
  migration: use XBZRLE only after bulk stage
  migration: do not search dirty pages in bulk stage
  migration: do not sent zero pages in bulk stage
  migration: add an indicator for bulk state of ram migration
  migration: search for zero instead of dup pages
  bitops: unroll while loop in find_next_bit()
  buffer_is_zero: use vector optimizations if possible
  cutils: add a function to find non-zero content in a buffer
  move vector definitions to qemu-common.h
  savevm: Fix bugs in the VMSTATE_VBUFFER_MULTIPLY definition
  savevm: Add VMSTATE_STRUCT_VARRAY_POINTER_UINT32
  savevm: Add VMSTATE_FLOAT64 helpers
  savevm: Add VMSTATE_UINTTL_EQUAL helper
  ...


Compare: https://github.com/qemu/qemu/compare/e769bdc26ded...18501ae6e825

reply via email to

[Prev in Thread] Current Thread [Next in Thread]