| .TH TURBOSTAT 8 |
| .SH NAME |
| turbostat \- Report processor frequency and idle statistics |
| .SH SYNOPSIS |
| .ft B |
| .B turbostat |
| .RB [ Options ] |
| .RB command |
| .br |
| .B turbostat |
| .RB [ Options ] |
| .RB [ "\-i interval_sec" ] |
| .SH DESCRIPTION |
| \fBturbostat \fP reports processor topology, frequency, |
| idle power-state statistics, temperature and power on modern X86 processors. |
| Either \fBcommand\fP is forked and statistics are printed |
| upon its completion, or statistics are printed periodically. |
| |
| \fBturbostat \fP |
| must be run on root, and |
| minimally requires that the processor |
| supports an "invariant" TSC, plus the APERF and MPERF MSRs. |
| Additional information is reported depending on hardware counter support. |
| |
| .SS Options |
| The \fB-p\fP option limits output to the 1st thread in 1st core of each package. |
| .PP |
| The \fB-P\fP option limits output to the 1st thread in each Package. |
| .PP |
| The \fB-S\fP option limits output to a 1-line System Summary for each interval. |
| .PP |
| The \fB-v\fP option increases verbosity. |
| .PP |
| The \fB-c MSR#\fP option includes the delta of the specified 32-bit MSR counter. |
| .PP |
| The \fB-C MSR#\fP option includes the delta of the specified 64-bit MSR counter. |
| .PP |
| The \fB-m MSR#\fP option includes the the specified 32-bit MSR value. |
| .PP |
| The \fB-M MSR#\fP option includes the the specified 64-bit MSR value. |
| .PP |
| The \fB-i interval_sec\fP option prints statistics every \fiinterval_sec\fP seconds. |
| The default is 5 seconds. |
| .PP |
| The \fBcommand\fP parameter forks \fBcommand\fP and upon its exit, |
| displays the statistics gathered since it was forked. |
| .PP |
| .SH FIELD DESCRIPTIONS |
| .nf |
| \fBPackage\fP processor package number. |
| \fBCore\fP processor core number. |
| \fBCPU\fP Linux CPU (logical processor) number. |
| Note that multiple CPUs per core indicate support for Intel(R) Hyper-Threading Technology. |
| \fBAVG_MHz\fP number of cycles executed divided by time elapsed. |
| \fB%Buzy\fP percent of the interval that the CPU retired instructions, aka. % of time in "C0" state. |
| \fBBzy_MHz\fP average clock rate while the CPU was busy (in "c0" state). |
| \fBTSC_MHz\fP average MHz that the TSC ran during the entire interval. |
| \fBCPU%c1, CPU%c3, CPU%c6, CPU%c7\fP show the percentage residency in hardware core idle states. |
| \fBCoreTmp\fP Degrees Celsius reported by the per-core Digital Thermal Sensor. |
| \fBPkgTtmp\fP Degrees Celsius reported by the per-package Package Thermal Monitor. |
| \fBPkg%pc2, Pkg%pc3, Pkg%pc6, Pkg%pc7\fP percentage residency in hardware package idle states. |
| \fBPkgWatt\fP Watts consumed by the whole package. |
| \fBCorWatt\fP Watts consumed by the core part of the package. |
| \fBGFXWatt\fP Watts consumed by the Graphics part of the package -- available only on client processors. |
| \fBRAMWatt\fP Watts consumed by the DRAM DIMMS -- available only on server processors. |
| \fBPKG_%\fP percent of the interval that RAPL throttling was active on the Package. |
| \fBRAM_%\fP percent of the interval that RAPL throttling was active on DRAM. |
| .fi |
| .PP |
| .SH EXAMPLE |
| Without any parameters, turbostat prints out counters ever 5 seconds. |
| (override interval with "-i sec" option, or specify a command |
| for turbostat to fork). |
| |
| The first row of statistics is a summary for the entire system. |
| For residency % columns, the summary is a weighted average. |
| For Temperature columns, the summary is the column maximum. |
| For Watts columns, the summary is a system total. |
| Subsequent rows show per-CPU statistics. |
| |
| .nf |
| [root@ivy]# ./turbostat |
| Core CPU Avg_MHz %Busy Bzy_MHz TSC_MHz SMI CPU%c1 CPU%c3 CPU%c6 CPU%c7 CoreTmp PkgTmp Pkg%pc2 Pkg%pc3 Pkg%pc6 Pkg%pc7 PkgWatt CorWatt GFXWatt |
| - - 6 0.36 1596 3492 0 0.59 0.01 99.04 0.00 23 24 23.82 0.01 72.47 0.00 6.40 1.01 0.00 |
| 0 0 9 0.58 1596 3492 0 0.28 0.01 99.13 0.00 23 24 23.82 0.01 72.47 0.00 6.40 1.01 0.00 |
| 0 4 1 0.07 1596 3492 0 0.79 |
| 1 1 10 0.65 1596 3492 0 0.59 0.00 98.76 0.00 23 |
| 1 5 5 0.28 1596 3492 0 0.95 |
| 2 2 10 0.66 1596 3492 0 0.41 0.01 98.92 0.00 23 |
| 2 6 2 0.10 1597 3492 0 0.97 |
| 3 3 3 0.20 1596 3492 0 0.44 0.00 99.37 0.00 23 |
| 3 7 5 0.31 1596 3492 0 0.33 |
| .fi |
| .SH VERBOSE EXAMPLE |
| The "-v" option adds verbosity to the output: |
| |
| .nf |
| [root@ivy]# turbostat -v |
| turbostat v3.0 November 23, 2012 - Len Brown <lenb@kernel.org> |
| CPUID(0): GenuineIntel 13 CPUID levels; family:model:stepping 0x6:3a:9 (6:58:9) |
| CPUID(6): APERF, DTS, PTM, EPB |
| RAPL: 851 sec. Joule Counter Range |
| cpu0: MSR_NHM_PLATFORM_INFO: 0x81010f0012300 |
| 16 * 100 = 1600 MHz max efficiency |
| 35 * 100 = 3500 MHz TSC frequency |
| cpu0: MSR_NHM_SNB_PKG_CST_CFG_CTL: 0x1e008402 (UNdemote-C3, UNdemote-C1, demote-C3, demote-C1, locked: pkg-cstate-limit=2: pc6-noret) |
| cpu0: MSR_NHM_TURBO_RATIO_LIMIT: 0x25262727 |
| 37 * 100 = 3700 MHz max turbo 4 active cores |
| 38 * 100 = 3800 MHz max turbo 3 active cores |
| 39 * 100 = 3900 MHz max turbo 2 active cores |
| 39 * 100 = 3900 MHz max turbo 1 active cores |
| cpu0: MSR_IA32_ENERGY_PERF_BIAS: 0x00000006 (balanced) |
| cpu0: MSR_RAPL_POWER_UNIT: 0x000a1003 (0.125000 Watts, 0.000015 Joules, 0.000977 sec.) |
| cpu0: MSR_PKG_POWER_INFO: 0x01e00268 (77 W TDP, RAPL 60 - 0 W, 0.000000 sec.) |
| cpu0: MSR_PKG_POWER_LIMIT: 0x830000148268 (UNlocked) |
| cpu0: PKG Limit #1: ENabled (77.000000 Watts, 1.000000 sec, clamp DISabled) |
| cpu0: PKG Limit #2: ENabled (96.000000 Watts, 0.000977* sec, clamp DISabled) |
| cpu0: MSR_PP0_POLICY: 0 |
| cpu0: MSR_PP0_POWER_LIMIT: 0x00000000 (UNlocked) |
| cpu0: Cores Limit: DISabled (0.000000 Watts, 0.000977 sec, clamp DISabled) |
| cpu0: MSR_PP1_POLICY: 0 |
| cpu0: MSR_PP1_POWER_LIMIT: 0x00000000 (UNlocked) |
| cpu0: GFX Limit: DISabled (0.000000 Watts, 0.000977 sec, clamp DISabled) |
| cpu0: MSR_IA32_TEMPERATURE_TARGET: 0x00691400 (105 C) |
| cpu0: MSR_IA32_PACKAGE_THERM_STATUS: 0x884e0000 (27 C) |
| cpu0: MSR_IA32_THERM_STATUS: 0x88560000 (19 C +/- 1) |
| cpu1: MSR_IA32_THERM_STATUS: 0x88560000 (19 C +/- 1) |
| cpu2: MSR_IA32_THERM_STATUS: 0x88540000 (21 C +/- 1) |
| cpu3: MSR_IA32_THERM_STATUS: 0x884e0000 (27 C +/- 1) |
| ... |
| .fi |
| The \fBmax efficiency\fP frequency, a.k.a. Low Frequency Mode, is the frequency |
| available at the minimum package voltage. The \fBTSC frequency\fP is the nominal |
| maximum frequency of the processor if turbo-mode were not available. This frequency |
| should be sustainable on all CPUs indefinitely, given nominal power and cooling. |
| The remaining rows show what maximum turbo frequency is possible |
| depending on the number of idle cores. Note that this information is |
| not available on all processors. |
| .SH FORK EXAMPLE |
| If turbostat is invoked with a command, it will fork that command |
| and output the statistics gathered when the command exits. |
| eg. Here a cycle soaker is run on 1 CPU (see %c0) for a few seconds |
| until ^C while the other CPUs are mostly idle: |
| |
| .nf |
| root@ivy: turbostat cat /dev/zero > /dev/null |
| ^C |
| Core CPU Avg_MHz %Busy Bzy_MHz TSC_MHz SMI CPU%c1 CPU%c3 CPU%c6 CPU%c7 CoreTmp PkgTmp Pkg%pc2 Pkg%pc3 Pkg%pc6 Pkg%pc7 PkgWatt CorWatt GFXWatt |
| - - 496 12.75 3886 3492 0 13.16 0.04 74.04 0.00 36 36 0.00 0.00 0.00 0.00 23.15 17.65 0.00 |
| 0 0 22 0.57 3830 3492 0 0.83 0.02 98.59 0.00 27 36 0.00 0.00 0.00 0.00 23.15 17.65 0.00 |
| 0 4 9 0.24 3829 3492 0 1.15 |
| 1 1 4 0.09 3783 3492 0 99.91 0.00 0.00 0.00 36 |
| 1 5 3880 99.82 3888 3492 0 0.18 |
| 2 2 17 0.44 3813 3492 0 0.77 0.04 98.75 0.00 28 |
| 2 6 12 0.32 3823 3492 0 0.89 |
| 3 3 16 0.43 3844 3492 0 0.63 0.11 98.84 0.00 30 |
| 3 7 4 0.11 3827 3492 0 0.94 |
| 30.372243 sec |
| |
| .fi |
| Above the cycle soaker drives cpu5 up its 3.8 GHz turbo limit |
| while the other processors are generally in various states of idle. |
| |
| Note that cpu1 and cpu5 are HT siblings within core1. |
| As cpu5 is very busy, it prevents its sibling, cpu1, |
| from entering a c-state deeper than c1. |
| |
| Note that the Avg_MHz column reflects the total number of cycles executed |
| divided by the measurement interval. If the %Busy column is 100%, |
| then the processor was running at that speed the entire interval. |
| The Avg_MHz multiplied by the %Busy results in the Bzy_MHz -- |
| which is the average frequency while the processor was executing -- |
| not including any non-busy idle time. |
| |
| .SH NOTES |
| |
| .B "turbostat " |
| must be run as root. |
| |
| .B "turbostat " |
| reads hardware counters, but doesn't write them. |
| So it will not interfere with the OS or other programs, including |
| multiple invocations of itself. |
| |
| \fBturbostat \fP |
| may work poorly on Linux-2.6.20 through 2.6.29, |
| as \fBacpi-cpufreq \fPperiodically cleared the APERF and MPERF |
| in those kernels. |
| |
| If the TSC column does not make sense, then |
| the other numbers will also make no sense. |
| Turbostat is lightweight, and its data collection is not atomic. |
| These issues are usually caused by an extremely short measurement |
| interval (much less than 1 second), or system activity that prevents |
| turbostat from being able to run on all CPUS to quickly collect data. |
| |
| The APERF, MPERF MSRs are defined to count non-halted cycles. |
| Although it is not guaranteed by the architecture, turbostat assumes |
| that they count at TSC rate, which is true on all processors tested to date. |
| |
| .SH REFERENCES |
| "Intel® Turbo Boost Technology |
| in Intel® Core™ Microarchitecture (Nehalem) Based Processors" |
| http://download.intel.com/design/processor/applnots/320354.pdf |
| |
| "Intel® 64 and IA-32 Architectures Software Developer's Manual |
| Volume 3B: System Programming Guide" |
| http://www.intel.com/products/processor/manuals/ |
| |
| .SH FILES |
| .ta |
| .nf |
| /dev/cpu/*/msr |
| .fi |
| |
| .SH "SEE ALSO" |
| msr(4), vmstat(8) |
| .PP |
| .SH AUTHOR |
| .nf |
| Written by Len Brown <len.brown@intel.com> |