qemu/include/sysemu
Dr. David Alan Gilbert 371ff5a3f0 Inhibit ballooning during postcopy
Postcopy detects accesses to pages that haven't been transferred yet
using userfaultfd, and it causes exceptions on pages that are 'not
present'.
Ballooning also causes pages to be marked as 'not present' when the
guest inflates the balloon.
Potentially a balloon could be inflated to discard pages that are
currently inflight during postcopy and that may be arriving at about
the same time.

To avoid this confusion, disable ballooning during postcopy.

When disabled we drop balloon requests from the guest.  Since ballooning
is generally initiated by the host, the management system should avoid
initiating any balloon instructions to the guest during migration,
although it's not possible to know how long it would take a guest to
process a request made prior to the start of migration.
Guest initiated ballooning will not know if it's really freed a page
of host memory or not.

Queueing the requests until after migration would be nice, but is
non-trivial, since the set of inflate/deflate requests have to
be compared with the state of the page to know what the final
outcome is allowed to be.

Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Amit Shah <amit.shah@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
2015-11-10 15:00:28 +01:00
..
accel.h accel: Pass MachineState object to accel init functions 2014-10-09 12:57:10 +02:00
arch_init.h migration: move ram stuff to migration/ram 2015-06-12 06:40:59 +02:00
balloon.h Inhibit ballooning during postcopy 2015-11-10 15:00:28 +01:00
block-backend.h block: Add blk_insert_bs() 2015-10-23 18:18:23 +02:00
blockdev.h machine: Eliminate QEMUMachine and qemu_register_machine() 2015-09-19 16:40:30 +02:00
bt.h sysemu: avoid proliferation of include/ subdirectories 2013-04-15 18:19:25 +02:00
char.h char: add qemu_chr_free() 2015-10-24 18:02:48 +02:00
cpus.h Revert "Introduce cpu_clean_all_dirty" 2015-11-05 11:28:23 +01:00
device_tree.h arm: Add PCIe host bridge in virt machine 2015-02-13 05:46:08 +00:00
dma.h exec.c: Make address_space_rw take transaction attributes 2015-04-26 16:49:24 +01:00
dump-arch.h dump: Make DumpState and endian conversion routines available for arch-specific dump code 2014-06-16 13:24:36 +02:00
dump.h dump: Make DumpState and endian conversion routines available for arch-specific dump code 2014-06-16 13:24:36 +02:00
hostmem.h hostmem: add properties for NUMA memory policy 2014-06-19 18:44:21 +03:00
iothread.h Remove various unused functions 2015-05-08 14:11:10 +03:00
kvm_int.h kvm-all: add support for multiple address spaces 2015-07-06 17:59:43 +02:00
kvm.h Revert "Introduce cpu_clean_all_dirty" 2015-11-05 11:28:23 +01:00
memory_mapping.h dump: rebase from host-private RAMBlock offsets to guest-physical addresses 2013-08-08 11:01:46 -04:00
numa.h numa: API to lookup NUMA node by address 2015-07-03 17:47:58 -03:00
os-posix.h os-posix: include sys/time.h 2014-06-23 11:01:24 -04:00
os-win32.h oslib-win32: only provide localtime_r/gmtime_r if missing 2015-09-24 21:13:49 +02:00
qtest.h accel: Move qtest accel registration to qtest.c 2014-10-04 08:59:15 +02:00
replay.h replay: recording of the user input 2015-11-06 10:16:03 +01:00
rng-random.h sysemu: avoid proliferation of include/ subdirectories 2013-04-15 18:19:25 +02:00
rng.h virtio_rng: replace custom backend API with UserCreatable.complete() callback 2014-01-28 12:47:11 -05:00
seccomp.h
sysemu.h Disable mlock around incoming postcopy 2015-11-10 15:00:28 +01:00
tpm_backend_int.h Remove various unused functions 2015-05-08 14:11:10 +03:00
tpm_backend.h Extend TPM TIS interface to support TPM 2 2015-05-31 20:29:02 +02:00
tpm.h TPM: fix build with tpm disabled 2015-06-03 18:19:15 +02:00
watchdog.h hw: move headers to include/ 2013-04-08 18:13:10 +02:00
xen-mapcache.h