A bug was reported about a very slow boot time and a 100% CPU usage of
both Windows and Linux guests when running a VM with multiple
virtio-serial devices (https://bugzilla.redhat.com/1528588).
For example, running a VM with 25 virtio-serial devices, each one with
max_ports=511, could have a boot time of around 30 minutes. With this
patch (and another patch to kvm) the boot time is reduced to
approximately 3 minutes.
The patch wraps all the changes made to the Memory Regions during the
eventfd registrations in a memory regions transaction. I had to add a
cleanup callback function to the EventNotifier struct, so it will be
possible to use a transaction in the shutdown code path as well.
Gal Hammer (3):
qemu: add a cleanup callback function to EventNotifier
virtio: postpone the execution of event_notifier_cleanup function
virtio: improve virtio devices initialization time
accel/kvm/kvm-all.c | 4 ++++
hw/virtio/virtio-bus.c | 19 +++++++++++--------
hw/virtio/virtio.c | 5 +++++
include/qemu/event_notifier.h | 1 +
util/event_notifier-posix.c | 5 ++++-
util/event_notifier-win32.c | 2 ++
6 files changed, 27 insertions(+), 9 deletions(-)