qemu/include/exec
Peter Xu 002cad6b16 migration: Split log_clear() into smaller chunks
Currently we are doing log_clear() right after log_sync() which mostly
keeps the old behavior when log_clear() was still part of log_sync().

This patch tries to further optimize the migration log_clear() code
path to split huge log_clear()s into smaller chunks.

We do this by spliting the whole guest memory region into memory
chunks, whose size is decided by MigrationState.clear_bitmap_shift (an
example will be given below).  With that, we don't do the dirty bitmap
clear operation on the remote node (e.g., KVM) when we fetch the dirty
bitmap, instead we explicitly clear the dirty bitmap for the memory
chunk for each of the first time we send a page in that chunk.

Here comes an example.

Assuming the guest has 64G memory, then before this patch the KVM
ioctl KVM_CLEAR_DIRTY_LOG will be a single one covering 64G memory.
If after the patch, let's assume when the clear bitmap shift is 18,
then the memory chunk size on x86_64 will be 1UL<<18 * 4K = 1GB.  Then
instead of sending a big 64G ioctl, we'll send 64 small ioctls, each
of the ioctl will cover 1G of the guest memory.  For each of the 64
small ioctls, we'll only send if any of the page in that small chunk
was going to be sent right away.

Signed-off-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Message-Id: <20190603065056.25211-12-peterx@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
2019-07-15 15:39:03 +02:00
..
user linux-user: Assert on bad type in thunk_type_align() and thunk_type_size() 2018-05-24 20:46:54 +02:00
address-spaces.h Clean up header guards that don't match their file name 2016-07-12 16:19:16 +02:00
cpu_ldst_template.h cpu: Replace ENV_GET_CPU with env_cpu 2019-06-10 07:03:34 -07:00
cpu_ldst_useronly_template.h tcg: Release mmap_lock on translation fault 2019-07-14 12:19:01 +02:00
cpu_ldst.h tcg: Introduce set/clear_helper_retaddr 2019-07-14 12:19:00 +02:00
cpu-all.h Include qemu-common.h exactly where needed 2019-06-12 13:20:20 +02:00
cpu-common.h Header cleanups 2019-05-03 13:03:04 +02:00
cpu-defs.h cpu: Remove CPU_COMMON 2019-06-10 07:03:42 -07:00
cputlb.h cputlb: Count "partial" and "elided" tlb flushes 2018-10-31 12:16:30 +00:00
exec-all.h Include qemu-common.h exactly where needed 2019-06-12 13:20:20 +02:00
gdbstub.h gdbstub: Clarify what gdb_handlesig() is doing 2018-05-25 10:10:55 +02:00
gen-icount.h cpu: Move icount_decr to CPUNegativeOffsetState 2019-06-10 07:03:42 -07:00
helper-gen.h tcg: Allow 6 arguments to TCG helpers 2017-12-29 12:43:40 -08:00
helper-head.h include/exec/helper-head.h: support "const void *" in helper calls 2019-02-21 10:22:24 -08:00
helper-proto.h tcg: Allow 6 arguments to TCG helpers 2017-12-29 12:43:40 -08:00
helper-tcg.h tcg: Add TCG_CALL_NO_RETURN 2018-12-26 06:40:24 +11:00
hwaddr.h hw: Clean up includes 2016-06-07 18:19:23 +03:00
ioport.h hw: clean up hw/hw.h includes 2016-05-19 16:42:30 +02:00
log.h qom/cpu: Simplify how CPUClass:cpu_dump_state() prints 2019-04-18 22:18:59 +02:00
memattrs.h exec: Add target-specific tlb bits to MemTxAttrs 2019-02-05 16:52:37 +00:00
memory_ldst_cached.inc.h exec: reintroduce MemoryRegion caching 2018-05-09 00:13:38 +02:00
memory_ldst_phys.inc.h exec: move memory access declarations to a common header, inline *_phys functions 2018-05-09 00:13:38 +02:00
memory_ldst.inc.h exec: move memory access declarations to a common header, inline *_phys functions 2018-05-09 00:13:38 +02:00
memory-internal.h memory: Clean up how mtree_info() prints 2019-04-18 22:18:59 +02:00
memory.h memory: Introduce memory listener hook log_clear() 2019-07-15 15:39:02 +02:00
poison.h include/exec/poison: Mark TARGET_FMT_lu as poisoned, too 2019-05-09 09:37:09 +02:00
ram_addr.h migration: Split log_clear() into smaller chunks 2019-07-15 15:39:03 +02:00
ramlist.h migration: Poison ramblock loops in migration 2018-06-15 14:40:56 +01:00
softmmu-semi.h cpu: Replace ENV_GET_CPU with env_cpu 2019-06-10 07:03:34 -07:00
target_page.h migration: Make savevm.c target independent 2017-05-18 19:21:00 +02:00
tb-context.h tcg: remove tb_lock 2018-06-15 08:18:48 -10:00
tb-hash.h include: move exec/tb-hash-xx.h to qemu/xxhash.h 2018-12-17 06:04:44 +03:00
tb-lookup.h accel/tcg: Consider cluster index in tb_lookup__cpu_state() 2019-02-06 03:39:24 +00:00
translator.h Clean up decorations and whitespace around header guards 2019-05-13 08:58:55 +02:00