|
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 = {
[Prev in Thread] | Current Thread | [Next in Thread] |