qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH v4 00/47] Postcopy implementation


From: Dr. David Alan Gilbert
Subject: Re: [Qemu-devel] [PATCH v4 00/47] Postcopy implementation
Date: Fri, 3 Oct 2014 20:21:50 +0100
User-agent: Mutt/1.5.23 (2014-03-12)

I've updated our github at:
https://github.com/orbitfp7/qemu/tree/wp3-postcopy

to have this version.

and it corresponds to the tag:
https://github.com/orbitfp7/qemu/releases/tag/wp3-postcopy-v4

Dave

* Dr. David Alan Gilbert (git) (address@hidden) wrote:
> From: "Dr. David Alan Gilbert" <address@hidden>
> 
> Hi,
>   This is the 4th cut of my version of postcopy; it is designed for use with
> the Linux kernel additions just posted by Andrea Arcangeli here:
> 
> http://marc.info/?l=linux-kernel&m=141235633015100&w=2
> 
> (Note: This is a new version compared to my previous postcopy patchset; you'll
> need to update the kernel to the new version.)
> 
> Other than the new kernel ABI (which is only a small change to the userspace 
> side);
> the major changes are;
> 
>   a) Code for host page size != target page size
>   b) Support for migration over fd 
>      From Cristian Klein; this is for libvirt support which Cristian recently
>      posted to the libvirt list.
>   c) It's now build bisectable and builds on 32bit
> 
> Testing wise; I've now done many thousand of postcopy migrations without
> failure (both of idle and busy guests); so it seems pretty solid.
> 
> Must-TODO's:
>   1) A partially repeatable migration_cancel failure
>   2) virt_test's migrate.with_reboot test is failing
>   3) The ACPI fix in 2.1 that allowed migrating RAMBlocks to be larger than
>     the source feels like it needs looking at for postcopy.
>   4) Paolo's comments with respect to the wakeup_request/is_running code
>      in the migration thread
>   5) xbzrle needs disabling once in postcopy
> 
> Later-TODO's:
>   1) Control the rate of background page transfers during postcopy to
>      reduce their impact on the latency of postcopy requests.
>   2) Work with RDMA
>   3) Could destination RP be made blocking (as per discussion with Paolo;
>      I'm still worried that that changes too many assumptions)
> 
> 
> 
> V4:
>   Initial support for host page size != target page size
>     - tested heavily on hps==tps
>     - only partially tested on hps!=tps systems
>     - This involved quite a bit of rework around the discard code
>   Updated to new kernel userfault ABI
>     - It won't work with the previous version
>   Fix mis-optimisation of postcopy request for wrong RAMBlock
>      request for block A offset n
>      un-needed fault for block B/m (already received - no req sent)
>      request for block B/l  - wrongly sent as request for A/l
>   Fix thinko in discard bitmap processing (missed last word of bitmap)
>      Symptom: remap failures near the top of RAM if postcopy started late
>   Fix bug that caused kernel page acknowledgments to be misaligned
>      May have meant the guest was paused for longer than required
>   Fix potential for crashing cleaning up failed RP
>   Fixes in docs (from Yang)
>   Handle migration by fd as sockets if they are sockets
>   Build tested on 32bit
>   Fully build bisectable (x86-64)
> 
> 
> Dave
> 
> Cristian Klein (1):
>   Handle bi-directional communication for fd migration
> 
> Dr. David Alan Gilbert (46):
>   QEMUSizedBuffer based QEMUFile
>   Tests: QEMUSizedBuffer/QEMUBuffer
>   Start documenting how postcopy works.
>   qemu_ram_foreach_block: pass up error value, and down the ramblock
>     name
>   improve DPRINTF macros, add to savevm
>   Add qemu_get_counted_string to read a string prefixed by a count byte
>   Create MigrationIncomingState
>   socket shutdown
>   Provide runtime Target page information
>   Return path: Open a return path on QEMUFile for sockets
>   Return path: socket_writev_buffer: Block even on non-blocking fd's
>   Migration commands
>   Return path: Control commands
>   Return path: Send responses from destination to source
>   Return path: Source handling of return path
>   qemu_loadvm errors and debug
>   ram_debug_dump_bitmap: Dump a migration bitmap as text
>   Rework loadvm path for subloops
>   Add migration-capability boolean for postcopy-ram.
>   Add wrappers and handlers for sending/receiving the postcopy-ram
>     migration messages.
>   QEMU_VM_CMD_PACKAGED: Send a packaged chunk of migration stream
>   migrate_init: Call from savevm
>   Allow savevm handlers to state whether they could go into postcopy
>   postcopy: OS support test
>   migrate_start_postcopy: Command to trigger transition to postcopy
>   MIG_STATE_POSTCOPY_ACTIVE: Add new migration state
>   qemu_savevm_state_complete: Postcopy changes
>   Postcopy page-map-incoming (PMI) structure
>   Postcopy: Maintain sentmap and calculate discard
>   postcopy: Incoming initialisation
>   postcopy: ram_enable_notify to switch on userfault
>   Postcopy: Postcopy startup in migration thread
>   Postcopy: Create a fault handler thread before marking the ram as
>     userfault
>   Page request:  Add MIG_RPCOMM_REQPAGES reverse command
>   Page request: Process incoming page request
>   Page request: Consume pages off the post-copy queue
>   Add assertion to check migration_dirty_pages
>   postcopy_ram.c: place_page and helpers
>   Postcopy: Use helpers to map pages during migration
>   qemu_ram_block_from_host
>   Don't sync dirty bitmaps in postcopy
>   Host page!=target page: Cleanup bitmaps
>   Postcopy; Handle userfault requests
>   Start up a postcopy/listener thread ready for incoming page data
>   postcopy: Wire up loadvm_postcopy_ram_handle_{run,end} commands
>   End of migration for postcopy
> 
>  Makefile.objs                    |    2 +-
>  arch_init.c                      |  739 +++++++++++++++++++++++++--
>  docs/migration.txt               |  189 +++++++
>  exec.c                           |   76 ++-
>  hmp-commands.hx                  |   15 +
>  hmp.c                            |    7 +
>  hmp.h                            |    1 +
>  include/exec/cpu-common.h        |    8 +-
>  include/migration/migration.h    |  130 +++++
>  include/migration/postcopy-ram.h |  106 ++++
>  include/migration/qemu-file.h    |   47 ++
>  include/migration/vmstate.h      |    2 +-
>  include/qemu/sockets.h           |    1 +
>  include/qemu/typedefs.h          |    9 +-
>  include/sysemu/sysemu.h          |   43 +-
>  migration-fd.c                   |   24 +-
>  migration-rdma.c                 |    4 +-
>  migration.c                      |  693 +++++++++++++++++++++++++-
>  postcopy-ram.c                   | 1016 
> ++++++++++++++++++++++++++++++++++++++
>  qapi-schema.json                 |   14 +-
>  qemu-file.c                      |  598 +++++++++++++++++++++-
>  qmp-commands.hx                  |   19 +
>  savevm.c                         |  881 +++++++++++++++++++++++++++++++--
>  tests/Makefile                   |    2 +-
>  tests/test-vmstate.c             |   74 +--
>  util/qemu-sockets.c              |   28 ++
>  26 files changed, 4550 insertions(+), 178 deletions(-)
>  create mode 100644 include/migration/postcopy-ram.h
>  create mode 100644 postcopy-ram.c
> 
> -- 
> 1.9.3
> 
> 
--
Dr. David Alan Gilbert / address@hidden / Manchester, UK



reply via email to

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