qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] virtio-serial-pci very expensive during live migration


From: Chris Friesen
Subject: Re: [Qemu-devel] virtio-serial-pci very expensive during live migration
Date: Thu, 8 May 2014 08:31:00 -0600
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.4.0

On 05/08/2014 07:30 AM, Amit Shah wrote:
On (Thu) 08 May 2014 [15:14:26], Paolo Bonzini wrote:
Il 08/05/2014 15:02, Amit Shah ha scritto:
I tried the patch below.  Unfortunately it seems to cause qemu to crash.
This doesn't remove the memory_region_transaction_begin() and
_commit() from memory_region_add_eventfd(), which will still be
called.

That's correct, transactions can be nested.

But each _commit() will add to the delay?

No, the _commit() call checks "memory_region_transaction_depth" and only does the address space scan when it hits zero. So with nested transactions only the outer commit will actually do the address space scan.

The fact remains that qemu crashes when I apply the patch. I also tried patching it as below in virtio_pci_vmstate_change(). That would allow the VM to boot, but it would crash when I tried to do a live migration.

Chris



--- qemu-1.4.2.orig/hw/virtio-pci.c
+++ qemu-1.4.2/hw/virtio-pci.c
@@ -32,6 +32,7 @@
 #include "virtio-pci.h"
 #include "qemu/range.h"
 #include "virtio-bus.h"
+#include "exec/memory.h"

 /* from Linux's linux/virtio_pci.h */

@@ -854,7 +855,7 @@ static int virtio_pci_set_host_notifier(
 static void virtio_pci_vmstate_change(DeviceState *d, bool running)
 {
     VirtIOPCIProxy *proxy = to_virtio_pci_proxy(d);
-
+    memory_region_transaction_begin();
     if (running) {
         /* Try to find out if the guest has bus master disabled, but is
            in ready state. Then we have a buggy guest OS. */
@@ -866,6 +867,7 @@ static void virtio_pci_vmstate_change(De
     } else {
         virtio_pci_stop_ioeventfd(proxy);
     }
+    memory_region_transaction_commit();
 }

 static const VirtIOBindings virtio_pci_bindings = {




reply via email to

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