Chao Fan <fanc.f...@cn.fujitsu.com> wrote: > In function cpu_physical_memory_sync_dirty_bitmap, file > include/exec/ram_addr.h: > > if (src[idx][offset]) { > unsigned long bits = atomic_xchg(&src[idx][offset], 0); > unsigned long new_dirty; > new_dirty = ~dest[k]; > dest[k] |= bits; > new_dirty &= bits; > num_dirty += ctpopl(new_dirty); > } > > After these codes executed, only the pages not dirtied in bitmap(dest), > but dirtied in dirty_memory[DIRTY_MEMORY_MIGRATION] will be calculated. > For example: > When ram_list.dirty_memory[DIRTY_MEMORY_MIGRATION] = 0b00001111, > and atomic_rcu_read(&migration_bitmap_rcu)->bmap = 0b00000011, > the new_dirty will be 0b00001100, and this function will return 2 but not > 4 which is expected. > the dirty pages in dirty_memory[DIRTY_MEMORY_MIGRATION] are all new, > so these should be calculated also. # > Signed-off-by: Chao Fan <fanc.f...@cn.fujitsu.com> > Signed-off-by: Li Zhijian <lizhij...@cn.fujitsu.com> > > --- > v2: Remove the parameter 'num_dirty_pages_init' > Fix incoming parameters of trace_migration_bitmap_sync_end
Reviewed-by: Juan Quintela <quint...@redhat.com> Just curious, does this change show any difference in any load? Later, Juan.