[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH linux-next v2] x86/xen/time: prefer tsc as clocksource when it is invariant


  • To: Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx>
  • From: Krister Johansen <kjlx@xxxxxxxxxxxxxxxxxx>
  • Date: Fri, 16 Dec 2022 08:20:19 -0800
  • Arc-authentication-results: i=1; rspamd-56db58bdfc-gf48j; auth=pass smtp.auth=dreamhost smtp.mailfrom=kjlx@xxxxxxxxxxxxxxxxxx
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=mailchannels.net; s=arc-2022; t=1671207623; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references:dkim-signature; bh=zZIw3M+aiD6J4RND/PUJdeymks7EZfag7xLSLFs2i3I=; b=GcnXf5X85ndUcl4i7wv1CpZXuYwDZlwaVMDDc//WiQuAlAMyQW/Jr35UY8VOOLXAA9Szkp 9XgB+V4Dpb7ATzFFXzcPZA7/OToIm7+1nXi1iriZwrSIwAn+G0O7x8b0nOhcb74c3J8UDk 06k14fcBF/V0L1TGRDGf5gqkiJ3G27nmCAh7M4vcLBxk2LG1bgXnVgPAAvJRCutH0xOXMi TecktfshzZfNGr1ZtkXMRcNXgbURnMRvszRnt6bt1JoALESZVX7Twa5ts1O+i7I2uzDL1O JKekrs1unUGPJL2q1/xE0M77U/in1Gtus/6sxLRj4KG5gB0vWr7kMmbrSOChkw==
  • Arc-seal: i=1; s=arc-2022; d=mailchannels.net; t=1671207623; a=rsa-sha256; cv=none; b=hpAgiWFhmrqTSK3nzbph2bzx8fSXElBtLsJuEObM11b7uh4vxcNBMQLvUAHiKqRAg5aNg1 qZDxsD9myszD/VQ5t692GNH2AM7XCZ4b2msFnKJQHC4LGdDw9kRA/F1h26R4YX1gLiJdCO 4DeHxDZEW0lpOBwl3wmJcmExlmYVj0woRsMyLqEUGiL7Lhgn8FOHmMIyVmbtIC2dSjYixj qnvcTQPMMhdl4JhOBDoy37yKmc/RA+rfp8CED++6Uep17WWTWdacxJBDBz1VgPQdmmb6wH a1nB6gFAlNkbUcDdYp7GBreqtly6dpYtdB4pAO5KBlTIakEbiPV+dDR//N3H3Q==
  • Cc: Juergen Gross <jgross@xxxxxxxx>, Thomas Gleixner <tglx@xxxxxxxxxxxxx>, Ingo Molnar <mingo@xxxxxxxxxx>, Borislav Petkov <bp@xxxxxxxxx>, Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>, x86@xxxxxxxxxx, "H. Peter Anvin" <hpa@xxxxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx, Marcelo Tosatti <mtosatti@xxxxxxxxxx>, Anthony Liguori <aliguori@xxxxxxxxxx>, David Reaver <me@xxxxxxxxxxxxxxx>, Brendan Gregg <brendan@xxxxxxxxx>
  • Delivery-date: Fri, 16 Dec 2022 16:20:46 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On Wed, Dec 14, 2022 at 04:46:10PM -0500, Boris Ostrovsky wrote:
> 
> On 12/14/22 1:01 PM, Krister Johansen wrote:
> > On Tue, Dec 13, 2022 at 04:25:32PM -0500, Boris Ostrovsky wrote:
> > > On 12/12/22 5:09 PM, Krister Johansen wrote:
> > > > On Mon, Dec 12, 2022 at 01:48:24PM -0500, Boris Ostrovsky wrote:
> > > > > On 12/12/22 11:05 AM, Krister Johansen wrote:
> > > > > > diff --git a/arch/x86/include/asm/xen/cpuid.h 
> > > > > > b/arch/x86/include/asm/xen/cpuid.h
> > > > > > index 6daa9b0c8d11..d9d7432481e9 100644
> > > > > > --- a/arch/x86/include/asm/xen/cpuid.h
> > > > > > +++ b/arch/x86/include/asm/xen/cpuid.h
> > > > > > @@ -88,6 +88,12 @@
> > > > > >      *             EDX: shift amount for tsc->ns conversion
> > > > > >      * Sub-leaf 2: EAX: host tsc frequency in kHz
> > > > > >      */
> > > > > > +#define XEN_CPUID_TSC_EMULATED       (1u << 0)
> > > > > > +#define XEN_CPUID_HOST_TSC_RELIABLE  (1u << 1)
> > > > > > +#define XEN_CPUID_RDTSCP_INSTR_AVAIL (1u << 2)
> > > > > > +#define XEN_CPUID_TSC_MODE_DEFAULT   (0)
> > > > > > +#define XEN_CPUID_TSC_MODE_EMULATE   (1u)
> > > > > > +#define XEN_CPUID_TSC_MODE_NOEMULATE (2u)
> > > > > This file is a copy of Xen public interface so this change should go 
> > > > > to Xen first.
> > > > Ok, should I split this into a separate patch on the linux side too?
> > > Yes. Once the Xen patch has been accepted you will either submit the same 
> > > patch for Linux or sync Linux file with Xen (if there are more 
> > > differences).
> > Thanks.  Based upon the feedback I received from you and Jan, I may try
> > to shrink the check in xen_tsc_safe_clocksource() down a bit.  In that
> > case, I may only need to refer to a single field in the leaf that
> > provides this information.  In that case, are you alright with dropping
> > the change to the header and referring to the value directly, or would
> > you prefer that I proceed with adding these to the public API?
> 
> It would certainly be appreciated if you updated the header files but it's up 
> to maintainers to decide whether it's required.

Sure, I'm just trying to avoid generating extra work for the maintainers
if this patch isn't likely to make it in.  I'm cutting a v3 that doesn't
reference the header.  If it's acceptable, and this looks otherwise
unobjectionable, then I'll go ahead and put together the pieces for the
public API, if that's still a desireable change.

> > > > > > +static int __init xen_tsc_safe_clocksource(void)
> > > > > > +{
> > > > > > +   u32 eax, ebx, ecx, edx;
> > > > > > +
> > > > > > +   if (!(xen_hvm_domain() || xen_pvh_domain()))
> > > > > > +           return 0;
> > > > > > +
> > > > > > +   if (!(boot_cpu_has(X86_FEATURE_CONSTANT_TSC)))
> > > > > > +           return 0;
> > > > > > +
> > > > > > +   if (!(boot_cpu_has(X86_FEATURE_NONSTOP_TSC)))
> > > > > > +           return 0;
> > > > > > +
> > > > > > +   if (check_tsc_unstable())
> > > > > > +           return 0;
> > > > > > +
> > > > > > +   cpuid(xen_cpuid_base() + 3, &eax, &ebx, &ecx, &edx);
> > > > > > +
> > > > > > +   if (eax & XEN_CPUID_TSC_EMULATED)
> > > > > > +           return 0;
> > > > > > +
> > > > > > +   if (ebx != XEN_CPUID_TSC_MODE_NOEMULATE)
> > > > > > +           return 0;
> > > > > Why is the last test needed?
> > > > I was under the impression that if the mode was 0 (default) it would be
> > > > possible for the tsc to become emulated in the future, perhaps after a
> > > > migration.  The presence of the tsc_mode noemulate meant that we could
> > > > count on the falseneess of the XEN_CPUID_TSC_EMULATED check remaining
> > > > constant.
> > > This will filter out most modern processors with TSC scaling support 
> > > where in default mode we don't intercept RDTCS after migration. But I 
> > > don't think we have proper interface to determine this so we don't have 
> > > much choice but to indeed make this check.
> > Yes, if this remains a single boot-time check, I'm not sure that knowing
> > whether the processor supports tsc scaling helps us.  If tsc_mode is
> > default, there's always a possibility of the tsc becoming emulated later
> > on as part of migration, correct?
> 
> If the processor supports TSC scaling I don't think it's possible (it can 
> happen in theory) but if it doesn't and you migrate to a CPU running at 
> different frequency then yes, hypervisor will start emulating RDTSC.

Yes, I wondered whether it's reasonable to expect that users migrate
between hardware that is pretty similar, or if this case of moving from
a CPU that supports tsc scaling to one that doesn't is likely to happen
in practice.

-K 



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.