Is the TSC timecounter safe on SMP system?
bohra at cs.rutgers.edu
Fri Aug 13 13:46:34 PDT 2004
John Baldwin wrote:
>On Friday 13 August 2004 01:28 pm, Andrew Gallatin wrote:
>>John Baldwin writes:
>> > On Friday 13 August 2004 12:49 pm, Andrew Gallatin wrote:
>> > > I have a system where the TSC timecounter is quite a bit more accurate
>> > > (or perhaps its just much cheaper) than the ACPI timecounter. This is
>> > > a single CPU, HTT system running an SMP kernel.
>> > >
>> > > A simple program which calls gettimeofday() in a tight loop, looking
>> > > for the microseconds to change sees ~998,000 microsecond updates/sec
>> > > with kern.timecounter.hardware=TSC, and 28,500 updates/sec with
>> > > ACPI-safe.
>> > >
>> > > 1) Is it safe to switch to TSC?
>> > >
>> > > 2) If yes, would it be safe to switch to TSC if this was a real
>> > > SMP system with multiple physical cpus?
>> > Probably not. The problem is that the TSC is not necessarily in sync
>> > between the CPUs so time would "jump around" as you migrated between
>> > CPUs. If you can get the TSC's synchronized between the CPUs and keep
>> > them that way then you can use the TSC (Linux does this FWIW).
>>But on a single CPU HTT machine, does each HTT core reads the same TSC?
>I think they each have their own TSC.
This is from the Intel system programmer's manual Vol 3
There are three ways to count processor clock cycles to monitor
performance. These are:
• Non-Halted Clockticks – Measures clock cycles in which the specified
logical processor is
not halted and is not in any power-saving state. When Hyper-Threading
enabled, this these ticks can be measured on a per-logical-processor basis.
• Non-Sleep Clockticks – Measures clock cycles in which the specified
physical processor is
not in a sleep mode or in a power-saving state. These ticks cannot be
measured on a
• Time Stamp Counter – Measures clock cycles in which the physical
processor is not in
deep sleep. These ticks cannot be measured on a logical-processor basis.
So I think TSC is not per logical processor but per package.
More information about the freebsd-current