[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 8/8] Maintain the number of dirty pages
From: |
Orit Wasserman |
Subject: |
Re: [Qemu-devel] [PATCH 8/8] Maintain the number of dirty pages |
Date: |
Mon, 25 Jun 2012 09:45:20 +0300 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20120430 Thunderbird/12.0.1 |
On 06/22/2012 04:46 PM, Juan Quintela wrote:
> Calculate the number of dirty pages takes a lot on hosts with lots
> of memory. Just maintain how many pages are dirty.
>
> Signed-off-by: Juan Quintela <address@hidden>
> ---
> arch_init.c | 15 +--------------
> cpu-all.h | 1 +
> exec-obsolete.h | 10 ++++++++++
> 3 files changed, 12 insertions(+), 14 deletions(-)
>
> diff --git a/arch_init.c b/arch_init.c
> index 7de1abf..545cf8f 100644
> --- a/arch_init.c
> +++ b/arch_init.c
> @@ -228,20 +228,7 @@ static uint64_t bytes_transferred;
>
> static ram_addr_t ram_save_remaining(void)
> {
> - RAMBlock *block;
> - ram_addr_t count = 0;
> -
> - QLIST_FOREACH(block, &ram_list.blocks, next) {
> - ram_addr_t addr;
> - for (addr = 0; addr < block->length; addr += TARGET_PAGE_SIZE) {
> - if (memory_region_get_dirty(block->mr, addr, TARGET_PAGE_SIZE,
> - DIRTY_MEMORY_MIGRATION)) {
> - count++;
> - }
> - }
> - }
> -
> - return count;
> + return ram_list.dirty_pages;
> }
>
> uint64_t ram_bytes_remaining(void)
> diff --git a/cpu-all.h b/cpu-all.h
> index 50c8b62..88cedba 100644
> --- a/cpu-all.h
> +++ b/cpu-all.h
> @@ -477,6 +477,7 @@ typedef struct RAMBlock {
> typedef struct RAMList {
> uint8_t *phys_dirty;
> QLIST_HEAD(, RAMBlock) blocks;
> + uint64_t dirty_pages;
> } RAMList;
> extern RAMList ram_list;
>
> diff --git a/exec-obsolete.h b/exec-obsolete.h
> index f8ffce6..c099256 100644
> --- a/exec-obsolete.h
> +++ b/exec-obsolete.h
> @@ -74,6 +74,11 @@ static inline int cpu_physical_memory_get_dirty(ram_addr_t
> start,
> static inline int cpu_physical_memory_set_dirty_flags(ram_addr_t addr,
> int dirty_flags)
> {
> + if ((dirty_flags & MIGRATION_DIRTY_FLAG) &&
> + !cpu_physical_memory_get_dirty(addr, TARGET_PAGE_SIZE,
> + MIGRATION_DIRTY_FLAG)) {
> + ram_list.dirty_pages++;
> + }
> return ram_list.phys_dirty[addr >> TARGET_PAGE_BITS] |= dirty_flags;
> }
>
> @@ -87,6 +92,11 @@ static inline int
> cpu_physical_memory_clear_dirty_flags(ram_addr_t addr,
> {
> int mask = ~dirty_flags;
>
> + if ((dirty_flags & MIGRATION_DIRTY_FLAG) &&
> + cpu_physical_memory_get_dirty(addr, TARGET_PAGE_SIZE,
> + MIGRATION_DIRTY_FLAG)) {
> + ram_list.dirty_pages--;
> + }
> return ram_list.phys_dirty[addr >> TARGET_PAGE_BITS] &= mask;
> }
>
Reviewed-by: Orit Wasserman <address@hidden>
- Re: [Qemu-devel] [PATCH 1/8] Add spent time for migration, (continued)
- [Qemu-devel] [PATCH 7/8] dirty bitmap: abstract its use, Juan Quintela, 2012/06/22
- [Qemu-devel] [PATCH 6/8] Exit loop if we have been there too long, Juan Quintela, 2012/06/22
- [Qemu-devel] [PATCH 4/8] Only TCG needs TLB handling, Juan Quintela, 2012/06/22
- [Qemu-devel] [PATCH 5/8] Only calculate expected_time for stage 2, Juan Quintela, 2012/06/22
- [Qemu-devel] [PATCH 8/8] Maintain the number of dirty pages, Juan Quintela, 2012/06/22
- Re: [Qemu-devel] [PATCH 8/8] Maintain the number of dirty pages,
Orit Wasserman <=