On (Wed) 07 May 2014 [16:25:50], Chris Friesen wrote: > On 05/07/2014 12:39 AM, Paolo Bonzini wrote: > >Il 06/05/2014 22:01, Chris Friesen ha scritto: > >> > >>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, you can wrap the entire loop with memory_region_transaction_begin > >and memory_region_transaction_commit. Can you try that? > > 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. Also, if you're not using all 32 ports, you can restrict the max number of ports for a device using the virtio-serial-pci.max_ports=uint32 property: -device virtio-serial-pci,max_ports=2 Amit