[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 00/13] migrate/ram: Fix resizing RAM blocks while migrating
From: |
David Hildenbrand |
Subject: |
[PATCH v2 00/13] migrate/ram: Fix resizing RAM blocks while migrating |
Date: |
Fri, 21 Feb 2020 17:41:51 +0100 |
This is the follow up of
"[PATCH RFC] memory: Don't allow to resize RAM while migrating" [1]
This series contains some (slightly modified) patches also contained in:
"[PATCH v2 fixed 00/16] Ram blocks with resizable anonymous allocations
under POSIX" [2]
That series will be based on this series. The last patch (#13) in this
series could be moved to the other series, but I decided to include it in
here for now (similar context).
I realized that resizing RAM blocks while the guest is being migrated
(precopy: resize while still running on the source, postcopy: resize
while already running on the target) is buggy. In case of precopy, we
can simply cancel migration. Postcopy handling is more involved. Resizing
can currently happen during a guest reboot, triggered by ACPI rebuilds.
Along with the fixes, some cleanups.
[1] https://lkml.kernel.org/r/address@hidden
[2] https://lkml.kernel.org/r/address@hidden
I was now able to actually test resizing while migrating. I am using the
prototype of virtio-mem to test (which also makes use of resizable
allocations). Things I was able to reproduce:
- Resize while still running on the migration source. Migration is canceled
-- Test case for "migraton/ram: Handle RAM block resizes during precopy"
- Resize (grow+shrink) on the migration target during postcopy migration
(when syncing RAM blocks), while not yet running on the target
-- Test case for "migration/ram: Discard new RAM when growing RAM blocks
and the VM is stopped", and overall RAM size synchronization. Seems to
work just fine.
- Resize (grow+shrink) on the migration tagret during postcopy migration
while already running on the target.
-- Test case for "migration/ram: Handle RAM block resizes during postcopy"
-- Test case for "migration/ram: Tolerate partially changed mappings in
postcopy code" - I can see that -ENOENT is actually triggered and that
migration succeeds. Migration seems to work just fine.
In addition I run avocado-vt migration tests + usual QEMU checks.
v1 -> v2:
- "util: vfio-helpers: Factor out and fix processing of existing ram
blocks"
-- Stringify error
- "migraton/ram: Handle RAM block resizes during precopy"
-- Simplified check if we're migrating on the source
- "exec: Relax range check in ram_block_discard_range()"
-- Added to make discard during resizes actually work
- "migration/ram: Discard new RAM when growing RAM blocks after
ram_postcopy_incoming_init()"
-- Better checks if in the right postcopy mode.
-- Better patch subject/description/comments
- "migration/ram: Handle RAM block resizes during postcopy"
-- Better comments
-- Adapt to changed postcopy checks
- "migrate/ram: Get rid of "place_source" in ram_load_postcopy()"
-- Dropped, as broken
- "migration/ram: Tolerate partially changed mappings in postcopy code"
-- Better comment / description. Clarify that no implicit wakeup will
happen
-- Warn on EINVAL (older kernels)
-- Wake up any waiter explicitly
David Hildenbrand (13):
util: vfio-helpers: Factor out and fix processing of existing ram
blocks
stubs/ram-block: Remove stubs that are no longer needed
numa: Teach ram block notifiers about resizeable ram blocks
numa: Make all callbacks of ram block notifiers optional
migration/ram: Handle RAM block resizes during precopy
exec: Relax range check in ram_block_discard_range()
migration/ram: Discard RAM when growing RAM blocks after
ram_postcopy_incoming_init()
migration/ram: Simplify host page handling in ram_load_postcopy()
migration/ram: Consolidate variable reset after placement in
ram_load_postcopy()
migration/ram: Handle RAM block resizes during postcopy
migration/multifd: Print used_length of memory block
migration/ram: Use offset_in_ramblock() in range checks
migration/ram: Tolerate partially changed mappings in postcopy code
exec.c | 27 +++++--
hw/core/numa.c | 41 +++++++++--
hw/i386/xen/xen-mapcache.c | 7 +-
include/exec/cpu-common.h | 1 +
include/exec/memory.h | 10 +--
include/exec/ramblock.h | 10 +++
include/exec/ramlist.h | 13 ++--
migration/migration.c | 9 ++-
migration/migration.h | 1 +
migration/multifd.c | 2 +-
migration/postcopy-ram.c | 52 +++++++++++++-
migration/ram.c | 144 ++++++++++++++++++++++++++++---------
stubs/ram-block.c | 20 ------
target/i386/hax-mem.c | 5 +-
target/i386/sev.c | 18 ++---
util/vfio-helpers.c | 41 ++++-------
16 files changed, 283 insertions(+), 118 deletions(-)
--
2.24.1
- [PATCH v2 00/13] migrate/ram: Fix resizing RAM blocks while migrating,
David Hildenbrand <=
- [PATCH v2 01/13] util: vfio-helpers: Factor out and fix processing of existing ram blocks, David Hildenbrand, 2020/02/21
- [PATCH v2 02/13] stubs/ram-block: Remove stubs that are no longer needed, David Hildenbrand, 2020/02/21
- [PATCH v2 03/13] numa: Teach ram block notifiers about resizeable ram blocks, David Hildenbrand, 2020/02/21
- [PATCH v2 04/13] numa: Make all callbacks of ram block notifiers optional, David Hildenbrand, 2020/02/21
- [PATCH v2 05/13] migration/ram: Handle RAM block resizes during precopy, David Hildenbrand, 2020/02/21
- [PATCH v2 06/13] exec: Relax range check in ram_block_discard_range(), David Hildenbrand, 2020/02/21
- [PATCH v2 08/13] migration/ram: Simplify host page handling in ram_load_postcopy(), David Hildenbrand, 2020/02/21
- [PATCH v2 07/13] migration/ram: Discard RAM when growing RAM blocks after ram_postcopy_incoming_init(), David Hildenbrand, 2020/02/21