From: Paolo Bonzini <pbonzini@redhat.com>
To: Juan Quintela <quintela@redhat.com>
Cc: chegu_vinod@hp.com, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 36/39] memory: move bitmap synchronization to its own function
Date: Wed, 06 Nov 2013 16:56:42 +0100 [thread overview]
Message-ID: <527A66BA.7030906@redhat.com> (raw)
In-Reply-To: <1383743088-8139-37-git-send-email-quintela@redhat.com>
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 <quintela@redhat.com>
> ---
> 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;
> }
>
next prev parent reply other threads:[~2013-11-06 15:57 UTC|newest]
Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-06 13:04 [Qemu-devel] [PATCH v2 00/39] bitmap handling optimization Juan Quintela
2013-11-06 13:04 ` [Qemu-devel] [PATCH 01/39] Move prototypes to memory.h Juan Quintela
2013-11-07 9:36 ` Orit Wasserman
2013-11-06 13:04 ` [Qemu-devel] [PATCH 02/39] memory: cpu_physical_memory_set_dirty_flags() result is never used Juan Quintela
2013-11-07 9:42 ` Orit Wasserman
2013-11-06 13:04 ` [Qemu-devel] [PATCH 03/39] memory: cpu_physical_memory_set_dirty_range() return void Juan Quintela
2013-11-07 9:51 ` Orit Wasserman
2013-11-06 13:04 ` [Qemu-devel] [PATCH 04/39] exec: use accessor function to know if memory is dirty Juan Quintela
2013-11-07 10:00 ` Orit Wasserman
2013-11-06 13:04 ` [Qemu-devel] [PATCH 05/39] memory: create function to set a single dirty bit Juan Quintela
2013-11-07 11:37 ` Orit Wasserman
2013-11-06 13:04 ` [Qemu-devel] [PATCH 06/39] exec: create function to get " Juan Quintela
2013-11-06 23:11 ` Eric Blake
2013-11-06 13:04 ` [Qemu-devel] [PATCH 07/39] memory: make cpu_physical_memory_is_dirty return bool Juan Quintela
2013-11-06 13:04 ` [Qemu-devel] [PATCH 08/39] exec: simplify notdirty_mem_write() Juan Quintela
2013-11-06 23:12 ` Eric Blake
2013-11-06 13:04 ` [Qemu-devel] [PATCH 09/39] memory: all users of cpu_physical_memory_get_dirty used only one flag Juan Quintela
2013-11-06 13:04 ` [Qemu-devel] [PATCH 10/39] memory: set single dirty flags when possible Juan Quintela
2013-11-06 13:04 ` [Qemu-devel] [PATCH 11/39] memory: cpu_physical_memory_set_dirty_range() allways dirty all flags Juan Quintela
2013-11-06 23:15 ` Eric Blake
2013-11-06 13:04 ` [Qemu-devel] [PATCH 12/39] memory: cpu_physical_memory_mask_dirty_range() always clear a single flag Juan Quintela
2013-11-06 23:18 ` Eric Blake
2013-11-06 13:04 ` [Qemu-devel] [PATCH 13/39] memory: use DIRTY_MEMORY_* instead of *_DIRTY_FLAG Juan Quintela
2013-11-06 23:24 ` Eric Blake
2013-11-06 13:04 ` [Qemu-devel] [PATCH 14/39] memory: use bit 2 for migration Juan Quintela
2013-11-06 13:04 ` [Qemu-devel] [PATCH 15/39] memory: make sure that client is always inside range Juan Quintela
2013-11-06 13:04 ` [Qemu-devel] [PATCH 16/39] memory: only resize dirty bitmap when memory size increases Juan Quintela
2013-11-06 13:04 ` [Qemu-devel] [PATCH 17/39] memory: cpu_physical_memory_clear_dirty_flag() result is never used Juan Quintela
2013-11-06 13:04 ` [Qemu-devel] [PATCH 18/39] bitmap: Add bitmap_zero_extend operation Juan Quintela
2013-11-06 13:04 ` [Qemu-devel] [PATCH 19/39] memory: split dirty bitmap into three Juan Quintela
2013-11-06 23:39 ` Eric Blake
2013-11-06 13:04 ` [Qemu-devel] [PATCH 20/39] memory: unfold cpu_physical_memory_clear_dirty_flag() in its only user Juan Quintela
2013-11-06 13:04 ` [Qemu-devel] [PATCH 21/39] memory: unfold cpu_physical_memory_set_dirty() " Juan Quintela
2013-11-06 13:04 ` [Qemu-devel] [PATCH 22/39] memory: unfold cpu_physical_memory_set_dirty_flag() Juan Quintela
2013-11-06 13:04 ` [Qemu-devel] [PATCH 23/39] memory: make cpu_physical_memory_get_dirty() the main function Juan Quintela
2013-11-06 23:44 ` Eric Blake
2013-11-06 13:04 ` [Qemu-devel] [PATCH 24/39] memory: cpu_physical_memory_get_dirty() is used as returning a bool Juan Quintela
2013-11-06 13:04 ` [Qemu-devel] [PATCH 25/39] memory: s/mask/clear/ cpu_physical_memory_mask_dirty_range Juan Quintela
2013-11-06 13:04 ` [Qemu-devel] [PATCH 26/39] memory: use find_next_bit() to find dirty bits Juan Quintela
2013-11-06 13:04 ` [Qemu-devel] [PATCH 27/39] memory: cpu_physical_memory_set_dirty_range() now uses bitmap operations Juan Quintela
2013-11-06 23:49 ` Eric Blake
2013-11-06 13:04 ` [Qemu-devel] [PATCH 28/39] memory: cpu_physical_memory_clear_dirty_range() " Juan Quintela
2013-11-06 13:04 ` [Qemu-devel] [PATCH 29/39] memory: s/dirty/clean/ in cpu_physical_memory_is_dirty() Juan Quintela
2013-11-06 13:04 ` [Qemu-devel] [PATCH 30/39] memory: make cpu_physical_memory_reset_dirty() take a length parameter Juan Quintela
2013-11-06 13:04 ` [Qemu-devel] [PATCH 31/39] memory: cpu_physical_memory_set_dirty_tracking() should return void Juan Quintela
2013-11-06 23:55 ` Eric Blake
2013-11-06 13:04 ` [Qemu-devel] [PATCH 32/39] memory: split cpu_physical_memory_* functions to its own include Juan Quintela
2013-11-06 15:54 ` Paolo Bonzini
2013-11-06 13:04 ` [Qemu-devel] [PATCH 33/39] memory: unfold memory_region_test_and_clear() Juan Quintela
2013-11-06 13:04 ` [Qemu-devel] [PATCH 34/39] kvm: use directly cpu_physical_memory_* api for tracking dirty pages Juan Quintela
2013-11-06 13:04 ` [Qemu-devel] [PATCH 35/39] kvm: refactor start address calculation Juan Quintela
2013-11-06 13:04 ` [Qemu-devel] [PATCH 36/39] memory: move bitmap synchronization to its own function Juan Quintela
2013-11-06 15:56 ` Paolo Bonzini [this message]
2013-11-06 16:22 ` Juan Quintela
2013-11-06 16:23 ` Paolo Bonzini
2013-12-18 8:54 ` Alexander Graf
2013-11-06 13:04 ` [Qemu-devel] [PATCH 37/39] memory: syncronize kvm bitmap using bitmaps operations Juan Quintela
2013-11-06 15:58 ` Paolo Bonzini
2013-11-06 13:04 ` [Qemu-devel] [PATCH 38/39] ram: split function that synchronizes a range Juan Quintela
2013-11-06 13:04 ` [Qemu-devel] [PATCH 39/39] migration: synchronize memory bitmap 64bits at a time Juan Quintela
2013-11-06 14:37 ` [Qemu-devel] [PATCH v2 00/39] bitmap handling optimization Gerd Hoffmann
2013-11-06 15:38 ` Juan Quintela
2013-11-07 11:23 ` Gerd Hoffmann
2013-11-06 15:49 ` Paolo Bonzini
2013-11-25 6:39 ` Michael R. Hines
2013-11-25 9:45 ` Paolo Bonzini
2013-11-08 15:18 ` Chegu Vinod
2013-11-25 6:15 ` Michael R. Hines
2013-11-25 6:58 ` Michael R. Hines
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=527A66BA.7030906@redhat.com \
--to=pbonzini@redhat.com \
--cc=chegu_vinod@hp.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).