On Tue, 11 Jun 2019 at 01:11, Radim Krčmář <rkrcmar@xxxxxxxxxx> wrote: > > 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? Agreed, thanks for the review. :) Regards, Wanpeng Li