xemu/migration
Peter Xu 8f8bfffcf1 migration: Maintain postcopy faulted addresses
Maintain a list of faulted addresses on the destination host for which we're
waiting on.  This is implemented using a GTree rather than a real list to make
sure even there're plenty of vCPUs/threads that are faulting, the lookup will
still be fast with O(log(N)) (because we'll do that after placing each page).
It should bring a slight overhead, but ideally that shouldn't be a big problem
simply because in most cases the requested page list will be short.

Actually we did similar things for postcopy blocktime measurements.  This patch
didn't use that simply because:

  (1) blocktime measurement is towards vcpu threads only, but here we need to
      record all faulted addresses, including main thread and external
      thread (like, DPDK via vhost-user).

  (2) blocktime measurement will require UFFD_FEATURE_THREAD_ID, but here we
      don't want to add that extra dependency on the kernel version since not
      necessary.  E.g., we don't need to know which thread faulted on which
      page, we also don't care about multiple threads faulting on the same
      page.  But we only care about what addresses are faulted so waiting for a
      page copying from src.

  (3) blocktime measurement is not enabled by default.  However we need this by
      default especially for postcopy recover.

Another thing to mention is that this patch introduced a new mutex to serialize
the receivedmap and the page_requested tree, however that serialization does
not cover other procedures like UFFDIO_COPY.

Signed-off-by: Peter Xu <peterx@redhat.com>
Message-Id: <20201021212721.440373-4-peterx@redhat.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
2020-10-26 16:15:04 +00:00
..
block-dirty-bitmap.c block: Use bdrv_filter_(bs|child) where obvious 2020-09-07 12:31:31 +02:00
block.c migration: using trace_ to replace DPRINTF 2020-10-26 16:15:04 +00:00
block.h
channel.c migration/tls: save hostname into MigrationState 2020-09-25 12:45:58 +01:00
channel.h
colo-failover.c qemu/atomic.h: rename atomic_ to qatomic_ 2020-09-23 16:07:44 +01:00
colo.c error: Remove NULL checks on error_propagate() calls (again) 2020-10-09 08:36:23 +02:00
dirtyrate.c Trivial Patches Pull request 20201013 2020-10-13 14:06:22 +01:00
dirtyrate.h migration/dirtyrate: Implement set_sample_page_period() and is_sample_period_valid() 2020-09-25 12:45:58 +01:00
exec.c
exec.h
fd.c monitor: Use getter/setter functions for cur_mon 2020-10-09 07:08:19 +02:00
fd.h
global_state.c migration: Silence compiler warning in global_state_store_running() 2020-10-02 12:28:48 +01:00
meson.build migration: Move the creation of the library to the main meson.build 2020-10-12 11:50:20 -04:00
migration.c migration: Maintain postcopy faulted addresses 2020-10-26 16:15:04 +00:00
migration.h migration: Maintain postcopy faulted addresses 2020-10-26 16:15:04 +00:00
multifd-zlib.c multifd: Add zlib compression multifd support 2020-02-28 09:24:43 +01:00
multifd-zstd.c multifd: Add zstd compression multifd support 2020-02-28 09:25:49 +01:00
multifd.c Trivial Patches Pull request 20200928 2020-09-28 14:03:09 +01:00
multifd.h migration/tls: add tls_hostname into MultiFDSendParams 2020-09-25 12:45:58 +01:00
page_cache.c migration: using trace_ to replace DPRINTF 2020-10-26 16:15:04 +00:00
page_cache.h
postcopy-ram.c migration: Maintain postcopy faulted addresses 2020-10-26 16:15:04 +00:00
postcopy-ram.h migration/: fix some comment spelling errors 2020-09-17 20:36:32 +02:00
qemu-file-channel.c Header cleanup patches for 2019-08-13 2019-08-16 14:53:43 +01:00
qemu-file-channel.h
qemu-file.c osdep: Make MIN/MAX evaluate arguments only once 2020-06-26 09:39:39 -04:00
qemu-file.h Header cleanup patches for 2019-08-13 2019-08-16 14:53:43 +01:00
qjson.c
qjson.h migration: fix vmdesc leak on vmstate_save() error 2019-09-25 15:51:19 +01:00
ram.c migration: Do not initialise statics and globals to 0 or NULL 2020-10-26 16:15:04 +00:00
ram.h migration/dirtyrate: move RAMBLOCK_FOREACH_MIGRATABLE into ram.h 2020-09-25 12:45:57 +01:00
rdma.c migration: Delete redundant spaces 2020-10-26 16:15:04 +00:00
rdma.h
savevm.c migration: Do not initialise statics and globals to 0 or NULL 2020-10-26 16:15:04 +00:00
savevm.h migration: Optimization about wait-unplug migration state 2020-02-13 10:53:10 +01:00
socket.c migration: unify the framework of socket-type channel 2020-08-28 13:34:52 +01:00
socket.h migration: unify the framework of socket-type channel 2020-08-28 13:34:52 +01:00
tls.c migration/tls: extract migration_tls_client_create for common-use 2020-09-25 12:45:58 +01:00
tls.h migration/tls: extract migration_tls_client_create for common-use 2020-09-25 12:45:58 +01:00
trace-events migration: Maintain postcopy faulted addresses 2020-10-26 16:15:04 +00:00
trace.h trace: switch position of headers to what Meson requires 2020-08-21 06:18:24 -04:00
vmstate-types.c migration: Drop unused VMSTATE_FLOAT64 support 2020-10-26 16:15:04 +00:00
vmstate.c migration: Add spaces around operator 2020-10-26 16:15:04 +00:00
xbzrle.c
xbzrle.h