diff options
author | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2017-04-14 07:11:09 -0400 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2017-04-14 07:11:09 -0400 |
commit | 66803c946ee6065bc49a7f029b0a48d93467f228 (patch) | |
tree | 07316934e0f7c92955e8ee219fbb6a1e1fc7fa22 | |
parent | c4a3fa261b16858416f1fd7db03a33d7ef5fc0b3 (diff) | |
parent | 4cca0457686e4ee1677d69469e4ddfd94d389a80 (diff) |
Merge branches 'pm-cpufreq-fixes' and 'pm-tools-fixes'
* pm-cpufreq-fixes:
cpufreq: Bring CPUs up even if cpufreq_online() failed
* pm-tools-fixes:
cpupower: Fix turbo frequency reporting for pre-Sandy Bridge cores
tools/power turbostat: update version number
tools/power turbostat: fix impossibly large CPU%c1 value
tools/power turbostat: turbostat.8 add missing column definitions
tools/power turbostat: update HWP dump to decimal from hex
tools/power turbostat: enable package THERM_INTERRUPT dump
tools/power turbostat: show missing Core and GFX power on SKL and KBL
tools/power turbostat: bugfix: GFXMHz column not changing
-rw-r--r-- | tools/power/cpupower/utils/helpers/cpuid.c | 1 | ||||
-rw-r--r-- | tools/power/x86/turbostat/turbostat.8 | 2 | ||||
-rw-r--r-- | tools/power/x86/turbostat/turbostat.c | 26 |
3 files changed, 16 insertions, 13 deletions
diff --git a/tools/power/cpupower/utils/helpers/cpuid.c b/tools/power/cpupower/utils/helpers/cpuid.c index 93b0aa74ca03..39c2c7d067bb 100644 --- a/tools/power/cpupower/utils/helpers/cpuid.c +++ b/tools/power/cpupower/utils/helpers/cpuid.c | |||
@@ -156,6 +156,7 @@ out: | |||
156 | */ | 156 | */ |
157 | case 0x2C: /* Westmere EP - Gulftown */ | 157 | case 0x2C: /* Westmere EP - Gulftown */ |
158 | cpu_info->caps |= CPUPOWER_CAP_HAS_TURBO_RATIO; | 158 | cpu_info->caps |= CPUPOWER_CAP_HAS_TURBO_RATIO; |
159 | break; | ||
159 | case 0x2A: /* SNB */ | 160 | case 0x2A: /* SNB */ |
160 | case 0x2D: /* SNB Xeon */ | 161 | case 0x2D: /* SNB Xeon */ |
161 | case 0x3A: /* IVB */ | 162 | case 0x3A: /* IVB */ |
diff --git a/tools/power/x86/turbostat/turbostat.8 b/tools/power/x86/turbostat/turbostat.8 index fedca3285326..ccf2a69365cc 100644 --- a/tools/power/x86/turbostat/turbostat.8 +++ b/tools/power/x86/turbostat/turbostat.8 | |||
@@ -100,6 +100,8 @@ The system configuration dump (if --quiet is not used) is followed by statistics | |||
100 | \fBCPU%c1, CPU%c3, CPU%c6, CPU%c7\fP show the percentage residency in hardware core idle states. These numbers are from hardware residency counters. | 100 | \fBCPU%c1, CPU%c3, CPU%c6, CPU%c7\fP show the percentage residency in hardware core idle states. These numbers are from hardware residency counters. |
101 | \fBCoreTmp\fP Degrees Celsius reported by the per-core Digital Thermal Sensor. | 101 | \fBCoreTmp\fP Degrees Celsius reported by the per-core Digital Thermal Sensor. |
102 | \fBPkgTtmp\fP Degrees Celsius reported by the per-package Package Thermal Monitor. | 102 | \fBPkgTtmp\fP Degrees Celsius reported by the per-package Package Thermal Monitor. |
103 | \fBGFX%rc6\fP The percentage of time the GPU is in the "render C6" state, rc6, during the measurement interval. From /sys/class/drm/card0/power/rc6_residency_ms. | ||
104 | \fBGFXMHz\fP Instantaneous snapshot of what sysfs presents at the end of the measurement interval. From /sys/class/graphics/fb0/device/drm/card0/gt_cur_freq_mhz. | ||
103 | \fBPkg%pc2, Pkg%pc3, Pkg%pc6, Pkg%pc7\fP percentage residency in hardware package idle states. These numbers are from hardware residency counters. | 105 | \fBPkg%pc2, Pkg%pc3, Pkg%pc6, Pkg%pc7\fP percentage residency in hardware package idle states. These numbers are from hardware residency counters. |
104 | \fBPkgWatt\fP Watts consumed by the whole package. | 106 | \fBPkgWatt\fP Watts consumed by the whole package. |
105 | \fBCorWatt\fP Watts consumed by the core part of the package. | 107 | \fBCorWatt\fP Watts consumed by the core part of the package. |
diff --git a/tools/power/x86/turbostat/turbostat.c b/tools/power/x86/turbostat/turbostat.c index 828dccd3f01e..b11294730771 100644 --- a/tools/power/x86/turbostat/turbostat.c +++ b/tools/power/x86/turbostat/turbostat.c | |||
@@ -1142,7 +1142,7 @@ delta_thread(struct thread_data *new, struct thread_data *old, | |||
1142 | * it is possible for mperf's non-halted cycles + idle states | 1142 | * it is possible for mperf's non-halted cycles + idle states |
1143 | * to exceed TSC's all cycles: show c1 = 0% in that case. | 1143 | * to exceed TSC's all cycles: show c1 = 0% in that case. |
1144 | */ | 1144 | */ |
1145 | if ((old->mperf + core_delta->c3 + core_delta->c6 + core_delta->c7) > old->tsc) | 1145 | if ((old->mperf + core_delta->c3 + core_delta->c6 + core_delta->c7) > (old->tsc * tsc_tweak)) |
1146 | old->c1 = 0; | 1146 | old->c1 = 0; |
1147 | else { | 1147 | else { |
1148 | /* normal case, derive c1 */ | 1148 | /* normal case, derive c1 */ |
@@ -2485,8 +2485,10 @@ int snapshot_gfx_mhz(void) | |||
2485 | 2485 | ||
2486 | if (fp == NULL) | 2486 | if (fp == NULL) |
2487 | fp = fopen_or_die("/sys/class/graphics/fb0/device/drm/card0/gt_cur_freq_mhz", "r"); | 2487 | fp = fopen_or_die("/sys/class/graphics/fb0/device/drm/card0/gt_cur_freq_mhz", "r"); |
2488 | else | 2488 | else { |
2489 | rewind(fp); | 2489 | rewind(fp); |
2490 | fflush(fp); | ||
2491 | } | ||
2490 | 2492 | ||
2491 | retval = fscanf(fp, "%d", &gfx_cur_mhz); | 2493 | retval = fscanf(fp, "%d", &gfx_cur_mhz); |
2492 | if (retval != 1) | 2494 | if (retval != 1) |
@@ -3111,7 +3113,7 @@ int print_hwp(struct thread_data *t, struct core_data *c, struct pkg_data *p) | |||
3111 | return 0; | 3113 | return 0; |
3112 | 3114 | ||
3113 | fprintf(outf, "cpu%d: MSR_HWP_CAPABILITIES: 0x%08llx " | 3115 | fprintf(outf, "cpu%d: MSR_HWP_CAPABILITIES: 0x%08llx " |
3114 | "(high 0x%x guar 0x%x eff 0x%x low 0x%x)\n", | 3116 | "(high %d guar %d eff %d low %d)\n", |
3115 | cpu, msr, | 3117 | cpu, msr, |
3116 | (unsigned int)HWP_HIGHEST_PERF(msr), | 3118 | (unsigned int)HWP_HIGHEST_PERF(msr), |
3117 | (unsigned int)HWP_GUARANTEED_PERF(msr), | 3119 | (unsigned int)HWP_GUARANTEED_PERF(msr), |
@@ -3122,7 +3124,7 @@ int print_hwp(struct thread_data *t, struct core_data *c, struct pkg_data *p) | |||
3122 | return 0; | 3124 | return 0; |
3123 | 3125 | ||
3124 | fprintf(outf, "cpu%d: MSR_HWP_REQUEST: 0x%08llx " | 3126 | fprintf(outf, "cpu%d: MSR_HWP_REQUEST: 0x%08llx " |
3125 | "(min 0x%x max 0x%x des 0x%x epp 0x%x window 0x%x pkg 0x%x)\n", | 3127 | "(min %d max %d des %d epp 0x%x window 0x%x pkg 0x%x)\n", |
3126 | cpu, msr, | 3128 | cpu, msr, |
3127 | (unsigned int)(((msr) >> 0) & 0xff), | 3129 | (unsigned int)(((msr) >> 0) & 0xff), |
3128 | (unsigned int)(((msr) >> 8) & 0xff), | 3130 | (unsigned int)(((msr) >> 8) & 0xff), |
@@ -3136,7 +3138,7 @@ int print_hwp(struct thread_data *t, struct core_data *c, struct pkg_data *p) | |||
3136 | return 0; | 3138 | return 0; |
3137 | 3139 | ||
3138 | fprintf(outf, "cpu%d: MSR_HWP_REQUEST_PKG: 0x%08llx " | 3140 | fprintf(outf, "cpu%d: MSR_HWP_REQUEST_PKG: 0x%08llx " |
3139 | "(min 0x%x max 0x%x des 0x%x epp 0x%x window 0x%x)\n", | 3141 | "(min %d max %d des %d epp 0x%x window 0x%x)\n", |
3140 | cpu, msr, | 3142 | cpu, msr, |
3141 | (unsigned int)(((msr) >> 0) & 0xff), | 3143 | (unsigned int)(((msr) >> 0) & 0xff), |
3142 | (unsigned int)(((msr) >> 8) & 0xff), | 3144 | (unsigned int)(((msr) >> 8) & 0xff), |
@@ -3353,17 +3355,19 @@ void rapl_probe(unsigned int family, unsigned int model) | |||
3353 | case INTEL_FAM6_SKYLAKE_DESKTOP: /* SKL */ | 3355 | case INTEL_FAM6_SKYLAKE_DESKTOP: /* SKL */ |
3354 | case INTEL_FAM6_KABYLAKE_MOBILE: /* KBL */ | 3356 | case INTEL_FAM6_KABYLAKE_MOBILE: /* KBL */ |
3355 | case INTEL_FAM6_KABYLAKE_DESKTOP: /* KBL */ | 3357 | case INTEL_FAM6_KABYLAKE_DESKTOP: /* KBL */ |
3356 | do_rapl = RAPL_PKG | RAPL_DRAM | RAPL_DRAM_PERF_STATUS | RAPL_PKG_PERF_STATUS | RAPL_PKG_POWER_INFO; | 3358 | do_rapl = RAPL_PKG | RAPL_CORES | RAPL_CORE_POLICY | RAPL_DRAM | RAPL_DRAM_PERF_STATUS | RAPL_PKG_PERF_STATUS | RAPL_GFX | RAPL_PKG_POWER_INFO; |
3357 | BIC_PRESENT(BIC_PKG__); | 3359 | BIC_PRESENT(BIC_PKG__); |
3358 | BIC_PRESENT(BIC_RAM__); | 3360 | BIC_PRESENT(BIC_RAM__); |
3359 | if (rapl_joules) { | 3361 | if (rapl_joules) { |
3360 | BIC_PRESENT(BIC_Pkg_J); | 3362 | BIC_PRESENT(BIC_Pkg_J); |
3361 | BIC_PRESENT(BIC_Cor_J); | 3363 | BIC_PRESENT(BIC_Cor_J); |
3362 | BIC_PRESENT(BIC_RAM_J); | 3364 | BIC_PRESENT(BIC_RAM_J); |
3365 | BIC_PRESENT(BIC_GFX_J); | ||
3363 | } else { | 3366 | } else { |
3364 | BIC_PRESENT(BIC_PkgWatt); | 3367 | BIC_PRESENT(BIC_PkgWatt); |
3365 | BIC_PRESENT(BIC_CorWatt); | 3368 | BIC_PRESENT(BIC_CorWatt); |
3366 | BIC_PRESENT(BIC_RAMWatt); | 3369 | BIC_PRESENT(BIC_RAMWatt); |
3370 | BIC_PRESENT(BIC_GFXWatt); | ||
3367 | } | 3371 | } |
3368 | break; | 3372 | break; |
3369 | case INTEL_FAM6_HASWELL_X: /* HSX */ | 3373 | case INTEL_FAM6_HASWELL_X: /* HSX */ |
@@ -3478,7 +3482,7 @@ void perf_limit_reasons_probe(unsigned int family, unsigned int model) | |||
3478 | int print_thermal(struct thread_data *t, struct core_data *c, struct pkg_data *p) | 3482 | int print_thermal(struct thread_data *t, struct core_data *c, struct pkg_data *p) |
3479 | { | 3483 | { |
3480 | unsigned long long msr; | 3484 | unsigned long long msr; |
3481 | unsigned int dts; | 3485 | unsigned int dts, dts2; |
3482 | int cpu; | 3486 | int cpu; |
3483 | 3487 | ||
3484 | if (!(do_dts || do_ptm)) | 3488 | if (!(do_dts || do_ptm)) |
@@ -3503,7 +3507,6 @@ int print_thermal(struct thread_data *t, struct core_data *c, struct pkg_data *p | |||
3503 | fprintf(outf, "cpu%d: MSR_IA32_PACKAGE_THERM_STATUS: 0x%08llx (%d C)\n", | 3507 | fprintf(outf, "cpu%d: MSR_IA32_PACKAGE_THERM_STATUS: 0x%08llx (%d C)\n", |
3504 | cpu, msr, tcc_activation_temp - dts); | 3508 | cpu, msr, tcc_activation_temp - dts); |
3505 | 3509 | ||
3506 | #ifdef THERM_DEBUG | ||
3507 | if (get_msr(cpu, MSR_IA32_PACKAGE_THERM_INTERRUPT, &msr)) | 3510 | if (get_msr(cpu, MSR_IA32_PACKAGE_THERM_INTERRUPT, &msr)) |
3508 | return 0; | 3511 | return 0; |
3509 | 3512 | ||
@@ -3511,11 +3514,10 @@ int print_thermal(struct thread_data *t, struct core_data *c, struct pkg_data *p | |||
3511 | dts2 = (msr >> 8) & 0x7F; | 3514 | dts2 = (msr >> 8) & 0x7F; |
3512 | fprintf(outf, "cpu%d: MSR_IA32_PACKAGE_THERM_INTERRUPT: 0x%08llx (%d C, %d C)\n", | 3515 | fprintf(outf, "cpu%d: MSR_IA32_PACKAGE_THERM_INTERRUPT: 0x%08llx (%d C, %d C)\n", |
3513 | cpu, msr, tcc_activation_temp - dts, tcc_activation_temp - dts2); | 3516 | cpu, msr, tcc_activation_temp - dts, tcc_activation_temp - dts2); |
3514 | #endif | ||
3515 | } | 3517 | } |
3516 | 3518 | ||
3517 | 3519 | ||
3518 | if (do_dts) { | 3520 | if (do_dts && debug) { |
3519 | unsigned int resolution; | 3521 | unsigned int resolution; |
3520 | 3522 | ||
3521 | if (get_msr(cpu, MSR_IA32_THERM_STATUS, &msr)) | 3523 | if (get_msr(cpu, MSR_IA32_THERM_STATUS, &msr)) |
@@ -3526,7 +3528,6 @@ int print_thermal(struct thread_data *t, struct core_data *c, struct pkg_data *p | |||
3526 | fprintf(outf, "cpu%d: MSR_IA32_THERM_STATUS: 0x%08llx (%d C +/- %d)\n", | 3528 | fprintf(outf, "cpu%d: MSR_IA32_THERM_STATUS: 0x%08llx (%d C +/- %d)\n", |
3527 | cpu, msr, tcc_activation_temp - dts, resolution); | 3529 | cpu, msr, tcc_activation_temp - dts, resolution); |
3528 | 3530 | ||
3529 | #ifdef THERM_DEBUG | ||
3530 | if (get_msr(cpu, MSR_IA32_THERM_INTERRUPT, &msr)) | 3531 | if (get_msr(cpu, MSR_IA32_THERM_INTERRUPT, &msr)) |
3531 | return 0; | 3532 | return 0; |
3532 | 3533 | ||
@@ -3534,7 +3535,6 @@ int print_thermal(struct thread_data *t, struct core_data *c, struct pkg_data *p | |||
3534 | dts2 = (msr >> 8) & 0x7F; | 3535 | dts2 = (msr >> 8) & 0x7F; |
3535 | fprintf(outf, "cpu%d: MSR_IA32_THERM_INTERRUPT: 0x%08llx (%d C, %d C)\n", | 3536 | fprintf(outf, "cpu%d: MSR_IA32_THERM_INTERRUPT: 0x%08llx (%d C, %d C)\n", |
3536 | cpu, msr, tcc_activation_temp - dts, tcc_activation_temp - dts2); | 3537 | cpu, msr, tcc_activation_temp - dts, tcc_activation_temp - dts2); |
3537 | #endif | ||
3538 | } | 3538 | } |
3539 | 3539 | ||
3540 | return 0; | 3540 | return 0; |
@@ -4578,7 +4578,7 @@ int get_and_dump_counters(void) | |||
4578 | } | 4578 | } |
4579 | 4579 | ||
4580 | void print_version() { | 4580 | void print_version() { |
4581 | fprintf(outf, "turbostat version 17.02.24" | 4581 | fprintf(outf, "turbostat version 17.04.12" |
4582 | " - Len Brown <lenb@kernel.org>\n"); | 4582 | " - Len Brown <lenb@kernel.org>\n"); |
4583 | } | 4583 | } |
4584 | 4584 | ||