On 2026-08-01 08:06, Aadeshveer Singh wrote: > In fast snapshot load a thread is needed for actively loading in pages > along with the fault path so that the guest is not dependent on fault > thread indefinitely. Considering the difference from usual network > postcopy where major chunk of RAM is already loaded here entire RAM > needs to be loaded later. Existance of background pages which are not > really accessed by the guest might never be loaded and system will be > locked in migration for indefinite time. As there should be no > assumption about how guest accesses memory, the load times can be > indefinite. > > Add postcopy_ram_eager_load_thread(), for the eager thread which > iterates over all non ignored blocks calling ram_block_load_eager() > on each. ram_block_load_eager then iterates to load in all pages using > postcopy_mapped_ram_load_page(), with a different channel, which takes > care of not loading in pages already loaded by fault thread. On > completion the thread schedules postcopy_incoming_complete_bh() to > destroy the incoming migration state. > > Add postcopy_ram_eager_load_setup() to create the thread. Added joining > logic in postcopy_incoming_cleanup(). > > Add tracepoints for entry and exit to eager load thread. > > When both mapped-ram and postcopy-ram are set, divert from > qemu_loadvm_state to run fast snapshot load > > Initialize postcopy RAM state and register RAM Blocks with userfaultfd > via ram_postcopy_incoming_init() and postcopy_ram_incoming_setup() in > process_incoming_migration_co(). Fault thread needs to be launched > before VM to serve faults for some hardwares emulation that need to read > RAM (like vapic devices). Populate bitmaps and offset tables while > reading file in qemu_loadvm_state_main. > > Add function qemu_loadvm_run_fast_snapshot_load() which starts the VM > using loadvm_postcopy_handle_run_bh() and launches eager load thread. > > Skip scheduling process_incoming_migration_bh() in > process_incoming_migration_co(), for fast snapshot load as the state > cleanup is managed by eager load thread on completion. > > Signed-off-by: Aadeshveer Singh <[email protected]> > Reviewed-by: Peter Xu <[email protected]> > --- > migration/migration.c | 36 +++++++++++++++++++-- > migration/migration.h | 5 +++ > migration/postcopy-ram.c | 69 ++++++++++++++++++++++++++++++++++++++++ > migration/postcopy-ram.h | 2 ++ > migration/savevm.c | 16 ++++++++++ > migration/savevm.h | 2 ++ > migration/trace-events | 2 ++ > 7 files changed, 130 insertions(+), 2 deletions(-)
Reviewed-by: Juraj Marcin <[email protected]>
