qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
Cc: Gary R Hook <grhookatwork@gmail.com>, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] Tunneled Migration with Non-Shared Storage
Date: Wed, 19 Nov 2014 11:19:07 +0100	[thread overview]
Message-ID: <546C6E9B.5010801@redhat.com> (raw)
In-Reply-To: <20141119093516.GA2355@work-vm>



On 19/11/2014 10:35, Dr. David Alan Gilbert wrote:
> * Paolo Bonzini (pbonzini@redhat.com) wrote:
>>
>>
>> On 18/11/2014 21:28, Dr. David Alan Gilbert wrote:
>>> This seems odd, since as far as I know the tunneling code is quite separate
>>> to the migration code; I thought the only thing that the migration
>>> code sees different is the file descriptors it gets past.
>>> (Having said that, again I don't know storage stuff, so if this
>>> is a storage special there may be something there...)
>>
>> Tunnelled migration uses the old block-migration.c code.  Non-tunnelled
>> migration uses the NBD server and block/mirror.c. 
> 
> OK, that explains that.  Is that because the tunneling code can't 
> deal with tunneling the NBD server connection?
> 
>> The main problem with
>> the old code is that uses a possibly unbounded amount of memory in
>> mig_save_device_dirty and can have huge jitter if any serious workload
>> is running in the guest.
> 
> So that's sending dirty blocks iteratively? Not that I can see
> when the allocations get freed; but is the amount allocated there
> related to total disk size (as Gary suggested) or to the amount
> of dirty blocks?

It should be related to the maximum rate limit (which can be set to
arbitrarily high values, however).

The reads are started, then the ones that are ready are sent and the
blocks are freed in flush_blks.  The jitter happens when the guest reads
a lot but only writes a few blocks.  In that case, the bdrv_drain_all in
mig_save_device_dirty can be called relatively often and it can be
expensive because it also waits for all guest-initiated reads to complete.

The bulk phase is similar, just with different functions (the reads are
done in mig_save_device_bulk).  With a high rate limit, the total
allocated memory can reach a few gigabytes indeed.

Depending on the scenario, a possible disadvantage of NBD migration is
that it can only throttle each disk separately, while the old code will
apply a single limit to all migrations.

Paolou

  reply	other threads:[~2014-11-19 10:19 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <546B781B.3070309@gmail.com>
2014-11-18 16:51 ` [Qemu-devel] Tunneled Migration with Non-Shared Storage Gary R Hook
2014-11-18 20:28   ` Dr. David Alan Gilbert
2014-11-18 21:38     ` Paolo Bonzini
2014-11-19  9:35       ` Dr. David Alan Gilbert
2014-11-19 10:19         ` Paolo Bonzini [this message]
2014-11-19 10:55         ` Daniel P. Berrange
2014-11-19 20:00     ` Gary R Hook

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=546C6E9B.5010801@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=grhookatwork@gmail.com \
    --cc=qemu-devel@nongnu.org \
    /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).