Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933087Ab2JZNz6 (ORCPT ); Fri, 26 Oct 2012 09:55:58 -0400 Received: from mail-la0-f46.google.com ([209.85.215.46]:59030 "EHLO mail-la0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932356Ab2JZNz5 (ORCPT ); Fri, 26 Oct 2012 09:55:57 -0400 MIME-Version: 1.0 In-Reply-To: <1351187283-20715-4-git-send-email-fweisbec@gmail.com> References: <1351187283-20715-1-git-send-email-fweisbec@gmail.com> <1351187283-20715-4-git-send-email-fweisbec@gmail.com> Date: Fri, 26 Oct 2012 15:55:55 +0200 Message-ID: Subject: Re: [PATCH 3/5] kvm: Directly account vtime to system on guest switch From: Frederic Weisbecker To: LKML , Christian Borntraeger Cc: Frederic Weisbecker , Tony Luck , Fenghua Yu , Benjamin Herrenschmidt , Paul Mackerras , Heiko Carstens , Martin Schwidefsky , Avi Kivity , Marcelo Tosatti , Joerg Roedel , Alexander Graf , Xiantao Zhang , Cornelia Huck , Peter Zijlstra , Ingo Molnar , Thomas Gleixner , Steven Rostedt , Paul Gortmaker Content-Type: text/plain; charset=ISO-8859-1 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4422 Lines: 112 (Adding Christian Borntraeger in Cc) 2012/10/25 Frederic Weisbecker : > Switching to or from guest context is done on ioctl context. > So by the time we call kvm_guest_enter() or kvm_guest_exit() > we know we are not running the idle task. > > As a result, we can directly account the cputime using > vtime_account_system(). > > There are two good reasons to do this: > > * We avoid some useless checks on guest switch. It optimizes > a bit this fast path. > > * In the case of CONFIG_IRQ_TIME_ACCOUNTING, calling vtime_account() > checks for irq time to account. This is pointless since we know > we are not in an irq on guest switch. This is wasting cpu cycles > for no good reason. vtime_account_system() OTOH is a no-op in > this config option. > > * We can remove the irq disable/enable around kvm guest switch in s390. > > A further optimization may consist in introducing a vtime_account_guest() > that directly calls account_guest_time(). > > Signed-off-by: Frederic Weisbecker > Cc: Tony Luck > Cc: Fenghua Yu > Cc: Benjamin Herrenschmidt > Cc: Paul Mackerras > Cc: Heiko Carstens > Cc: Martin Schwidefsky > Cc: Avi Kivity > Cc: Marcelo Tosatti > Cc: Joerg Roedel > Cc: Alexander Graf > Cc: Xiantao Zhang > Cc: Christian Borntraeger > Cc: Cornelia Huck > Cc: Peter Zijlstra > Cc: Ingo Molnar > Cc: Thomas Gleixner > Cc: Steven Rostedt > Cc: Paul Gortmaker > --- > arch/s390/kvm/kvm-s390.c | 4 ---- > include/linux/kvm_host.h | 12 ++++++++++-- > 2 files changed, 10 insertions(+), 6 deletions(-) > > diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c > index ecced9d..d91a955 100644 > --- a/arch/s390/kvm/kvm-s390.c > +++ b/arch/s390/kvm/kvm-s390.c > @@ -608,9 +608,7 @@ static int __vcpu_run(struct kvm_vcpu *vcpu) > kvm_s390_deliver_pending_interrupts(vcpu); > > vcpu->arch.sie_block->icptcode = 0; > - local_irq_disable(); > kvm_guest_enter(); > - local_irq_enable(); > VCPU_EVENT(vcpu, 6, "entering sie flags %x", > atomic_read(&vcpu->arch.sie_block->cpuflags)); > trace_kvm_s390_sie_enter(vcpu, > @@ -629,9 +627,7 @@ static int __vcpu_run(struct kvm_vcpu *vcpu) > VCPU_EVENT(vcpu, 6, "exit sie icptcode %d", > vcpu->arch.sie_block->icptcode); > trace_kvm_s390_sie_exit(vcpu, vcpu->arch.sie_block->icptcode); > - local_irq_disable(); > kvm_guest_exit(); > - local_irq_enable(); > > memcpy(&vcpu->run->s.regs.gprs[14], &vcpu->arch.sie_block->gg14, 16); > return rc; > diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h > index 93bfc9f..0e2212f 100644 > --- a/include/linux/kvm_host.h > +++ b/include/linux/kvm_host.h > @@ -737,7 +737,11 @@ static inline int kvm_deassign_device(struct kvm *kvm, > static inline void kvm_guest_enter(void) > { > BUG_ON(preemptible()); > - vtime_account(current); > + /* > + * This is running in ioctl context so we can avoid > + * the call to vtime_account() with its unnecessary idle check. > + */ > + vtime_account_system(current); > current->flags |= PF_VCPU; > /* KVM does not hold any references to rcu protected data when it > * switches CPU into a guest mode. In fact switching to a guest mode > @@ -751,7 +755,11 @@ static inline void kvm_guest_enter(void) > > static inline void kvm_guest_exit(void) > { > - vtime_account(current); > + /* > + * This is running in ioctl context so we can avoid > + * the call to vtime_account() with its unnecessary idle check. > + */ > + vtime_account_system(current); > current->flags &= ~PF_VCPU; > } > > -- > 1.7.5.4 > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/