As I was cleaning up some of the GICv4 code to make way for GICv4.1 it occured to me that we could drastically reduce the impact of the GICv4 doorbells on systems that are not oversubscribed (each vcpu "owns" a physical CPU).
The technique borrows its logic from the way we disable WFE trapping when a vcpu is the only process on the CPU run-queue. If this vcpu is the target of VLPIs, it is then beneficial not to trap blocking WFIs and to leave the vcpu waiting for interrupts in guest state. All we need to do here is to track whether VLPIs are associated to a vcpu (which is easily done by using a counter that we update on MAPI, DISCARD and MOVI). It has been *very lightly* tested on a D05, and behaved pretty well in my limited test cases (I get almost no doorbell at all in the non oversubscribed case, and the usual hailstorm as soon as there is oversubscription). I'd welcome some testing on more current HW. Marc Zyngier (2): KVM: vgic-v4: Track the number of VLPIs per vcpu KVM: arm64: Opportunistically turn off WFI trapping when using direct LPI injection arch/arm/include/asm/kvm_emulate.h | 4 ++-- arch/arm64/include/asm/kvm_emulate.h | 9 +++++++-- include/linux/irqchip/arm-gic-v4.h | 2 ++ virt/kvm/arm/arm.c | 4 ++-- virt/kvm/arm/vgic/vgic-init.c | 1 + virt/kvm/arm/vgic/vgic-its.c | 3 +++ virt/kvm/arm/vgic/vgic-v4.c | 2 ++ 7 files changed, 19 insertions(+), 6 deletions(-) -- 2.20.1 _______________________________________________ kvmarm mailing list kvmarm@lists.cs.columbia.edu https://lists.cs.columbia.edu/mailman/listinfo/kvmarm