2019-06-06 13:31+0800, Wanpeng Li: > From: Wanpeng Li <wanpengli@xxxxxxxxxxx> > > Make lapic timer unpinned when timer is injected by posted-interrupt, > the emulated timer can be offload to the housekeeping cpus. > > The host admin should fine tuned, e.g. dedicated instances scenario > w/ nohz_full cover the pCPUs which vCPUs resident, several pCPUs > surplus for housekeeping, disable mwait/hlt/pause vmexits to occupy > the pCPUs, fortunately preemption timer is disabled after mwait is > exposed to guest which makes emulated timer offload can be possible. > > Cc: Paolo Bonzini <pbonzini@xxxxxxxxxx> > Cc: Radim Krčmář <rkrcmar@xxxxxxxxxx> > Signed-off-by: Wanpeng Li <wanpengli@xxxxxxxxxxx> > --- > arch/x86/kvm/lapic.c | 20 ++++++++++++++++---- > arch/x86/kvm/x86.c | 5 +++++ > arch/x86/kvm/x86.h | 2 ++ > include/linux/sched/isolation.h | 2 ++ > kernel/sched/isolation.c | 6 ++++++ > 5 files changed, 31 insertions(+), 4 deletions(-) > > diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c > index fcf42a3..09b7387 100644 > --- a/arch/x86/kvm/lapic.c > +++ b/arch/x86/kvm/lapic.c > @@ -127,6 +127,12 @@ static inline u32 kvm_x2apic_id(struct kvm_lapic *apic) > return apic->vcpu->vcpu_id; > } > > +static inline bool posted_interrupt_inject_timer_enabled(struct kvm_vcpu *vcpu) > +{ > + return pi_inject_timer && kvm_vcpu_apicv_active(vcpu) && > + kvm_mwait_in_guest(vcpu->kvm); I'm torn about the mwait dependency. It covers a lot of the targeted user base, but the relation is convoluted and not fitting perfectly. What do you think about making posted_interrupt_inject_timer_enabled() just pi_inject_timer && kvm_vcpu_apicv_active(vcpu) and disarming the vmx preemption timer when posted_interrupt_inject_timer_enabled(), just like we do with mwait now? Thanks.