In vfio migration resume phase, the cost would increase if the vfio device has more unmasked vectors. We try to optimize it in this series.
Patch 1 & 2 are simple code cleanups. Patch 3 defers to set irqs to vfio core. Patch 4 & 5 defer to commit the route to KVM core. The test VM has 128 vcpus and 8 VF (with 65 vectors enabled), we mesure the cost of the vfio_msix_enable for each one, and we can see the total cost can be significantly reduced. Origin Apply Patch 3 Apply Patch 3/4/5 1st 8 4 2 2nd 15 11 2 3rd 22 18 2 4th 24 25 3 5th 36 33 2 6th 44 40 3 7th 51 47 3 8th 58 54 4 Total 258ms 232ms 21ms Longpeng (Mike) (5): vfio: use helper to simplfy the failure path in vfio_msi_enable msix: simplfy the conditional in msix_set/unset_vector_notifiers vfio: defer to enable msix in migration resume phase kvm: irqchip: support defer to commit the route vfio: defer to commit kvm route in migraiton resume phase accel/kvm/kvm-all.c | 10 +++-- accel/stubs/kvm-stub.c | 3 +- hw/misc/ivshmem.c | 2 +- hw/pci/msix.c | 7 ++-- hw/vfio/pci.c | 99 ++++++++++++++++++++++++++++++++++++++------------ hw/vfio/pci.h | 1 + hw/virtio/virtio-pci.c | 2 +- include/sysemu/kvm.h | 4 +- target/i386/kvm/kvm.c | 2 +- 9 files changed, 95 insertions(+), 35 deletions(-) -- 1.8.3.1