Re: [PATCH] x86, TSC: Add a software TSC offset

From: Andy Lutomirski
Date: Mon Jul 21 2014 - 17:42:17 EST


On Mon, Jul 21, 2014 at 2:35 PM, Borislav Petkov <bp@xxxxxxxxx> wrote:
> On Mon, Jul 21, 2014 at 12:34:40PM -0700, Andy Lutomirski wrote:
>> I'm sure I'm missing something, but where is tsc_offset used outside
>> the tsc startup code? Is it somehow getting programmed into the TSC
>> config registers?
>
> Nah, we're programming the CPU number into the TSC_AUX MSR. However,
> that approach might become obsolete for a simpler, preempt-disable
> version which Peter suggested today. It should be comparatively cheap
> and work on all CPUs, not only RDTSCP-supporting ones:
>
> get_cycles() {
> preempt_disable();
> rdtscll() + this_cpu_read(tsc_offset);
> preempt_disable()
> }
>
> So, to answer your question, the TSC offset will be used in get_cycles(). So
> even on machines with a skewed TSC, we will have a stable TSC counter by
> adding the per-cpu offset each time we read the TSC.
>
> We'll see how it plays out in testing. :)

How will this be compatible with the vdso?

Also, IIRC, rdtscp does not need rdtsc_barrier(), whereas rdtsc does.
Getting this wrong will be a significant slowdown.

--Andy

>
> --
> Regards/Gruss,
> Boris.
>
> Sent from a fat crate under my desk. Formatting is fine.
> --



--
Andy Lutomirski
AMA Capital Management, LLC
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/