[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 00/38] bitmap queue
From: |
Juan Quintela |
Subject: |
[Qemu-devel] [PATCH v3 00/38] bitmap queue |
Date: |
Tue, 17 Dec 2013 16:25:36 +0100 |
Hi
This is the last version of the bitmap patches, changes from last submission:
- cleanups: now it passes checkpatch
- all coments from Eric & Paolo addressed
- fixed problem with DIRTY_MEMORY_NUM
- tested by Vinod and numbers are very good
- move bitmap operations to take long as index
- round ram_addr's of blocks as suggesetd by Paolo.
If there is no negative comments, will sent for inclusion.
Thanks, Juan.
[v2]
In this version:
- fixed all the comments from last versions (thanks Eric)
- kvm migration bitmap is synchronized using bitmap operations
- qemu bitmap -> migration bitmap is synchronized using bitmap operations
If bitmaps are not properly aligned, we fall back to old code.
Code survives virt-tests, so should be in quite good shape.
ToDo list:
- vga ram by default is not aligned in a page number multiple of 64,
it could be optimized. Kraxel? It syncs the kvm bitmap at least 1
a second or so? bitmap is only 2048 pages (16MB by default).
We need to change the ram_addr only
- vga: still more, after we finish migration, vga code continues
synchronizing the kvm bitmap on source machine. Notice that there
is no graphics client connected to the VGA. Worth investigating?
- I haven't yet meassure speed differences on big hosts. Vinod?
- Depending of performance, more optimizations to do.
- debugging printf's still on the code, just to see if we are taking
(or not) the optimized paths.
And that is all. Please test & comment.
Thanks, Juan.
The following changes since commit f46e720a82ccdf1a521cf459448f3f96ed895d43:
qemu_opts_parse(): always check return value (2013-12-16 15:33:48 -0800)
are available in the git repository at:
git://github.com/juanquintela/qemu.git bitmap.next
for you to fetch changes up to 197a77684c35f75e43d937220ffac72101783384:
ram: align ram_addr_t's regions in multiples of 64 (2013-12-17 15:56:04 +0100)
----------------------------------------------------------------
Juan Quintela (38):
bitmap: use long as index
memory: cpu_physical_memory_set_dirty_flags() result is never used
memory: cpu_physical_memory_set_dirty_range() return void
exec: use accessor function to know if memory is dirty
memory: create function to set a single dirty bit
exec: create function to get a single dirty bit
memory: make cpu_physical_memory_is_dirty return bool
memory: all users of cpu_physical_memory_get_dirty used only one flag
memory: set single dirty flags when possible
memory: cpu_physical_memory_set_dirty_range() always dirty all flags
memory: cpu_physical_memory_mask_dirty_range() always clears a single flag
memory: use bit 2 for migration
memory: make sure that client is always inside range
memory: only resize dirty bitmap when memory size increases
memory: cpu_physical_memory_clear_dirty_flag() result is never used
bitmap: Add bitmap_zero_extend operation
memory: split dirty bitmap into three
memory: unfold cpu_physical_memory_clear_dirty_flag() in its only user
memory: unfold cpu_physical_memory_set_dirty() in its only user
memory: unfold cpu_physical_memory_set_dirty_flag()
memory: make cpu_physical_memory_get_dirty() the main function
memory: cpu_physical_memory_get_dirty() is used as returning a bool
memory: s/mask/clear/ cpu_physical_memory_mask_dirty_range
memory: use find_next_bit() to find dirty bits
memory: cpu_physical_memory_set_dirty_range() now uses bitmap operations
memory: cpu_physical_memory_clear_dirty_range() now uses bitmap operations
memory: s/dirty/clean/ in cpu_physical_memory_is_dirty()
memory: make cpu_physical_memory_reset_dirty() take a length parameter
memory: cpu_physical_memory_set_dirty_tracking() should return void
memory: split cpu_physical_memory_* functions to its own include
memory: unfold memory_region_test_and_clear()
kvm: use directly cpu_physical_memory_* api for tracking dirty pages
kvm: refactor start address calculation
memory: move bitmap synchronization to its own function
memory: syncronize kvm bitmap using bitmaps operations
ram: split function that synchronizes a range
migration: synchronize memory bitmap 64bits at a time
ram: align ram_addr_t's regions in multiples of 64
arch_init.c | 52 ++++++++++++---
cputlb.c | 11 +--
exec.c | 78 +++++++++++-----------
include/exec/cpu-all.h | 3 +-
include/exec/memory-internal.h | 90 -------------------------
include/exec/memory.h | 12 ++--
include/exec/ram_addr.h | 147 +++++++++++++++++++++++++++++++++++++++++
include/qemu/bitmap.h | 86 +++++++++++++-----------
include/qemu/bitops.h | 14 ++--
kvm-all.c | 28 ++------
memory.c | 17 ++---
util/bitmap.c | 60 ++++++++---------
12 files changed, 337 insertions(+), 261 deletions(-)
create mode 100644 include/exec/ram_addr.h
- [Qemu-devel] [PATCH v3 00/38] bitmap queue,
Juan Quintela <=
- [Qemu-devel] [PATCH 02/38] memory: cpu_physical_memory_set_dirty_flags() result is never used, Juan Quintela, 2013/12/17
- [Qemu-devel] [PATCH 03/38] memory: cpu_physical_memory_set_dirty_range() return void, Juan Quintela, 2013/12/17
- [Qemu-devel] [PATCH 01/38] bitmap: use long as index, Juan Quintela, 2013/12/17
- [Qemu-devel] [PATCH 04/38] exec: use accessor function to know if memory is dirty, Juan Quintela, 2013/12/17
- [Qemu-devel] [PATCH 05/38] memory: create function to set a single dirty bit, Juan Quintela, 2013/12/17
- [Qemu-devel] [PATCH 06/38] exec: create function to get a single dirty bit, Juan Quintela, 2013/12/17