qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCHv2 7/9] migration: do not sent zero pages in bulk


From: Eric Blake
Subject: Re: [Qemu-devel] [PATCHv2 7/9] migration: do not sent zero pages in bulk stage
Date: Tue, 19 Mar 2013 11:36:48 -0600
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130311 Thunderbird/17.0.4

On 03/15/2013 09:50 AM, Peter Lieven wrote:
> during bulk stage of ram migration if a page is a
> zero page do not send it at all.
> the memory at the destination reads as zero anyway.
> 
> even if there is an madvise with QEMU_MADV_DONTNEED
> at the target upon receival of a zero page I have observed

s/receival/receipt/

> that the target starts swapping if the memory is overcommitted.
> it seems that the pages are dropped asynchronously.
> 
> Signed-off-by: Peter Lieven <address@hidden>
> ---
>  arch_init.c |    8 +++++---
>  1 file changed, 5 insertions(+), 3 deletions(-)

> +++ b/arch_init.c
> @@ -432,9 +432,11 @@ static int ram_save_block(QEMUFile *f, bool last_stage)
>              bytes_sent = -1;
>              if (buffer_is_zero(p, TARGET_PAGE_SIZE)) {
>                  acct_info.dup_pages++;
> -                bytes_sent = save_block_hdr(f, block, offset, cont,
> -                                            RAM_SAVE_FLAG_COMPRESS);
> -                qemu_put_byte(f, *p);
> +                if (!ram_bulk_stage) {
> +                    bytes_sent = save_block_hdr(f, block, offset, cont,
> +                                                RAM_SAVE_FLAG_COMPRESS);
> +                    qemu_put_byte(f, *p);

Hmm, in patch 5/9, why not 'qemu_put_byte(f, 0)' instead of spending
time dereferencing *p, since you already know the byte is 0?

> +                }
>                  bytes_sent += 1;

Your accounting is now off.  This increments bytes_sent even when
nothing was sent in the bulk phase.  When touching this line, consider
using ++ instead of += 1.

>              } else if (migrate_use_xbzrle()) {
>                  current_addr = block->offset + offset;
> 

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

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