qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Chris Friesen <chris.friesen@windriver.com>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] virtio-serial-pci very expensive during live migration
Date: Tue, 6 May 2014 14:01:40 -0600	[thread overview]
Message-ID: <53693FA4.3000306@windriver.com> (raw)

Hi,

I recently made the unfortunate discovery that virtio-serial-pci is 
quite expensive to stop/start during live migration.

By default we support 32 ports, each of which uses 2 queues.  In my case 
it takes 2-3ms per queue to disconnect on the source host, and another 
2-3ms per queue to connect on the target host, for a total cost of >300ms.

In our case this roughly tripled the outage times of a libvirt-based 
live migration, from 150ms to almost 500ms.

It seems like the main problem is that we loop over all the queues, 
calling virtio_pci_set_host_notifier_internal() on each of them.  That 
in turn calls memory_region_add_eventfd(), which calls 
memory_region_transaction_commit(), which scans over all the address 
spaces, which seems to take the vast majority of the time.

Yes, setting the max_ports value to something smaller does help, but 
each port still adds 10-12ms to the overall live migration time, which 
is crazy.

Is there anything that could be done to make this code more efficient? 
Could we tweak the API so that we add all the eventfds and then do a 
single commit at the end?  Do we really need to scan the entire address 
space?  I don't know the code well enough to answer that sort of 
question, but I'm hoping that one of you does.

Thanks,
Chris

             reply	other threads:[~2014-05-06 20:02 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-06 20:01 Chris Friesen [this message]
2014-05-07  5:58 ` [Qemu-devel] virtio-serial-pci very expensive during live migration Markus Armbruster
2014-05-07  6:39 ` Paolo Bonzini
2014-05-07 22:25   ` Chris Friesen
2014-05-08 13:02     ` Amit Shah
2014-05-08 13:14       ` Paolo Bonzini
2014-05-08 13:30         ` Amit Shah
2014-05-08 13:36           ` Paolo Bonzini
2014-05-08 13:47             ` Amit Shah
2014-05-08 15:40               ` Chris Friesen
2014-05-09  0:53                 ` Chris Friesen
2014-05-09  8:19                   ` Paolo Bonzini
2014-06-19 15:19                     ` Chris Friesen
2014-06-19 15:31                       ` Paolo Bonzini
2014-05-08 14:31           ` Chris Friesen
2014-05-08 14:34             ` Paolo Bonzini
2014-05-08 15:57               ` Chris Friesen
2014-05-08 16:02                 ` Paolo Bonzini
2014-05-08 20:57                   ` Chris Friesen
2014-05-09  1:44               ` ChenLiang
2014-05-09  3:31                 ` Chris Friesen
2014-05-08  2:54   ` Gonglei (Arei)

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=53693FA4.3000306@windriver.com \
    --to=chris.friesen@windriver.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).