Turbostat: relax dependency on invariant TSC
authorVincent Brillault <git@lerya.net>
Thu, 12 Feb 2015 20:33:40 +0000 (21:33 +0100)
committerVincent Brillault <git@lerya.net>
Sat, 28 Feb 2015 06:35:42 +0000 (07:35 +0100)
commit0e8f63d21a65555d971b0da9161a1a9a54fd1afa
tree8b9c78443c28b8e7b3cf6744d01c4479692fb310
parent25e51eb1b7473e0e6a2dfd94a3f3dd96a59da517
Turbostat: relax dependency on invariant TSC

Backport d7899447535929b3672442b7b42a09ae4e48fa91
from Len Brown <len.brown@intel.com>

Turbostat can be useful on systems that do not support invariant TSC,
so allow it to run on those systgems.

All arithmetic in turbostat using the TSC value is per-processsor,
so it does not depend on the TSC values being in sync acrosss
processors.

Turbostat uses cdtime() for the measurement interval
rather than using the TSC directly, so that key metric
is also immune from variable TSC.

Turbostat has a TSC sanity check gauge:
TSC_MHz = TSC_delta/interval

If this column is constant and is close to the processor
base frequency, then the TSC is behaving properly.

The other key turbostat columns are calculated this way:
Avg_Mhz = APERF_delta/interval
Bzy_MHz = TSC_delta/APERF_delta/MPERF_delta/interval
c0 = MPERF_delta/TSC_delta

This adaptation of the original commit has not been tested on any
old CPU. This patch also re-introduce the boolean "do_smi" as such
old CPUs don't have SMI.
src/turbostat.c