The dirty and non-dirty pages are checked one by one. When most of the memory is not dirty, checking the dirty and non-dirty pages by multiple page size should be much faster than checking them one by one. We introduced bit-based phys_ram_dirty for VGA, CODE, MIGRATION, MASTER, and cpu_physical_memory_get_dirty_range() for this purpose. Changes from v3 to v4 are:
- Merged {1,2,3}/6 to compile correctly. - Fix setting bits after phys_ram_dirty allocation. - renamed DIRTY_FLAG and DIRTY_IDX converter function. Changes from v2 to v3 are: - Change FLAGS value to (1,2,4,8), and add IDX (0,1,2,3) - Use ffs to convert FLAGS to IDX. - Add a helper function which takes IDX. - Change the behavior of MASTER as a buffer. - Change dirty bitmap access to a loop. - Add brace after if () Yoshiaki Tamura (4): Modify DIRTY_FLAG value and introduce DIRTY_IDX to use as indexes of bit-based phys_ram_dirty. Introduce cpu_physical_memory_get_dirty_range(). Use cpu_physical_memory_set_dirty_range() to update phys_ram_dirty. Use cpu_physical_memory_get_dirty_range() to check multiple dirty pages. arch_init.c | 54 ++++++++++++++--------- bswap.h | 2 + cpu-all.h | 131 ++++++++++++++++++++++++++++++++++++++++++++++++-------- exec.c | 82 +++++++++++++++++++++++++++++++++-- kvm-all.c | 33 +++++++-------- qemu-common.h | 3 + 6 files changed, 242 insertions(+), 63 deletions(-)