qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCHv2 2/2] migration: do not overwrite zero pages


From: Wenchao Xia
Subject: Re: [Qemu-devel] [PATCHv2 2/2] migration: do not overwrite zero pages
Date: Thu, 13 Jun 2013 11:30:06 +0800
User-agent: Mozilla/5.0 (Windows NT 5.1; rv:17.0) Gecko/20130509 Thunderbird/17.0.6

于 2013-6-10 18:14, Peter Lieven 写道:
> on incoming migration do not memset pages to zero if they already read as 
> zero.
> this will allocate a new zero page and consume memory unnecessarily. even
> if we madvise a MADV_DONTNEED later this will only deallocate the memory
> asynchronously.
> 
> Signed-off-by: Peter Lieven <address@hidden>
> ---
>   arch_init.c |   14 ++++++++------
>   1 file changed, 8 insertions(+), 6 deletions(-)
> 
> diff --git a/arch_init.c b/arch_init.c
> index 08fccf6..cf4e1d5 100644
> --- a/arch_init.c
> +++ b/arch_init.c
> @@ -832,14 +832,16 @@ static int ram_load(QEMUFile *f, void *opaque, int 
> version_id)
>               }
> 
>               ch = qemu_get_byte(f);
> -            memset(host, ch, TARGET_PAGE_SIZE);
> +            if (ch != 0 || !is_zero_page(host)) {
  If incoming page is not zero, always memset. If incoming page is
zero, then if on destination it is not zero, memset. Logic is OK.
Only question is if the read operation in is_zero_page() consumes
memory, as there are doubt in the discuss before.
  Any way this patch will not break migration in my opinion.

Reviewed-by: Wenchao Xia <address@hidden>


> +                memset(host, ch, TARGET_PAGE_SIZE);
>   #ifndef _WIN32
> -            if (ch == 0 &&
> -                (!kvm_enabled() || kvm_has_sync_mmu()) &&
> -                getpagesize() <= TARGET_PAGE_SIZE) {
> -                qemu_madvise(host, TARGET_PAGE_SIZE, QEMU_MADV_DONTNEED);
> -            }
> +                if (ch == 0 &&
> +                    (!kvm_enabled() || kvm_has_sync_mmu()) &&
> +                    getpagesize() <= TARGET_PAGE_SIZE) {
> +                    qemu_madvise(host, TARGET_PAGE_SIZE, QEMU_MADV_DONTNEED);
> +                }
>   #endif
> +            }
>           } else if (flags & RAM_SAVE_FLAG_PAGE) {
>               void *host;
> 


-- 
Best Regards

Wenchao Xia




reply via email to

[Prev in Thread] Current Thread [Next in Thread]