summaryrefslogtreecommitdiffstats
path: root/tools/power/x86
diff options
context:
space:
mode:
authorLen Brown <len.brown@intel.com>2017-01-27 00:50:45 -0500
committerLen Brown <len.brown@intel.com>2017-03-01 00:14:13 -0500
commit0f47c08d8ccf8252a5c007502919bdc2126ffb1f (patch)
tree9bf2ec9195f3dbd96c80cfa3fcec2ec20624daff /tools/power/x86
parent008d396eb219ee5a1c98c9ef01c35752d35f0d6c (diff)
tools/power turbostat: bug fixes to --add, --show/--hide features
Fix a bug with --add, where the title of the column is un-initialized if not specified by the user. The initial implementation of --show and --hide neglected to handle the pc8/pc9/pc10 counters. Fix a bug where "--show Core" only worked with --debug Reported-by: Wendy Wang <wendy.wang@intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'tools/power/x86')
-rw-r--r--tools/power/x86/turbostat/turbostat.c138
1 files changed, 77 insertions, 61 deletions
diff --git a/tools/power/x86/turbostat/turbostat.c b/tools/power/x86/turbostat/turbostat.c
index bbdf9ba9d41b..4b04ba86e44f 100644
--- a/tools/power/x86/turbostat/turbostat.c
+++ b/tools/power/x86/turbostat/turbostat.c
@@ -55,11 +55,6 @@ unsigned int summary_only;
55unsigned int dump_only; 55unsigned int dump_only;
56unsigned int do_snb_cstates; 56unsigned int do_snb_cstates;
57unsigned int do_knl_cstates; 57unsigned int do_knl_cstates;
58unsigned int do_pc2;
59unsigned int do_pc3;
60unsigned int do_pc6;
61unsigned int do_pc7;
62unsigned int do_c8_c9_c10;
63unsigned int do_skl_residency; 58unsigned int do_skl_residency;
64unsigned int do_slm_cstates; 59unsigned int do_slm_cstates;
65unsigned int use_c1_residency_msr; 60unsigned int use_c1_residency_msr;
@@ -365,6 +360,9 @@ struct msr_counter bic[] = {
365 { 0x0, "Pkg%pc3" }, 360 { 0x0, "Pkg%pc3" },
366 { 0x0, "Pkg%pc6" }, 361 { 0x0, "Pkg%pc6" },
367 { 0x0, "Pkg%pc7" }, 362 { 0x0, "Pkg%pc7" },
363 { 0x0, "Pkg%pc8" },
364 { 0x0, "Pkg%pc9" },
365 { 0x0, "Pkg%pc10" },
368 { 0x0, "PkgWatt" }, 366 { 0x0, "PkgWatt" },
369 { 0x0, "CorWatt" }, 367 { 0x0, "CorWatt" },
370 { 0x0, "GFXWatt" }, 368 { 0x0, "GFXWatt" },
@@ -403,26 +401,30 @@ struct msr_counter bic[] = {
403#define BIC_Pkgpc3 (1ULL << 18) 401#define BIC_Pkgpc3 (1ULL << 18)
404#define BIC_Pkgpc6 (1ULL << 19) 402#define BIC_Pkgpc6 (1ULL << 19)
405#define BIC_Pkgpc7 (1ULL << 20) 403#define BIC_Pkgpc7 (1ULL << 20)
406#define BIC_PkgWatt (1ULL << 21) 404#define BIC_Pkgpc8 (1ULL << 21)
407#define BIC_CorWatt (1ULL << 22) 405#define BIC_Pkgpc9 (1ULL << 22)
408#define BIC_GFXWatt (1ULL << 23) 406#define BIC_Pkgpc10 (1ULL << 23)
409#define BIC_PkgCnt (1ULL << 24) 407#define BIC_PkgWatt (1ULL << 24)
410#define BIC_RAMWatt (1ULL << 27) 408#define BIC_CorWatt (1ULL << 25)
411#define BIC_PKG__ (1ULL << 28) 409#define BIC_GFXWatt (1ULL << 26)
412#define BIC_RAM__ (1ULL << 29) 410#define BIC_PkgCnt (1ULL << 27)
413#define BIC_Pkg_J (1ULL << 30) 411#define BIC_RAMWatt (1ULL << 28)
414#define BIC_Cor_J (1ULL << 31) 412#define BIC_PKG__ (1ULL << 29)
415#define BIC_GFX_J (1ULL << 30) 413#define BIC_RAM__ (1ULL << 30)
416#define BIC_RAM_J (1ULL << 31) 414#define BIC_Pkg_J (1ULL << 31)
417#define BIC_Core (1ULL << 32) 415#define BIC_Cor_J (1ULL << 32)
418#define BIC_CPU (1ULL << 33) 416#define BIC_GFX_J (1ULL << 33)
419#define BIC_Mod_c6 (1ULL << 34) 417#define BIC_RAM_J (1ULL << 34)
418#define BIC_Core (1ULL << 35)
419#define BIC_CPU (1ULL << 36)
420#define BIC_Mod_c6 (1ULL << 37)
420 421
421unsigned long long bic_enabled = 0xFFFFFFFFFFFFFFFFULL; 422unsigned long long bic_enabled = 0xFFFFFFFFFFFFFFFFULL;
422unsigned long long bic_present; 423unsigned long long bic_present;
423 424
424#define DO_BIC(COUNTER_NAME) (bic_enabled & bic_present & COUNTER_NAME) 425#define DO_BIC(COUNTER_NAME) (bic_enabled & bic_present & COUNTER_NAME)
425#define BIC_PRESENT(COUNTER_BIT) (bic_present |= COUNTER_BIT) 426#define BIC_PRESENT(COUNTER_BIT) (bic_present |= COUNTER_BIT)
427#define BIC_NOT_PRESENT(COUNTER_BIT) (bic_present &= ~COUNTER_BIT)
426 428
427/* 429/*
428 * bic_lookup 430 * bic_lookup
@@ -539,19 +541,20 @@ void print_header(void)
539 outp += sprintf(outp, "\tCPUGFX%%"); 541 outp += sprintf(outp, "\tCPUGFX%%");
540 } 542 }
541 543
542 if (do_pc2) 544 if (DO_BIC(BIC_Pkgpc2))
543 outp += sprintf(outp, "\tPkg%%pc2"); 545 outp += sprintf(outp, "\tPkg%%pc2");
544 if (do_pc3) 546 if (DO_BIC(BIC_Pkgpc3))
545 outp += sprintf(outp, "\tPkg%%pc3"); 547 outp += sprintf(outp, "\tPkg%%pc3");
546 if (do_pc6) 548 if (DO_BIC(BIC_Pkgpc6))
547 outp += sprintf(outp, "\tPkg%%pc6"); 549 outp += sprintf(outp, "\tPkg%%pc6");
548 if (do_pc7) 550 if (DO_BIC(BIC_Pkgpc7))
549 outp += sprintf(outp, "\tPkg%%pc7"); 551 outp += sprintf(outp, "\tPkg%%pc7");
550 if (do_c8_c9_c10) { 552 if (DO_BIC(BIC_Pkgpc8))
551 outp += sprintf(outp, "\tPkg%%pc8"); 553 outp += sprintf(outp, "\tPkg%%pc8");
554 if (DO_BIC(BIC_Pkgpc9))
552 outp += sprintf(outp, "\tPkg%%pc9"); 555 outp += sprintf(outp, "\tPkg%%pc9");
556 if (DO_BIC(BIC_Pkgpc10))
553 outp += sprintf(outp, "\tPk%%pc10"); 557 outp += sprintf(outp, "\tPk%%pc10");
554 }
555 558
556 if (do_rapl && !rapl_joules) { 559 if (do_rapl && !rapl_joules) {
557 if (DO_BIC(BIC_PkgWatt)) 560 if (DO_BIC(BIC_PkgWatt))
@@ -644,11 +647,11 @@ int dump_counters(struct thread_data *t, struct core_data *c,
644 outp += sprintf(outp, "CPU + GFX: %016llX\n", p->pkg_both_core_gfxe_c0); 647 outp += sprintf(outp, "CPU + GFX: %016llX\n", p->pkg_both_core_gfxe_c0);
645 648
646 outp += sprintf(outp, "pc2: %016llX\n", p->pc2); 649 outp += sprintf(outp, "pc2: %016llX\n", p->pc2);
647 if (do_pc3) 650 if (DO_BIC(BIC_Pkgpc3))
648 outp += sprintf(outp, "pc3: %016llX\n", p->pc3); 651 outp += sprintf(outp, "pc3: %016llX\n", p->pc3);
649 if (do_pc6) 652 if (DO_BIC(BIC_Pkgpc6))
650 outp += sprintf(outp, "pc6: %016llX\n", p->pc6); 653 outp += sprintf(outp, "pc6: %016llX\n", p->pc6);
651 if (do_pc7) 654 if (DO_BIC(BIC_Pkgpc7))
652 outp += sprintf(outp, "pc7: %016llX\n", p->pc7); 655 outp += sprintf(outp, "pc7: %016llX\n", p->pc7);
653 outp += sprintf(outp, "pc8: %016llX\n", p->pc8); 656 outp += sprintf(outp, "pc8: %016llX\n", p->pc8);
654 outp += sprintf(outp, "pc9: %016llX\n", p->pc9); 657 outp += sprintf(outp, "pc9: %016llX\n", p->pc9);
@@ -827,19 +830,20 @@ int format_counters(struct thread_data *t, struct core_data *c,
827 outp += sprintf(outp, "\t%.2f", 100.0 * p->pkg_both_core_gfxe_c0/tsc); 830 outp += sprintf(outp, "\t%.2f", 100.0 * p->pkg_both_core_gfxe_c0/tsc);
828 } 831 }
829 832
830 if (do_pc2) 833 if (DO_BIC(BIC_Pkgpc2))
831 outp += sprintf(outp, "\t%.2f", 100.0 * p->pc2/tsc); 834 outp += sprintf(outp, "\t%.2f", 100.0 * p->pc2/tsc);
832 if (do_pc3) 835 if (DO_BIC(BIC_Pkgpc3))
833 outp += sprintf(outp, "\t%.2f", 100.0 * p->pc3/tsc); 836 outp += sprintf(outp, "\t%.2f", 100.0 * p->pc3/tsc);
834 if (do_pc6) 837 if (DO_BIC(BIC_Pkgpc6))
835 outp += sprintf(outp, "\t%.2f", 100.0 * p->pc6/tsc); 838 outp += sprintf(outp, "\t%.2f", 100.0 * p->pc6/tsc);
836 if (do_pc7) 839 if (DO_BIC(BIC_Pkgpc7))
837 outp += sprintf(outp, "\t%.2f", 100.0 * p->pc7/tsc); 840 outp += sprintf(outp, "\t%.2f", 100.0 * p->pc7/tsc);
838 if (do_c8_c9_c10) { 841 if (DO_BIC(BIC_Pkgpc8))
839 outp += sprintf(outp, "\t%.2f", 100.0 * p->pc8/tsc); 842 outp += sprintf(outp, "\t%.2f", 100.0 * p->pc8/tsc);
843 if (DO_BIC(BIC_Pkgpc9))
840 outp += sprintf(outp, "\t%.2f", 100.0 * p->pc9/tsc); 844 outp += sprintf(outp, "\t%.2f", 100.0 * p->pc9/tsc);
845 if (DO_BIC(BIC_Pkgpc10))
841 outp += sprintf(outp, "\t%.2f", 100.0 * p->pc10/tsc); 846 outp += sprintf(outp, "\t%.2f", 100.0 * p->pc10/tsc);
842 }
843 847
844 /* 848 /*
845 * If measurement interval exceeds minimum RAPL Joule Counter range, 849 * If measurement interval exceeds minimum RAPL Joule Counter range,
@@ -949,11 +953,11 @@ delta_package(struct pkg_data *new, struct pkg_data *old)
949 old->pkg_both_core_gfxe_c0 = new->pkg_both_core_gfxe_c0 - old->pkg_both_core_gfxe_c0; 953 old->pkg_both_core_gfxe_c0 = new->pkg_both_core_gfxe_c0 - old->pkg_both_core_gfxe_c0;
950 } 954 }
951 old->pc2 = new->pc2 - old->pc2; 955 old->pc2 = new->pc2 - old->pc2;
952 if (do_pc3) 956 if (DO_BIC(BIC_Pkgpc3))
953 old->pc3 = new->pc3 - old->pc3; 957 old->pc3 = new->pc3 - old->pc3;
954 if (do_pc6) 958 if (DO_BIC(BIC_Pkgpc6))
955 old->pc6 = new->pc6 - old->pc6; 959 old->pc6 = new->pc6 - old->pc6;
956 if (do_pc7) 960 if (DO_BIC(BIC_Pkgpc7))
957 old->pc7 = new->pc7 - old->pc7; 961 old->pc7 = new->pc7 - old->pc7;
958 old->pc8 = new->pc8 - old->pc8; 962 old->pc8 = new->pc8 - old->pc8;
959 old->pc9 = new->pc9 - old->pc9; 963 old->pc9 = new->pc9 - old->pc9;
@@ -1126,11 +1130,11 @@ void clear_counters(struct thread_data *t, struct core_data *c, struct pkg_data
1126 p->pkg_both_core_gfxe_c0 = 0; 1130 p->pkg_both_core_gfxe_c0 = 0;
1127 1131
1128 p->pc2 = 0; 1132 p->pc2 = 0;
1129 if (do_pc3) 1133 if (DO_BIC(BIC_Pkgpc3))
1130 p->pc3 = 0; 1134 p->pc3 = 0;
1131 if (do_pc6) 1135 if (DO_BIC(BIC_Pkgpc6))
1132 p->pc6 = 0; 1136 p->pc6 = 0;
1133 if (do_pc7) 1137 if (DO_BIC(BIC_Pkgpc7))
1134 p->pc7 = 0; 1138 p->pc7 = 0;
1135 p->pc8 = 0; 1139 p->pc8 = 0;
1136 p->pc9 = 0; 1140 p->pc9 = 0;
@@ -1204,11 +1208,11 @@ int sum_counters(struct thread_data *t, struct core_data *c,
1204 } 1208 }
1205 1209
1206 average.packages.pc2 += p->pc2; 1210 average.packages.pc2 += p->pc2;
1207 if (do_pc3) 1211 if (DO_BIC(BIC_Pkgpc3))
1208 average.packages.pc3 += p->pc3; 1212 average.packages.pc3 += p->pc3;
1209 if (do_pc6) 1213 if (DO_BIC(BIC_Pkgpc6))
1210 average.packages.pc6 += p->pc6; 1214 average.packages.pc6 += p->pc6;
1211 if (do_pc7) 1215 if (DO_BIC(BIC_Pkgpc7))
1212 average.packages.pc7 += p->pc7; 1216 average.packages.pc7 += p->pc7;
1213 average.packages.pc8 += p->pc8; 1217 average.packages.pc8 += p->pc8;
1214 average.packages.pc9 += p->pc9; 1218 average.packages.pc9 += p->pc9;
@@ -1266,11 +1270,11 @@ void compute_average(struct thread_data *t, struct core_data *c,
1266 } 1270 }
1267 1271
1268 average.packages.pc2 /= topo.num_packages; 1272 average.packages.pc2 /= topo.num_packages;
1269 if (do_pc3) 1273 if (DO_BIC(BIC_Pkgpc3))
1270 average.packages.pc3 /= topo.num_packages; 1274 average.packages.pc3 /= topo.num_packages;
1271 if (do_pc6) 1275 if (DO_BIC(BIC_Pkgpc6))
1272 average.packages.pc6 /= topo.num_packages; 1276 average.packages.pc6 /= topo.num_packages;
1273 if (do_pc7) 1277 if (DO_BIC(BIC_Pkgpc7))
1274 average.packages.pc7 /= topo.num_packages; 1278 average.packages.pc7 /= topo.num_packages;
1275 1279
1276 average.packages.pc8 /= topo.num_packages; 1280 average.packages.pc8 /= topo.num_packages;
@@ -1448,10 +1452,10 @@ retry:
1448 if (get_msr(cpu, MSR_PKG_BOTH_CORE_GFXE_C0_RES, &p->pkg_both_core_gfxe_c0)) 1452 if (get_msr(cpu, MSR_PKG_BOTH_CORE_GFXE_C0_RES, &p->pkg_both_core_gfxe_c0))
1449 return -13; 1453 return -13;
1450 } 1454 }
1451 if (do_pc3) 1455 if (DO_BIC(BIC_Pkgpc3))
1452 if (get_msr(cpu, MSR_PKG_C3_RESIDENCY, &p->pc3)) 1456 if (get_msr(cpu, MSR_PKG_C3_RESIDENCY, &p->pc3))
1453 return -9; 1457 return -9;
1454 if (do_pc6) { 1458 if (DO_BIC(BIC_Pkgpc6)) {
1455 if (do_slm_cstates) { 1459 if (do_slm_cstates) {
1456 if (get_msr(cpu, MSR_ATOM_PKG_C6_RESIDENCY, &p->pc6)) 1460 if (get_msr(cpu, MSR_ATOM_PKG_C6_RESIDENCY, &p->pc6))
1457 return -10; 1461 return -10;
@@ -1461,20 +1465,22 @@ retry:
1461 } 1465 }
1462 } 1466 }
1463 1467
1464 if (do_pc2) 1468 if (DO_BIC(BIC_Pkgpc2))
1465 if (get_msr(cpu, MSR_PKG_C2_RESIDENCY, &p->pc2)) 1469 if (get_msr(cpu, MSR_PKG_C2_RESIDENCY, &p->pc2))
1466 return -11; 1470 return -11;
1467 if (do_pc7) 1471 if (DO_BIC(BIC_Pkgpc7))
1468 if (get_msr(cpu, MSR_PKG_C7_RESIDENCY, &p->pc7)) 1472 if (get_msr(cpu, MSR_PKG_C7_RESIDENCY, &p->pc7))
1469 return -12; 1473 return -12;
1470 if (do_c8_c9_c10) { 1474 if (DO_BIC(BIC_Pkgpc8))
1471 if (get_msr(cpu, MSR_PKG_C8_RESIDENCY, &p->pc8)) 1475 if (get_msr(cpu, MSR_PKG_C8_RESIDENCY, &p->pc8))
1472 return -13; 1476 return -13;
1477 if (DO_BIC(BIC_Pkgpc9))
1473 if (get_msr(cpu, MSR_PKG_C9_RESIDENCY, &p->pc9)) 1478 if (get_msr(cpu, MSR_PKG_C9_RESIDENCY, &p->pc9))
1474 return -13; 1479 return -13;
1480 if (DO_BIC(BIC_Pkgpc10))
1475 if (get_msr(cpu, MSR_PKG_C10_RESIDENCY, &p->pc10)) 1481 if (get_msr(cpu, MSR_PKG_C10_RESIDENCY, &p->pc10))
1476 return -13; 1482 return -13;
1477 } 1483
1478 if (do_rapl & RAPL_PKG) { 1484 if (do_rapl & RAPL_PKG) {
1479 if (get_msr(cpu, MSR_PKG_ENERGY_STATUS, &msr)) 1485 if (get_msr(cpu, MSR_PKG_ENERGY_STATUS, &msr))
1480 return -13; 1486 return -13;
@@ -3824,17 +3830,27 @@ void process_cpuid()
3824 BIC_PRESENT(BIC_CPU_c7); 3830 BIC_PRESENT(BIC_CPU_c7);
3825 3831
3826 do_irtl_snb = has_snb_msrs(family, model); 3832 do_irtl_snb = has_snb_msrs(family, model);
3827 do_pc2 = do_snb_cstates && (pkg_cstate_limit >= PCL__2); 3833 if (do_snb_cstates && (pkg_cstate_limit >= PCL__2))
3828 do_pc3 = (pkg_cstate_limit >= PCL__3); 3834 BIC_PRESENT(BIC_Pkgpc2);
3829 do_pc6 = (pkg_cstate_limit >= PCL__6); 3835 if (pkg_cstate_limit >= PCL__3)
3830 do_pc7 = do_snb_cstates && (pkg_cstate_limit >= PCL__7); 3836 BIC_PRESENT(BIC_Pkgpc3);
3837 if (pkg_cstate_limit >= PCL__6)
3838 BIC_PRESENT(BIC_Pkgpc6);
3839 if (do_snb_cstates && (pkg_cstate_limit >= PCL__7))
3840 BIC_PRESENT(BIC_Pkgpc7);
3831 if (has_slv_msrs(family, model)) { 3841 if (has_slv_msrs(family, model)) {
3832 do_pc2 = do_pc3 = do_pc7 = 0; 3842 BIC_NOT_PRESENT(BIC_Pkgpc2);
3833 do_pc6 = 1; 3843 BIC_NOT_PRESENT(BIC_Pkgpc3);
3844 BIC_PRESENT(BIC_Pkgpc6);
3845 BIC_NOT_PRESENT(BIC_Pkgpc7);
3834 BIC_PRESENT(BIC_Mod_c6); 3846 BIC_PRESENT(BIC_Mod_c6);
3835 use_c1_residency_msr = 1; 3847 use_c1_residency_msr = 1;
3836 } 3848 }
3837 do_c8_c9_c10 = has_hsw_msrs(family, model); 3849 if (has_hsw_msrs(family, model)) {
3850 BIC_PRESENT(BIC_Pkgpc8);
3851 BIC_PRESENT(BIC_Pkgpc9);
3852 BIC_PRESENT(BIC_Pkgpc10);
3853 }
3838 do_irtl_hsw = has_hsw_msrs(family, model); 3854 do_irtl_hsw = has_hsw_msrs(family, model);
3839 do_skl_residency = has_skl_msrs(family, model); 3855 do_skl_residency = has_skl_msrs(family, model);
3840 do_slm_cstates = is_slm(family, model); 3856 do_slm_cstates = is_slm(family, model);
@@ -3981,7 +3997,7 @@ void topology_probe()
3981 if (debug > 1) 3997 if (debug > 1)
3982 fprintf(outf, "max_core_id %d, sizing for %d cores per package\n", 3998 fprintf(outf, "max_core_id %d, sizing for %d cores per package\n",
3983 max_core_id, topo.num_cores_per_pkg); 3999 max_core_id, topo.num_cores_per_pkg);
3984 if (debug && !summary_only && topo.num_cores_per_pkg > 1) 4000 if (!summary_only && topo.num_cores_per_pkg > 1)
3985 BIC_PRESENT(BIC_Core); 4001 BIC_PRESENT(BIC_Core);
3986 4002
3987 topo.num_packages = max_package_id + 1; 4003 topo.num_packages = max_package_id + 1;
@@ -4282,7 +4298,7 @@ int add_counter(unsigned int msr_num, char *name, unsigned int width,
4282void parse_add_command(char *add_command) 4298void parse_add_command(char *add_command)
4283{ 4299{
4284 int msr_num = 0; 4300 int msr_num = 0;
4285 char name_buffer[NAME_BYTES]; 4301 char name_buffer[NAME_BYTES] = "";
4286 int width = 64; 4302 int width = 64;
4287 int fail = 0; 4303 int fail = 0;
4288 enum counter_scope scope = SCOPE_CPU; 4304 enum counter_scope scope = SCOPE_CPU;