turbostat.c (0b9a0b9be991656f125b58a240065cdf72077244) turbostat.c (55279aef754c5eab170077ae4ba4ebd304dea64f)
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * turbostat -- show CPU frequency and C-state residency
4 * on modern Intel and AMD processors.
5 *
6 * Copyright (c) 2013 Intel Corporation.
7 * Len Brown <len.brown@intel.com>
8 */

--- 75 unchanged lines hidden (view full) ---

84unsigned int do_dts;
85unsigned int do_ptm;
86unsigned int do_ipc;
87unsigned long long gfx_cur_rc6_ms;
88unsigned long long cpuidle_cur_cpu_lpi_us;
89unsigned long long cpuidle_cur_sys_lpi_us;
90unsigned int gfx_cur_mhz;
91unsigned int gfx_act_mhz;
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * turbostat -- show CPU frequency and C-state residency
4 * on modern Intel and AMD processors.
5 *
6 * Copyright (c) 2013 Intel Corporation.
7 * Len Brown <len.brown@intel.com>
8 */

--- 75 unchanged lines hidden (view full) ---

84unsigned int do_dts;
85unsigned int do_ptm;
86unsigned int do_ipc;
87unsigned long long gfx_cur_rc6_ms;
88unsigned long long cpuidle_cur_cpu_lpi_us;
89unsigned long long cpuidle_cur_sys_lpi_us;
90unsigned int gfx_cur_mhz;
91unsigned int gfx_act_mhz;
92unsigned int tcc_activation_temp;
93unsigned int tcc_activation_temp_override;
92unsigned int tj_max;
93unsigned int tj_max_override;
94int tcc_offset_bits;
95double rapl_power_units, rapl_time_units;
96double rapl_dram_energy_units, rapl_energy_units;
97double rapl_joule_counter_range;
98unsigned int do_core_perf_limit_reasons;
99unsigned int has_automatic_cstate_conversion;
100unsigned int dis_cstate_prewake;
101unsigned int do_gfx_perf_limit_reasons;

--- 2011 unchanged lines hidden (view full) ---

2113
2114 if (DO_BIC(BIC_Mod_c6))
2115 if (get_msr(cpu, MSR_MODULE_C6_RES_MS, &c->mc6_us))
2116 return -8;
2117
2118 if (DO_BIC(BIC_CoreTmp)) {
2119 if (get_msr(cpu, MSR_IA32_THERM_STATUS, &msr))
2120 return -9;
94int tcc_offset_bits;
95double rapl_power_units, rapl_time_units;
96double rapl_dram_energy_units, rapl_energy_units;
97double rapl_joule_counter_range;
98unsigned int do_core_perf_limit_reasons;
99unsigned int has_automatic_cstate_conversion;
100unsigned int dis_cstate_prewake;
101unsigned int do_gfx_perf_limit_reasons;

--- 2011 unchanged lines hidden (view full) ---

2113
2114 if (DO_BIC(BIC_Mod_c6))
2115 if (get_msr(cpu, MSR_MODULE_C6_RES_MS, &c->mc6_us))
2116 return -8;
2117
2118 if (DO_BIC(BIC_CoreTmp)) {
2119 if (get_msr(cpu, MSR_IA32_THERM_STATUS, &msr))
2120 return -9;
2121 c->core_temp_c = tcc_activation_temp - ((msr >> 16) & 0x7F);
2121 c->core_temp_c = tj_max - ((msr >> 16) & 0x7F);
2122 }
2123
2124 if (do_rapl & RAPL_AMD_F17H) {
2125 if (get_msr(cpu, MSR_CORE_ENERGY_STAT, &msr))
2126 return -14;
2127 c->core_energy = msr & 0xFFFFFFFF;
2128 }
2129

--- 89 unchanged lines hidden (view full) ---

2219 if (do_rapl & RAPL_AMD_F17H) {
2220 if (get_msr_sum(cpu, MSR_PKG_ENERGY_STAT, &msr))
2221 return -13;
2222 p->energy_pkg = msr;
2223 }
2224 if (DO_BIC(BIC_PkgTmp)) {
2225 if (get_msr(cpu, MSR_IA32_PACKAGE_THERM_STATUS, &msr))
2226 return -17;
2122 }
2123
2124 if (do_rapl & RAPL_AMD_F17H) {
2125 if (get_msr(cpu, MSR_CORE_ENERGY_STAT, &msr))
2126 return -14;
2127 c->core_energy = msr & 0xFFFFFFFF;
2128 }
2129

--- 89 unchanged lines hidden (view full) ---

2219 if (do_rapl & RAPL_AMD_F17H) {
2220 if (get_msr_sum(cpu, MSR_PKG_ENERGY_STAT, &msr))
2221 return -13;
2222 p->energy_pkg = msr;
2223 }
2224 if (DO_BIC(BIC_PkgTmp)) {
2225 if (get_msr(cpu, MSR_IA32_PACKAGE_THERM_STATUS, &msr))
2226 return -17;
2227 p->pkg_temp_c = tcc_activation_temp - ((msr >> 16) & 0x7F);
2227 p->pkg_temp_c = tj_max - ((msr >> 16) & 0x7F);
2228 }
2229
2230 if (DO_BIC(BIC_GFX_rc6))
2231 p->gfx_rc6_ms = gfx_cur_rc6_ms;
2232
2233 if (DO_BIC(BIC_GFXMHz))
2234 p->gfx_mhz = gfx_cur_mhz;
2235

--- 2396 unchanged lines hidden (view full) ---

4632 }
4633
4634 if (do_ptm && (t->flags & CPU_IS_FIRST_CORE_IN_PACKAGE)) {
4635 if (get_msr(cpu, MSR_IA32_PACKAGE_THERM_STATUS, &msr))
4636 return 0;
4637
4638 dts = (msr >> 16) & 0x7F;
4639 fprintf(outf, "cpu%d: MSR_IA32_PACKAGE_THERM_STATUS: 0x%08llx (%d C)\n",
2228 }
2229
2230 if (DO_BIC(BIC_GFX_rc6))
2231 p->gfx_rc6_ms = gfx_cur_rc6_ms;
2232
2233 if (DO_BIC(BIC_GFXMHz))
2234 p->gfx_mhz = gfx_cur_mhz;
2235

--- 2396 unchanged lines hidden (view full) ---

4632 }
4633
4634 if (do_ptm && (t->flags & CPU_IS_FIRST_CORE_IN_PACKAGE)) {
4635 if (get_msr(cpu, MSR_IA32_PACKAGE_THERM_STATUS, &msr))
4636 return 0;
4637
4638 dts = (msr >> 16) & 0x7F;
4639 fprintf(outf, "cpu%d: MSR_IA32_PACKAGE_THERM_STATUS: 0x%08llx (%d C)\n",
4640 cpu, msr, tcc_activation_temp - dts);
4640 cpu, msr, tj_max - dts);
4641
4642 if (get_msr(cpu, MSR_IA32_PACKAGE_THERM_INTERRUPT, &msr))
4643 return 0;
4644
4645 dts = (msr >> 16) & 0x7F;
4646 dts2 = (msr >> 8) & 0x7F;
4647 fprintf(outf, "cpu%d: MSR_IA32_PACKAGE_THERM_INTERRUPT: 0x%08llx (%d C, %d C)\n",
4641
4642 if (get_msr(cpu, MSR_IA32_PACKAGE_THERM_INTERRUPT, &msr))
4643 return 0;
4644
4645 dts = (msr >> 16) & 0x7F;
4646 dts2 = (msr >> 8) & 0x7F;
4647 fprintf(outf, "cpu%d: MSR_IA32_PACKAGE_THERM_INTERRUPT: 0x%08llx (%d C, %d C)\n",
4648 cpu, msr, tcc_activation_temp - dts, tcc_activation_temp - dts2);
4648 cpu, msr, tj_max - dts, tj_max - dts2);
4649 }
4650
4651
4652 if (do_dts && debug) {
4653 unsigned int resolution;
4654
4655 if (get_msr(cpu, MSR_IA32_THERM_STATUS, &msr))
4656 return 0;
4657
4658 dts = (msr >> 16) & 0x7F;
4659 resolution = (msr >> 27) & 0xF;
4660 fprintf(outf, "cpu%d: MSR_IA32_THERM_STATUS: 0x%08llx (%d C +/- %d)\n",
4649 }
4650
4651
4652 if (do_dts && debug) {
4653 unsigned int resolution;
4654
4655 if (get_msr(cpu, MSR_IA32_THERM_STATUS, &msr))
4656 return 0;
4657
4658 dts = (msr >> 16) & 0x7F;
4659 resolution = (msr >> 27) & 0xF;
4660 fprintf(outf, "cpu%d: MSR_IA32_THERM_STATUS: 0x%08llx (%d C +/- %d)\n",
4661 cpu, msr, tcc_activation_temp - dts, resolution);
4661 cpu, msr, tj_max - dts, resolution);
4662
4663 if (get_msr(cpu, MSR_IA32_THERM_INTERRUPT, &msr))
4664 return 0;
4665
4666 dts = (msr >> 16) & 0x7F;
4667 dts2 = (msr >> 8) & 0x7F;
4668 fprintf(outf, "cpu%d: MSR_IA32_THERM_INTERRUPT: 0x%08llx (%d C, %d C)\n",
4662
4663 if (get_msr(cpu, MSR_IA32_THERM_INTERRUPT, &msr))
4664 return 0;
4665
4666 dts = (msr >> 16) & 0x7F;
4667 dts2 = (msr >> 8) & 0x7F;
4668 fprintf(outf, "cpu%d: MSR_IA32_THERM_INTERRUPT: 0x%08llx (%d C, %d C)\n",
4669 cpu, msr, tcc_activation_temp - dts, tcc_activation_temp - dts2);
4669 cpu, msr, tj_max - dts, tj_max - dts2);
4670 }
4671
4672 return 0;
4673}
4674
4675void print_power_limit_msr(int cpu, unsigned long long msr, char *label)
4676{
4677 fprintf(outf, "cpu%d: %s: %sabled (%f Watts, %f sec, clamp %sabled)\n",

--- 316 unchanged lines hidden (view full) ---

4994 *
4995 * Several MSR temperature values are in units of degrees-C
4996 * below this value, including the Digital Thermal Sensor (DTS),
4997 * Package Thermal Management Sensor (PTM), and thermal event thresholds.
4998 */
4999int set_temperature_target(struct thread_data *t, struct core_data *c, struct pkg_data *p)
5000{
5001 unsigned long long msr;
4670 }
4671
4672 return 0;
4673}
4674
4675void print_power_limit_msr(int cpu, unsigned long long msr, char *label)
4676{
4677 fprintf(outf, "cpu%d: %s: %sabled (%f Watts, %f sec, clamp %sabled)\n",

--- 316 unchanged lines hidden (view full) ---

4994 *
4995 * Several MSR temperature values are in units of degrees-C
4996 * below this value, including the Digital Thermal Sensor (DTS),
4997 * Package Thermal Management Sensor (PTM), and thermal event thresholds.
4998 */
4999int set_temperature_target(struct thread_data *t, struct core_data *c, struct pkg_data *p)
5000{
5001 unsigned long long msr;
5002 unsigned int target_c_local, tcc_offset;
5002 unsigned int tcc_default, tcc_offset;
5003 int cpu;
5004
5003 int cpu;
5004
5005 /* tcc_activation_temp is used only for dts or ptm */
5005 /* tj_max is used only for dts or ptm */
5006 if (!(do_dts || do_ptm))
5007 return 0;
5008
5009 /* this is a per-package concept */
5010 if (!(t->flags & CPU_IS_FIRST_THREAD_IN_CORE) || !(t->flags & CPU_IS_FIRST_CORE_IN_PACKAGE))
5011 return 0;
5012
5013 cpu = t->cpu_id;
5014 if (cpu_migrate(cpu)) {
5015 fprintf(outf, "Could not migrate to CPU %d\n", cpu);
5016 return -1;
5017 }
5018
5006 if (!(do_dts || do_ptm))
5007 return 0;
5008
5009 /* this is a per-package concept */
5010 if (!(t->flags & CPU_IS_FIRST_THREAD_IN_CORE) || !(t->flags & CPU_IS_FIRST_CORE_IN_PACKAGE))
5011 return 0;
5012
5013 cpu = t->cpu_id;
5014 if (cpu_migrate(cpu)) {
5015 fprintf(outf, "Could not migrate to CPU %d\n", cpu);
5016 return -1;
5017 }
5018
5019 if (tcc_activation_temp_override != 0) {
5020 tcc_activation_temp = tcc_activation_temp_override;
5019 if (tj_max_override != 0) {
5020 tj_max = tj_max_override;
5021 fprintf(outf, "cpu%d: Using cmdline TCC Target (%d C)\n",
5021 fprintf(outf, "cpu%d: Using cmdline TCC Target (%d C)\n",
5022 cpu, tcc_activation_temp);
5022 cpu, tj_max);
5023 return 0;
5024 }
5025
5026 /* Temperature Target MSR is Nehalem and newer only */
5027 if (!do_nhm_platform_info)
5028 goto guess;
5029
5030 if (get_msr(base_cpu, MSR_IA32_TEMPERATURE_TARGET, &msr))
5031 goto guess;
5032
5023 return 0;
5024 }
5025
5026 /* Temperature Target MSR is Nehalem and newer only */
5027 if (!do_nhm_platform_info)
5028 goto guess;
5029
5030 if (get_msr(base_cpu, MSR_IA32_TEMPERATURE_TARGET, &msr))
5031 goto guess;
5032
5033 target_c_local = (msr >> 16) & 0xFF;
5033 tcc_default = (msr >> 16) & 0xFF;
5034
5035 if (!quiet) {
5036 switch (tcc_offset_bits) {
5037 case 4:
5038 tcc_offset = (msr >> 24) & 0xF;
5039 fprintf(outf, "cpu%d: MSR_IA32_TEMPERATURE_TARGET: 0x%08llx (%d C) (%d default - %d offset)\n",
5034
5035 if (!quiet) {
5036 switch (tcc_offset_bits) {
5037 case 4:
5038 tcc_offset = (msr >> 24) & 0xF;
5039 fprintf(outf, "cpu%d: MSR_IA32_TEMPERATURE_TARGET: 0x%08llx (%d C) (%d default - %d offset)\n",
5040 cpu, msr, target_c_local - tcc_offset, target_c_local, tcc_offset);
5040 cpu, msr, tcc_default - tcc_offset, tcc_default, tcc_offset);
5041 break;
5042 case 6:
5043 tcc_offset = (msr >> 24) & 0x3F;
5044 fprintf(outf, "cpu%d: MSR_IA32_TEMPERATURE_TARGET: 0x%08llx (%d C) (%d default - %d offset)\n",
5041 break;
5042 case 6:
5043 tcc_offset = (msr >> 24) & 0x3F;
5044 fprintf(outf, "cpu%d: MSR_IA32_TEMPERATURE_TARGET: 0x%08llx (%d C) (%d default - %d offset)\n",
5045 cpu, msr, target_c_local - tcc_offset, target_c_local, tcc_offset);
5045 cpu, msr, tcc_default - tcc_offset, tcc_default, tcc_offset);
5046 break;
5047 default:
5048 fprintf(outf, "cpu%d: MSR_IA32_TEMPERATURE_TARGET: 0x%08llx (%d C)\n",
5046 break;
5047 default:
5048 fprintf(outf, "cpu%d: MSR_IA32_TEMPERATURE_TARGET: 0x%08llx (%d C)\n",
5049 cpu, msr, target_c_local);
5049 cpu, msr, tcc_default);
5050 break;
5051 }
5052 }
5053
5050 break;
5051 }
5052 }
5053
5054 if (!target_c_local)
5054 if (!tcc_default)
5055 goto guess;
5056
5055 goto guess;
5056
5057 tcc_activation_temp = target_c_local;
5057 tj_max = tcc_default;
5058
5059 return 0;
5060
5061guess:
5058
5059 return 0;
5060
5061guess:
5062 tcc_activation_temp = TJMAX_DEFAULT;
5062 tj_max = TJMAX_DEFAULT;
5063 fprintf(outf, "cpu%d: Guessing tjMax %d C, Please use -T to specify\n",
5063 fprintf(outf, "cpu%d: Guessing tjMax %d C, Please use -T to specify\n",
5064 cpu, tcc_activation_temp);
5064 cpu, tj_max);
5065
5066 return 0;
5067}
5068
5069void decode_feature_control_msr(void)
5070{
5071 unsigned long long msr;
5072

--- 1343 unchanged lines hidden (view full) ---

6416 else
6417 bic_enabled |= bic_lookup(optarg, SHOW_LIST);
6418 shown = 1;
6419 break;
6420 case 'S':
6421 summary_only++;
6422 break;
6423 case 'T':
5065
5066 return 0;
5067}
5068
5069void decode_feature_control_msr(void)
5070{
5071 unsigned long long msr;
5072

--- 1343 unchanged lines hidden (view full) ---

6416 else
6417 bic_enabled |= bic_lookup(optarg, SHOW_LIST);
6418 shown = 1;
6419 break;
6420 case 'S':
6421 summary_only++;
6422 break;
6423 case 'T':
6424 tcc_activation_temp_override = atoi(optarg);
6424 tj_max_override = atoi(optarg);
6425 break;
6426 case 'v':
6427 print_version();
6428 exit(0);
6429 break;
6430 }
6431 }
6432}

--- 35 unchanged lines hidden ---
6425 break;
6426 case 'v':
6427 print_version();
6428 exit(0);
6429 break;
6430 }
6431 }
6432}

--- 35 unchanged lines hidden ---