[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 36/39] memory: move bitmap synchronization to it
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PATCH 36/39] memory: move bitmap synchronization to its own function |
Date: |
Wed, 06 Nov 2013 16:56:42 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130923 Thunderbird/17.0.9 |
Il 06/11/2013 14:04, Juan Quintela ha scritto:
> We want to have all the functions that handle directly the dirty
> bitmap near. We will change it later.
Please move it to exec.c instead.
> Signed-off-by: Juan Quintela <address@hidden>
> ---
> include/exec/memory-physical.h | 31 +++++++++++++++++++++++++++++++
> kvm-all.c | 27 ++-------------------------
> 2 files changed, 33 insertions(+), 25 deletions(-)
>
> diff --git a/include/exec/memory-physical.h b/include/exec/memory-physical.h
> index 610c55f..72faf06 100644
> --- a/include/exec/memory-physical.h
> +++ b/include/exec/memory-physical.h
> @@ -72,6 +72,37 @@ static inline void
> cpu_physical_memory_set_dirty_range(ram_addr_t start,
> xen_modified_memory(start, length);
> }
>
> +static inline void cpu_physical_memory_set_dirty_lebitmap(unsigned long
> *bitmap,
Why "le"?
Paolo
> + ram_addr_t start,
> + ram_addr_t pages)
> +{
> + unsigned int i, j;
> + unsigned long page_number, c;
> + hwaddr addr;
> + ram_addr_t ram_addr;
> + unsigned int len = (pages + HOST_LONG_BITS - 1) / HOST_LONG_BITS;
> + unsigned long hpratio = getpagesize() / TARGET_PAGE_SIZE;
> +
> + /*
> + * bitmap-traveling is faster than memory-traveling (for addr...)
> + * especially when most of the memory is not dirty.
> + */
> + for (i = 0; i < len; i++) {
> + if (bitmap[i] != 0) {
> + c = leul_to_cpu(bitmap[i]);
> + do {
> + j = ffsl(c) - 1;
> + c &= ~(1ul << j);
> + page_number = (i * HOST_LONG_BITS + j) * hpratio;
> + addr = page_number * TARGET_PAGE_SIZE;
> + ram_addr = start + addr;
> + cpu_physical_memory_set_dirty_range(ram_addr,
> + TARGET_PAGE_SIZE *
> hpratio);
> + } while (c != 0);
> + }
> + }
> +}
> +
> static inline void cpu_physical_memory_clear_dirty_range(ram_addr_t start,
> ram_addr_t length,
> unsigned client)
> diff --git a/kvm-all.c b/kvm-all.c
> index 7609242..25c0864 100644
> --- a/kvm-all.c
> +++ b/kvm-all.c
> @@ -379,33 +379,10 @@ static int kvm_set_migration_log(int enable)
> static int kvm_get_dirty_pages_log_range(MemoryRegionSection *section,
> unsigned long *bitmap)
> {
> - unsigned int i, j;
> - unsigned long page_number, c;
> - hwaddr addr;
> ram_addr_t start = section->offset_within_region + section->mr->ram_addr;
> - ram_addr_t ram_addr;
> - unsigned int pages = int128_get64(section->size) / getpagesize();
> - unsigned int len = (pages + HOST_LONG_BITS - 1) / HOST_LONG_BITS;
> - unsigned long hpratio = getpagesize() / TARGET_PAGE_SIZE;
> + ram_addr_t pages = int128_get64(section->size) / getpagesize();
>
> - /*
> - * bitmap-traveling is faster than memory-traveling (for addr...)
> - * especially when most of the memory is not dirty.
> - */
> - for (i = 0; i < len; i++) {
> - if (bitmap[i] != 0) {
> - c = leul_to_cpu(bitmap[i]);
> - do {
> - j = ffsl(c) - 1;
> - c &= ~(1ul << j);
> - page_number = (i * HOST_LONG_BITS + j) * hpratio;
> - addr = page_number * TARGET_PAGE_SIZE;
> - ram_addr = start + addr;
> - cpu_physical_memory_set_dirty_range(ram_addr,
> - TARGET_PAGE_SIZE *
> hpratio);
> - } while (c != 0);
> - }
> - }
> + cpu_physical_memory_set_dirty_lebitmap(bitmap, start, pages);
> return 0;
> }
>
- [Qemu-devel] [PATCH 32/39] memory: split cpu_physical_memory_* functions to its own include, (continued)
- [Qemu-devel] [PATCH 32/39] memory: split cpu_physical_memory_* functions to its own include, Juan Quintela, 2013/11/06
- [Qemu-devel] [PATCH 31/39] memory: cpu_physical_memory_set_dirty_tracking() should return void, Juan Quintela, 2013/11/06
- [Qemu-devel] [PATCH 33/39] memory: unfold memory_region_test_and_clear(), Juan Quintela, 2013/11/06
- [Qemu-devel] [PATCH 34/39] kvm: use directly cpu_physical_memory_* api for tracking dirty pages, Juan Quintela, 2013/11/06
- [Qemu-devel] [PATCH 35/39] kvm: refactor start address calculation, Juan Quintela, 2013/11/06
- [Qemu-devel] [PATCH 37/39] memory: syncronize kvm bitmap using bitmaps operations, Juan Quintela, 2013/11/06
- [Qemu-devel] [PATCH 36/39] memory: move bitmap synchronization to its own function, Juan Quintela, 2013/11/06
- Re: [Qemu-devel] [PATCH 36/39] memory: move bitmap synchronization to its own function,
Paolo Bonzini <=
- [Qemu-devel] [PATCH 39/39] migration: synchronize memory bitmap 64bits at a time, Juan Quintela, 2013/11/06
- [Qemu-devel] [PATCH 38/39] ram: split function that synchronizes a range, Juan Quintela, 2013/11/06
- Re: [Qemu-devel] [PATCH v2 00/39] bitmap handling optimization, Gerd Hoffmann, 2013/11/06