Len Brown | 103a8fe | 2010-10-22 23:53:03 -0400 | [diff] [blame] | 1 | .TH TURBOSTAT 8 |
| 2 | .SH NAME |
| 3 | turbostat \- Report processor frequency and idle statistics |
| 4 | .SH SYNOPSIS |
| 5 | .ft B |
| 6 | .B turbostat |
Len Brown | 8e180f3 | 2012-09-22 01:25:08 -0400 | [diff] [blame] | 7 | .RB [ Options ] |
Len Brown | 103a8fe | 2010-10-22 23:53:03 -0400 | [diff] [blame] | 8 | .RB command |
| 9 | .br |
| 10 | .B turbostat |
Len Brown | 8e180f3 | 2012-09-22 01:25:08 -0400 | [diff] [blame] | 11 | .RB [ Options ] |
Len Brown | 103a8fe | 2010-10-22 23:53:03 -0400 | [diff] [blame] | 12 | .RB [ "\-i interval_sec" ] |
| 13 | .SH DESCRIPTION |
Len Brown | 889facb | 2012-11-08 00:48:57 -0500 | [diff] [blame] | 14 | \fBturbostat \fP reports processor topology, frequency, |
Len Brown | a729617 | 2015-01-23 01:33:58 -0500 | [diff] [blame] | 15 | idle power-state statistics, temperature and power on X86 processors. |
| 16 | There are two ways to invoke turbostat. |
| 17 | The first method is to supply a |
| 18 | \fBcommand\fP, which is forked and statistics are printed |
| 19 | upon its completion. |
| 20 | The second method is to omit the command, |
| 21 | and turbodstat will print statistics every 5 seconds. |
| 22 | The 5-second interval can changed using the -i option. |
Len Brown | 103a8fe | 2010-10-22 23:53:03 -0400 | [diff] [blame] | 23 | |
Len Brown | a729617 | 2015-01-23 01:33:58 -0500 | [diff] [blame] | 24 | Some information is not availalbe on older processors. |
Len Brown | 103a8fe | 2010-10-22 23:53:03 -0400 | [diff] [blame] | 25 | .SS Options |
Len Brown | f924081 | 2012-10-06 15:26:31 -0400 | [diff] [blame] | 26 | The \fB-p\fP option limits output to the 1st thread in 1st core of each package. |
Len Brown | c98d5d9 | 2012-06-04 00:56:40 -0400 | [diff] [blame] | 27 | .PP |
Len Brown | f924081 | 2012-10-06 15:26:31 -0400 | [diff] [blame] | 28 | The \fB-P\fP option limits output to the 1st thread in each Package. |
Len Brown | c98d5d9 | 2012-06-04 00:56:40 -0400 | [diff] [blame] | 29 | .PP |
Len Brown | f924081 | 2012-10-06 15:26:31 -0400 | [diff] [blame] | 30 | The \fB-S\fP option limits output to a 1-line System Summary for each interval. |
Len Brown | e23da03 | 2012-02-06 18:37:16 -0500 | [diff] [blame] | 31 | .PP |
Len Brown | 103a8fe | 2010-10-22 23:53:03 -0400 | [diff] [blame] | 32 | The \fB-v\fP option increases verbosity. |
| 33 | .PP |
Len Brown | f924081 | 2012-10-06 15:26:31 -0400 | [diff] [blame] | 34 | The \fB-c MSR#\fP option includes the delta of the specified 32-bit MSR counter. |
| 35 | .PP |
| 36 | The \fB-C MSR#\fP option includes the delta of the specified 64-bit MSR counter. |
Len Brown | 8e180f3 | 2012-09-22 01:25:08 -0400 | [diff] [blame] | 37 | .PP |
| 38 | The \fB-m MSR#\fP option includes the the specified 32-bit MSR value. |
| 39 | .PP |
| 40 | The \fB-M MSR#\fP option includes the the specified 64-bit MSR value. |
Len Brown | 103a8fe | 2010-10-22 23:53:03 -0400 | [diff] [blame] | 41 | .PP |
| 42 | The \fB-i interval_sec\fP option prints statistics every \fiinterval_sec\fP seconds. |
| 43 | The default is 5 seconds. |
| 44 | .PP |
| 45 | The \fBcommand\fP parameter forks \fBcommand\fP and upon its exit, |
| 46 | displays the statistics gathered since it was forked. |
| 47 | .PP |
| 48 | .SH FIELD DESCRIPTIONS |
| 49 | .nf |
Len Brown | fc04cc6 | 2014-02-06 00:55:19 -0500 | [diff] [blame] | 50 | \fBPackage\fP processor package number. |
| 51 | \fBCore\fP processor core number. |
Len Brown | 103a8fe | 2010-10-22 23:53:03 -0400 | [diff] [blame] | 52 | \fBCPU\fP Linux CPU (logical processor) number. |
Len Brown | e23da03 | 2012-02-06 18:37:16 -0500 | [diff] [blame] | 53 | Note that multiple CPUs per core indicate support for Intel(R) Hyper-Threading Technology. |
Len Brown | fc04cc6 | 2014-02-06 00:55:19 -0500 | [diff] [blame] | 54 | \fBAVG_MHz\fP number of cycles executed divided by time elapsed. |
| 55 | \fB%Buzy\fP percent of the interval that the CPU retired instructions, aka. % of time in "C0" state. |
| 56 | \fBBzy_MHz\fP average clock rate while the CPU was busy (in "c0" state). |
| 57 | \fBTSC_MHz\fP average MHz that the TSC ran during the entire interval. |
| 58 | \fBCPU%c1, CPU%c3, CPU%c6, CPU%c7\fP show the percentage residency in hardware core idle states. |
| 59 | \fBCoreTmp\fP Degrees Celsius reported by the per-core Digital Thermal Sensor. |
| 60 | \fBPkgTtmp\fP Degrees Celsius reported by the per-package Package Thermal Monitor. |
| 61 | \fBPkg%pc2, Pkg%pc3, Pkg%pc6, Pkg%pc7\fP percentage residency in hardware package idle states. |
| 62 | \fBPkgWatt\fP Watts consumed by the whole package. |
| 63 | \fBCorWatt\fP Watts consumed by the core part of the package. |
| 64 | \fBGFXWatt\fP Watts consumed by the Graphics part of the package -- available only on client processors. |
| 65 | \fBRAMWatt\fP Watts consumed by the DRAM DIMMS -- available only on server processors. |
Len Brown | 889facb | 2012-11-08 00:48:57 -0500 | [diff] [blame] | 66 | \fBPKG_%\fP percent of the interval that RAPL throttling was active on the Package. |
| 67 | \fBRAM_%\fP percent of the interval that RAPL throttling was active on DRAM. |
Len Brown | 103a8fe | 2010-10-22 23:53:03 -0400 | [diff] [blame] | 68 | .fi |
| 69 | .PP |
| 70 | .SH EXAMPLE |
| 71 | Without any parameters, turbostat prints out counters ever 5 seconds. |
| 72 | (override interval with "-i sec" option, or specify a command |
| 73 | for turbostat to fork). |
| 74 | |
Len Brown | e23da03 | 2012-02-06 18:37:16 -0500 | [diff] [blame] | 75 | The first row of statistics is a summary for the entire system. |
Len Brown | 889facb | 2012-11-08 00:48:57 -0500 | [diff] [blame] | 76 | For residency % columns, the summary is a weighted average. |
| 77 | For Temperature columns, the summary is the column maximum. |
| 78 | For Watts columns, the summary is a system total. |
Len Brown | 103a8fe | 2010-10-22 23:53:03 -0400 | [diff] [blame] | 79 | Subsequent rows show per-CPU statistics. |
| 80 | |
| 81 | .nf |
Len Brown | fc04cc6 | 2014-02-06 00:55:19 -0500 | [diff] [blame] | 82 | [root@ivy]# ./turbostat |
| 83 | 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 |
| 84 | - - 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 |
| 85 | 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 |
| 86 | 0 4 1 0.07 1596 3492 0 0.79 |
| 87 | 1 1 10 0.65 1596 3492 0 0.59 0.00 98.76 0.00 23 |
| 88 | 1 5 5 0.28 1596 3492 0 0.95 |
| 89 | 2 2 10 0.66 1596 3492 0 0.41 0.01 98.92 0.00 23 |
| 90 | 2 6 2 0.10 1597 3492 0 0.97 |
| 91 | 3 3 3 0.20 1596 3492 0 0.44 0.00 99.37 0.00 23 |
| 92 | 3 7 5 0.31 1596 3492 0 0.33 |
Len Brown | 103a8fe | 2010-10-22 23:53:03 -0400 | [diff] [blame] | 93 | .fi |
| 94 | .SH VERBOSE EXAMPLE |
| 95 | The "-v" option adds verbosity to the output: |
| 96 | |
| 97 | .nf |
Len Brown | 889facb | 2012-11-08 00:48:57 -0500 | [diff] [blame] | 98 | [root@ivy]# turbostat -v |
| 99 | turbostat v3.0 November 23, 2012 - Len Brown <lenb@kernel.org> |
| 100 | CPUID(0): GenuineIntel 13 CPUID levels; family:model:stepping 0x6:3a:9 (6:58:9) |
| 101 | CPUID(6): APERF, DTS, PTM, EPB |
| 102 | RAPL: 851 sec. Joule Counter Range |
| 103 | cpu0: MSR_NHM_PLATFORM_INFO: 0x81010f0012300 |
| 104 | 16 * 100 = 1600 MHz max efficiency |
| 105 | 35 * 100 = 3500 MHz TSC frequency |
| 106 | cpu0: MSR_NHM_SNB_PKG_CST_CFG_CTL: 0x1e008402 (UNdemote-C3, UNdemote-C1, demote-C3, demote-C1, locked: pkg-cstate-limit=2: pc6-noret) |
| 107 | cpu0: MSR_NHM_TURBO_RATIO_LIMIT: 0x25262727 |
| 108 | 37 * 100 = 3700 MHz max turbo 4 active cores |
| 109 | 38 * 100 = 3800 MHz max turbo 3 active cores |
| 110 | 39 * 100 = 3900 MHz max turbo 2 active cores |
| 111 | 39 * 100 = 3900 MHz max turbo 1 active cores |
| 112 | cpu0: MSR_IA32_ENERGY_PERF_BIAS: 0x00000006 (balanced) |
| 113 | cpu0: MSR_RAPL_POWER_UNIT: 0x000a1003 (0.125000 Watts, 0.000015 Joules, 0.000977 sec.) |
| 114 | cpu0: MSR_PKG_POWER_INFO: 0x01e00268 (77 W TDP, RAPL 60 - 0 W, 0.000000 sec.) |
| 115 | cpu0: MSR_PKG_POWER_LIMIT: 0x830000148268 (UNlocked) |
| 116 | cpu0: PKG Limit #1: ENabled (77.000000 Watts, 1.000000 sec, clamp DISabled) |
| 117 | cpu0: PKG Limit #2: ENabled (96.000000 Watts, 0.000977* sec, clamp DISabled) |
| 118 | cpu0: MSR_PP0_POLICY: 0 |
| 119 | cpu0: MSR_PP0_POWER_LIMIT: 0x00000000 (UNlocked) |
| 120 | cpu0: Cores Limit: DISabled (0.000000 Watts, 0.000977 sec, clamp DISabled) |
| 121 | cpu0: MSR_PP1_POLICY: 0 |
| 122 | cpu0: MSR_PP1_POWER_LIMIT: 0x00000000 (UNlocked) |
| 123 | cpu0: GFX Limit: DISabled (0.000000 Watts, 0.000977 sec, clamp DISabled) |
| 124 | cpu0: MSR_IA32_TEMPERATURE_TARGET: 0x00691400 (105 C) |
| 125 | cpu0: MSR_IA32_PACKAGE_THERM_STATUS: 0x884e0000 (27 C) |
| 126 | cpu0: MSR_IA32_THERM_STATUS: 0x88560000 (19 C +/- 1) |
| 127 | cpu1: MSR_IA32_THERM_STATUS: 0x88560000 (19 C +/- 1) |
| 128 | cpu2: MSR_IA32_THERM_STATUS: 0x88540000 (21 C +/- 1) |
| 129 | cpu3: MSR_IA32_THERM_STATUS: 0x884e0000 (27 C +/- 1) |
| 130 | ... |
Len Brown | 103a8fe | 2010-10-22 23:53:03 -0400 | [diff] [blame] | 131 | .fi |
| 132 | The \fBmax efficiency\fP frequency, a.k.a. Low Frequency Mode, is the frequency |
Len Brown | a729617 | 2015-01-23 01:33:58 -0500 | [diff] [blame] | 133 | available at the minimum package voltage. The \fBTSC frequency\fP is the base |
| 134 | frequency of the processor -- this should match the brand string |
| 135 | in /proc/cpuinfo. This base frequency |
Len Brown | 103a8fe | 2010-10-22 23:53:03 -0400 | [diff] [blame] | 136 | should be sustainable on all CPUs indefinitely, given nominal power and cooling. |
| 137 | The remaining rows show what maximum turbo frequency is possible |
Len Brown | a729617 | 2015-01-23 01:33:58 -0500 | [diff] [blame] | 138 | depending on the number of idle cores. Note that not all information is |
| 139 | available on all processors. |
Len Brown | 103a8fe | 2010-10-22 23:53:03 -0400 | [diff] [blame] | 140 | .SH FORK EXAMPLE |
| 141 | If turbostat is invoked with a command, it will fork that command |
| 142 | and output the statistics gathered when the command exits. |
| 143 | eg. Here a cycle soaker is run on 1 CPU (see %c0) for a few seconds |
| 144 | until ^C while the other CPUs are mostly idle: |
| 145 | |
| 146 | .nf |
Len Brown | fc04cc6 | 2014-02-06 00:55:19 -0500 | [diff] [blame] | 147 | root@ivy: turbostat cat /dev/zero > /dev/null |
Len Brown | e23da03 | 2012-02-06 18:37:16 -0500 | [diff] [blame] | 148 | ^C |
Len Brown | fc04cc6 | 2014-02-06 00:55:19 -0500 | [diff] [blame] | 149 | 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 |
| 150 | - - 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 |
| 151 | 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 |
| 152 | 0 4 9 0.24 3829 3492 0 1.15 |
| 153 | 1 1 4 0.09 3783 3492 0 99.91 0.00 0.00 0.00 36 |
| 154 | 1 5 3880 99.82 3888 3492 0 0.18 |
| 155 | 2 2 17 0.44 3813 3492 0 0.77 0.04 98.75 0.00 28 |
| 156 | 2 6 12 0.32 3823 3492 0 0.89 |
| 157 | 3 3 16 0.43 3844 3492 0 0.63 0.11 98.84 0.00 30 |
| 158 | 3 7 4 0.11 3827 3492 0 0.94 |
| 159 | 30.372243 sec |
| 160 | |
Len Brown | 103a8fe | 2010-10-22 23:53:03 -0400 | [diff] [blame] | 161 | .fi |
Len Brown | fc04cc6 | 2014-02-06 00:55:19 -0500 | [diff] [blame] | 162 | Above the cycle soaker drives cpu5 up its 3.8 GHz turbo limit |
Len Brown | 103a8fe | 2010-10-22 23:53:03 -0400 | [diff] [blame] | 163 | while the other processors are generally in various states of idle. |
| 164 | |
Len Brown | fc04cc6 | 2014-02-06 00:55:19 -0500 | [diff] [blame] | 165 | Note that cpu1 and cpu5 are HT siblings within core1. |
| 166 | As cpu5 is very busy, it prevents its sibling, cpu1, |
Len Brown | c98d5d9 | 2012-06-04 00:56:40 -0400 | [diff] [blame] | 167 | from entering a c-state deeper than c1. |
Len Brown | 103a8fe | 2010-10-22 23:53:03 -0400 | [diff] [blame] | 168 | |
Len Brown | fc04cc6 | 2014-02-06 00:55:19 -0500 | [diff] [blame] | 169 | Note that the Avg_MHz column reflects the total number of cycles executed |
| 170 | divided by the measurement interval. If the %Busy column is 100%, |
| 171 | then the processor was running at that speed the entire interval. |
| 172 | The Avg_MHz multiplied by the %Busy results in the Bzy_MHz -- |
| 173 | which is the average frequency while the processor was executing -- |
| 174 | not including any non-busy idle time. |
| 175 | |
Len Brown | 103a8fe | 2010-10-22 23:53:03 -0400 | [diff] [blame] | 176 | .SH NOTES |
| 177 | |
| 178 | .B "turbostat " |
| 179 | must be run as root. |
Len Brown | a729617 | 2015-01-23 01:33:58 -0500 | [diff] [blame] | 180 | Alternatively, non-root users can be enabled to run turbostat this way: |
| 181 | |
| 182 | # setcap cap_sys_rawio=ep ./turbostat |
| 183 | |
| 184 | # chmod +r /dev/cpu/*/msr |
Len Brown | 103a8fe | 2010-10-22 23:53:03 -0400 | [diff] [blame] | 185 | |
| 186 | .B "turbostat " |
| 187 | reads hardware counters, but doesn't write them. |
| 188 | So it will not interfere with the OS or other programs, including |
| 189 | multiple invocations of itself. |
| 190 | |
| 191 | \fBturbostat \fP |
| 192 | may work poorly on Linux-2.6.20 through 2.6.29, |
Len Brown | a729617 | 2015-01-23 01:33:58 -0500 | [diff] [blame] | 193 | as \fBacpi-cpufreq \fPperiodically cleared the APERF and MPERF MSRs |
Len Brown | 103a8fe | 2010-10-22 23:53:03 -0400 | [diff] [blame] | 194 | in those kernels. |
| 195 | |
Len Brown | a729617 | 2015-01-23 01:33:58 -0500 | [diff] [blame] | 196 | AVG_MHz = APERF_delta/measurement_interval. This is the actual |
| 197 | number of elapsed cycles divided by the entire sample interval -- |
| 198 | including idle time. Note that this calculation is resiliant |
| 199 | to systems lacking a non-stop TSC. |
| 200 | |
| 201 | TSC_MHz = TSC_delta/measurement_interval. |
| 202 | On a system with an invariant TSC, this value will be constant |
| 203 | and will closely match the base frequency value shown |
| 204 | in the brand string in /proc/cpuinfo. On a system where |
| 205 | the TSC stops in idle, TSC_MHz will drop |
| 206 | below the processor's base frequency. |
| 207 | |
| 208 | %Busy = MPERF_delta/TSC_delta |
| 209 | |
| 210 | Bzy_MHz = TSC_delta/APERF_delta/MPERF_delta/measurement_interval |
| 211 | |
| 212 | Note that these calculations depend on TSC_delta, so they |
| 213 | are not reliable during intervals when TSC_MHz is not running at the base frequency. |
| 214 | |
| 215 | Turbostat data collection is not atomic. |
| 216 | Extremely short measurement intervals (much less than 1 second), |
| 217 | or system activity that prevents turbostat from being able |
| 218 | to run on all CPUS to quickly collect data, will result in |
| 219 | inconsistent results. |
Len Brown | 2f32edf | 2012-09-21 23:45:46 -0400 | [diff] [blame] | 220 | |
Len Brown | 103a8fe | 2010-10-22 23:53:03 -0400 | [diff] [blame] | 221 | The APERF, MPERF MSRs are defined to count non-halted cycles. |
| 222 | Although it is not guaranteed by the architecture, turbostat assumes |
| 223 | that they count at TSC rate, which is true on all processors tested to date. |
| 224 | |
| 225 | .SH REFERENCES |
| 226 | "Intel® Turbo Boost Technology |
| 227 | in Intel® Core™ Microarchitecture (Nehalem) Based Processors" |
| 228 | http://download.intel.com/design/processor/applnots/320354.pdf |
| 229 | |
| 230 | "Intel® 64 and IA-32 Architectures Software Developer's Manual |
| 231 | Volume 3B: System Programming Guide" |
| 232 | http://www.intel.com/products/processor/manuals/ |
| 233 | |
| 234 | .SH FILES |
| 235 | .ta |
| 236 | .nf |
| 237 | /dev/cpu/*/msr |
| 238 | .fi |
| 239 | |
| 240 | .SH "SEE ALSO" |
| 241 | msr(4), vmstat(8) |
| 242 | .PP |
Len Brown | e23da03 | 2012-02-06 18:37:16 -0500 | [diff] [blame] | 243 | .SH AUTHOR |
Len Brown | 103a8fe | 2010-10-22 23:53:03 -0400 | [diff] [blame] | 244 | .nf |
| 245 | Written by Len Brown <len.brown@intel.com> |