[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: |
Juan Quintela |
Subject: |
Re: [Qemu-devel] [PATCH 36/39] memory: move bitmap synchronization to its own function |
Date: |
Wed, 06 Nov 2013 17:22:12 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) |
Paolo Bonzini <address@hidden> wrote:
> 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"?
little endian, name is already too long (cpu_physical_memory_ is too
big as a preffix.)
>
> 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]);
this is the important part. KVM maintains the bitmap is Little Endian
mode, and PPC? I assme needs this.
>> + 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);
I checked, and it appears that ppc really use the hpratio thing. I
hope that the bitmap optimization also works for ppc, but its
architecture is weird^Winteresting O:-)
Alex?
- Re: [Qemu-devel] [PATCH 32/39] memory: split cpu_physical_memory_* functions to its own include, (continued)
- [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
- [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
Re: [Qemu-devel] [PATCH v2 00/39] bitmap handling optimization, Chegu Vinod, 2013/11/08