we should set ram_bulk_stage to false after ram_state_init, otherwise the bitmap will be unused in migration_bitmap_find_dirty. all pages in ram cache will be flushed to the ram of secondary guest for each checkpoint.
Signed-off-by: leirao <lei....@intel.com> --- migration/ram.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/migration/ram.c b/migration/ram.c index 76d4fee..6a2b6c1 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -3019,6 +3019,17 @@ static void decompress_data_with_multi_threads(QEMUFile *f, } /* + * we must set ram_bulk_stage to fasle, otherwise in + * migation_bitmap_find_dirty the bitmap will be unused and + * all the pages in ram cache wil be flushed to the ram of + * secondary VM. + */ +static void colo_set_ram_state(RAMState *rsp) +{ + rsp->ram_bulk_stage = false; +} + +/* * colo cache: this is for secondary VM, we cache the whole * memory of the secondary VM, it is need to hold the global lock * to call this helper. @@ -3062,6 +3073,7 @@ int colo_init_ram_cache(void) } ram_state_init(&ram_state); + colo_set_ram_state(ram_state); return 0; } -- 1.8.3.1