From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marcelo Tosatti Subject: Re: 2.6.35-rc1 regression with pvclock and smp guests Date: Fri, 8 Oct 2010 19:06:00 -0300 Message-ID: <20101008220600.GA9430@amt.cnet> References: <4CA4DBC8.6070606@xutrox.com> <20100930190507.GA1111@amt.cnet> <4CA51715.1070507@msgid.tls.msk.ru> <4CA51847.5060208@msgid.tls.msk.ru> <4CA6C4BB.5020004@redhat.com> <4CA6E0BF.90605@msgid.tls.msk.ru> <4CA75969.1080405@xutrox.com> <4CA7C34C.4040000@redhat.com> <4CAE6203.6040902@xutrox.com> <4CAE862F.10904@redhat.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="IrhDeMKUP4DT/M7F" Cc: Arjan Koers <0h61vkll2ly8@xutrox.com>, kvm@vger.kernel.org, Michael Tokarev , Avi Kivity , Glauber Costa , Andre Przywara To: Zachary Amsden Return-path: Received: from mx1.redhat.com ([209.132.183.28]:28599 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755051Ab0JHWHB (ORCPT ); Fri, 8 Oct 2010 18:07:01 -0400 Content-Disposition: inline In-Reply-To: <4CAE862F.10904@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: --IrhDeMKUP4DT/M7F Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Thu, Oct 07, 2010 at 04:47:11PM -1000, Zachary Amsden wrote: > On 10/07/2010 02:12 PM, Arjan Koers wrote: > >On 2010-10-03 01:42, Zachary Amsden wrote: > >... > >>Umm... do you guys have this commit? This is supposed to address the > >>issue where the guest keeps resetting the TSC. A guest which does that > >>will break kvmclock. It only happens on SMP, and it's much worse on AMD > >>CPUs... > >> > >>sound like your scenario. > >> > >>commit bd59fc8ff95126f27b7a0df1b6cc602aa428812d > >>Author: Zachary Amsden > >>Date: Thu Aug 19 22:07:26 2010 -1000 > > > >This commit fixes the problem: > > > >commit aad07c4f92bae2edaa42bcef84c2afdd0d082458 > >Author: Zachary Amsden > >Date: Thu Aug 19 22:07:19 2010 -1000 > > > > KVM: x86: Move TSC reset out of vmcb_init > > > > The VMCB is reset whenever we receive a startup IPI, so Linux is setting > > TSC back to zero happens very late in the boot process and destabilizing > > the TSC. Instead, just set TSC to zero once at VCPU creation time. > > > > Why the separate patch? So git-bisect is your friend. > > Okay, apparently I need to go poke around 2.6.35 and see what > patches made it there and what patches didn't. Backports attached. Michael, Arjan, please give them a try. --IrhDeMKUP4DT/M7F Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename=001-kvm-x86-fix-svm-reset commit 280372e494634d0a2cba3956721be16fc4f989bf Author: Zachary Amsden Date: Thu Aug 19 22:07:18 2010 -1000 KVM: x86: Fix SVM VMCB reset On reset, VMCB TSC should be set to zero. Instead, code was setting tsc_offset to zero, which passes through the underlying TSC. Signed-off-by: Zachary Amsden Signed-off-by: Marcelo Tosatti Index: kvm/arch/x86/kvm/svm.c =================================================================== --- kvm.orig/arch/x86/kvm/svm.c +++ kvm/arch/x86/kvm/svm.c @@ -766,7 +766,7 @@ static void init_vmcb(struct vcpu_svm *s control->iopm_base_pa = iopm_base; control->msrpm_base_pa = __pa(svm->msrpm); - control->tsc_offset = 0; + control->tsc_offset = 0-native_read_tsc(); control->int_ctl = V_INTR_MASKING_MASK; init_seg(&save->es); --IrhDeMKUP4DT/M7F Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename=002-kvm-x86-move-tsc-reset-out-of-vmcb-init commit aad07c4f92bae2edaa42bcef84c2afdd0d082458 Author: Zachary Amsden Date: Thu Aug 19 22:07:19 2010 -1000 KVM: x86: Move TSC reset out of vmcb_init The VMCB is reset whenever we receive a startup IPI, so Linux is setting TSC back to zero happens very late in the boot process and destabilizing the TSC. Instead, just set TSC to zero once at VCPU creation time. Why the separate patch? So git-bisect is your friend. Signed-off-by: Zachary Amsden Signed-off-by: Marcelo Tosatti Index: kvm/arch/x86/kvm/svm.c =================================================================== --- kvm.orig/arch/x86/kvm/svm.c +++ kvm/arch/x86/kvm/svm.c @@ -766,7 +766,6 @@ static void init_vmcb(struct vcpu_svm *s control->iopm_base_pa = iopm_base; control->msrpm_base_pa = __pa(svm->msrpm); - control->tsc_offset = 0-native_read_tsc(); control->int_ctl = V_INTR_MASKING_MASK; init_seg(&save->es); @@ -902,6 +901,7 @@ static struct kvm_vcpu *svm_create_vcpu( svm->vmcb_pa = page_to_pfn(page) << PAGE_SHIFT; svm->asid_generation = 0; init_vmcb(svm); + svm->vmcb->control.tsc_offset = 0-native_read_tsc(); err = fx_init(&svm->vcpu); if (err) --IrhDeMKUP4DT/M7F--