turbostat.c (678a3bd1b3de6d2ebf604e7d708bc8150bb667e9) | turbostat.c (812db3f77b9a3f6ed59baf7a0d5c3fd8ec8ef86a) |
---|---|
1/* 2 * turbostat -- show CPU frequency and C-state residency 3 * on modern Intel turbo-capable processors. 4 * 5 * Copyright (c) 2013 Intel Corporation. 6 * Len Brown <len.brown@intel.com> 7 * 8 * This program is free software; you can redistribute it and/or modify it --- 38 unchanged lines hidden (view full) --- 47char *proc_stat = "/proc/stat"; 48FILE *outf; 49int *fd_percpu; 50struct timespec interval_ts = {5, 0}; 51unsigned int debug; 52unsigned int rapl_joules; 53unsigned int summary_only; 54unsigned int dump_only; | 1/* 2 * turbostat -- show CPU frequency and C-state residency 3 * on modern Intel turbo-capable processors. 4 * 5 * Copyright (c) 2013 Intel Corporation. 6 * Len Brown <len.brown@intel.com> 7 * 8 * This program is free software; you can redistribute it and/or modify it --- 38 unchanged lines hidden (view full) --- 47char *proc_stat = "/proc/stat"; 48FILE *outf; 49int *fd_percpu; 50struct timespec interval_ts = {5, 0}; 51unsigned int debug; 52unsigned int rapl_joules; 53unsigned int summary_only; 54unsigned int dump_only; |
55unsigned int do_nhm_cstates; | |
56unsigned int do_snb_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; 64unsigned int do_slm_cstates; 65unsigned int use_c1_residency_msr; 66unsigned int has_aperf; 67unsigned int has_epb; 68unsigned int do_irtl_snb; 69unsigned int do_irtl_hsw; 70unsigned int units = 1000000; /* MHz etc */ 71unsigned int genuine_intel; 72unsigned int has_invariant_tsc; 73unsigned int do_nhm_platform_info; 74unsigned int aperf_mperf_multiplier = 1; | 55unsigned int do_snb_cstates; 56unsigned int do_knl_cstates; 57unsigned int do_pc2; 58unsigned int do_pc3; 59unsigned int do_pc6; 60unsigned int do_pc7; 61unsigned int do_c8_c9_c10; 62unsigned int do_skl_residency; 63unsigned int do_slm_cstates; 64unsigned int use_c1_residency_msr; 65unsigned int has_aperf; 66unsigned int has_epb; 67unsigned int do_irtl_snb; 68unsigned int do_irtl_hsw; 69unsigned int units = 1000000; /* MHz etc */ 70unsigned int genuine_intel; 71unsigned int has_invariant_tsc; 72unsigned int do_nhm_platform_info; 73unsigned int aperf_mperf_multiplier = 1; |
75int do_irq = 1; 76int do_smi; | |
77double bclk; 78double base_hz; 79unsigned int has_base_hz; 80double tsc_tweak = 1.0; | 74double bclk; 75double base_hz; 76unsigned int has_base_hz; 77double tsc_tweak = 1.0; |
81unsigned int show_pkg; 82unsigned int show_core; 83unsigned int show_cpu; | |
84unsigned int show_pkg_only; 85unsigned int show_core_only; 86char *output_buffer, *outp; 87unsigned int do_rapl; 88unsigned int do_dts; 89unsigned int do_ptm; | 78unsigned int show_pkg_only; 79unsigned int show_core_only; 80char *output_buffer, *outp; 81unsigned int do_rapl; 82unsigned int do_dts; 83unsigned int do_ptm; |
90unsigned int do_gfx_rc6_ms; | |
91unsigned long long gfx_cur_rc6_ms; | 84unsigned long long gfx_cur_rc6_ms; |
92unsigned int do_gfx_mhz; | |
93unsigned int gfx_cur_mhz; 94unsigned int tcc_activation_temp; 95unsigned int tcc_activation_temp_override; 96double rapl_power_units, rapl_time_units; 97double rapl_dram_energy_units, rapl_energy_units; 98double rapl_joule_counter_range; 99unsigned int do_core_perf_limit_reasons; 100unsigned int do_gfx_perf_limit_reasons; --- 120 unchanged lines hidden (view full) --- 221 222struct msr_counter { 223 unsigned int msr_num; 224 char name[NAME_BYTES]; 225 unsigned int width; 226 enum counter_type type; 227 enum counter_format format; 228 struct msr_counter *next; | 85unsigned int gfx_cur_mhz; 86unsigned int tcc_activation_temp; 87unsigned int tcc_activation_temp_override; 88double rapl_power_units, rapl_time_units; 89double rapl_dram_energy_units, rapl_energy_units; 90double rapl_joule_counter_range; 91unsigned int do_core_perf_limit_reasons; 92unsigned int do_gfx_perf_limit_reasons; --- 120 unchanged lines hidden (view full) --- 213 214struct msr_counter { 215 unsigned int msr_num; 216 char name[NAME_BYTES]; 217 unsigned int width; 218 enum counter_type type; 219 enum counter_format format; 220 struct msr_counter *next; |
221 unsigned int flags; 222#define FLAGS_HIDE (1 << 0) 223#define FLAGS_SHOW (1 << 1) |
|
229}; 230 231struct sys_counters { 232 unsigned int added_thread_counters; 233 unsigned int added_core_counters; 234 unsigned int added_package_counters; 235 struct msr_counter *tp; 236 struct msr_counter *cp; --- 99 unchanged lines hidden (view full) --- 336 337 if (retval != sizeof *msr) 338 err(-1, "msr %d offset 0x%llx read failed", cpu, (unsigned long long)offset); 339 340 return 0; 341} 342 343/* | 224}; 225 226struct sys_counters { 227 unsigned int added_thread_counters; 228 unsigned int added_core_counters; 229 unsigned int added_package_counters; 230 struct msr_counter *tp; 231 struct msr_counter *cp; --- 99 unchanged lines hidden (view full) --- 331 332 if (retval != sizeof *msr) 333 err(-1, "msr %d offset 0x%llx read failed", cpu, (unsigned long long)offset); 334 335 return 0; 336} 337 338/* |
344 * Example Format w/ field column widths: 345 * 346 * Package Core CPU Avg_MHz Bzy_MHz TSC_MHz IRQ SMI Busy% CPU_%c1 CPU_%c3 CPU_%c6 CPU_%c7 ThreadC CoreTmp CoreCnt PkgTmp GFXMHz Pkg%pc2 Pkg%pc3 Pkg%pc6 Pkg%pc7 PkgWatt CorWatt GFXWatt PkgCnt 347 * 12345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678 | 339 * Each string in this array is compared in --show and --hide cmdline. 340 * Thus, strings that are proper sub-sets must follow their more specific peers. |
348 */ | 341 */ |
342struct msr_counter bic[] = { 343 { 0x0, "Package" }, 344 { 0x0, "Avg_MHz" }, 345 { 0x0, "Bzy_MHz" }, 346 { 0x0, "TSC_MHz" }, 347 { 0x0, "IRQ" }, 348 { 0x0, "SMI", 32, 0, FORMAT_DELTA, NULL}, 349 { 0x0, "Busy%" }, 350 { 0x0, "CPU%c1" }, 351 { 0x0, "CPU%c3" }, 352 { 0x0, "CPU%c6" }, 353 { 0x0, "CPU%c7" }, 354 { 0x0, "ThreadC" }, 355 { 0x0, "CoreTmp" }, 356 { 0x0, "CoreCnt" }, 357 { 0x0, "PkgTmp" }, 358 { 0x0, "GFX%rc6" }, 359 { 0x0, "GFXMHz" }, 360 { 0x0, "Pkg%pc2" }, 361 { 0x0, "Pkg%pc3" }, 362 { 0x0, "Pkg%pc6" }, 363 { 0x0, "Pkg%pc7" }, 364 { 0x0, "PkgWatt" }, 365 { 0x0, "CorWatt" }, 366 { 0x0, "GFXWatt" }, 367 { 0x0, "PkgCnt" }, 368 { 0x0, "RAMWatt" }, 369 { 0x0, "PKG_%" }, 370 { 0x0, "RAM_%" }, 371 { 0x0, "Pkg_J" }, 372 { 0x0, "Cor_J" }, 373 { 0x0, "GFX_J" }, 374 { 0x0, "RAM_J" }, 375 { 0x0, "Core" }, 376 { 0x0, "CPU" }, 377}; |
|
349 | 378 |
379#define MAX_BIC (sizeof(bic) / sizeof(struct msr_counter)) 380#define BIC_Package (1ULL << 0) 381#define BIC_Avg_MHz (1ULL << 1) 382#define BIC_Bzy_MHz (1ULL << 2) 383#define BIC_TSC_MHz (1ULL << 3) 384#define BIC_IRQ (1ULL << 4) 385#define BIC_SMI (1ULL << 5) 386#define BIC_Busy (1ULL << 6) 387#define BIC_CPU_c1 (1ULL << 7) 388#define BIC_CPU_c3 (1ULL << 8) 389#define BIC_CPU_c6 (1ULL << 9) 390#define BIC_CPU_c7 (1ULL << 10) 391#define BIC_ThreadC (1ULL << 11) 392#define BIC_CoreTmp (1ULL << 12) 393#define BIC_CoreCnt (1ULL << 13) 394#define BIC_PkgTmp (1ULL << 14) 395#define BIC_GFX_rc6 (1ULL << 15) 396#define BIC_GFXMHz (1ULL << 16) 397#define BIC_Pkgpc2 (1ULL << 17) 398#define BIC_Pkgpc3 (1ULL << 18) 399#define BIC_Pkgpc6 (1ULL << 19) 400#define BIC_Pkgpc7 (1ULL << 20) 401#define BIC_PkgWatt (1ULL << 21) 402#define BIC_CorWatt (1ULL << 22) 403#define BIC_GFXWatt (1ULL << 23) 404#define BIC_PkgCnt (1ULL << 24) 405#define BIC_RAMWatt (1ULL << 27) 406#define BIC_PKG__ (1ULL << 28) 407#define BIC_RAM__ (1ULL << 29) 408#define BIC_Pkg_J (1ULL << 30) 409#define BIC_Cor_J (1ULL << 31) 410#define BIC_GFX_J (1ULL << 30) 411#define BIC_RAM_J (1ULL << 31) 412#define BIC_Core (1ULL << 32) 413#define BIC_CPU (1ULL << 33) 414 415unsigned long long bic_enabled = 0xFFFFFFFFFFFFFFFFULL; 416unsigned long long bic_present; 417 418#define DO_BIC(COUNTER_NAME) (bic_enabled & bic_present & COUNTER_NAME) 419#define BIC_PRESENT(COUNTER_BIT) (bic_present |= COUNTER_BIT) 420 421/* 422 * bic_lookup 423 * for all the strings in comma separate name_list, 424 * set the approprate bit in return value. 425 */ 426unsigned long long bic_lookup(char *name_list) 427{ 428 int i; 429 unsigned long long retval = 0; 430 431 while (name_list) { 432 char *comma; 433 434 comma = strchr(name_list, ','); 435 436 if (comma) 437 *comma = '\0'; 438 439 for (i = 0; i < MAX_BIC; ++i) { 440 if (!strcmp(name_list, bic[i].name)) { 441 retval |= (1ULL << i); 442 break; 443 } 444 } 445 if (i == MAX_BIC) { 446 fprintf(stderr, "Invalid counter name: %s\n", name_list); 447 exit(-1); 448 } 449 450 name_list = comma; 451 if (name_list) 452 name_list++; 453 454 } 455 return retval; 456} 457 |
|
350void print_header(void) 351{ 352 struct msr_counter *mp; 353 | 458void print_header(void) 459{ 460 struct msr_counter *mp; 461 |
354 if (show_pkg) | 462 if (DO_BIC(BIC_Package)) |
355 outp += sprintf(outp, "\tPackage"); | 463 outp += sprintf(outp, "\tPackage"); |
356 if (show_core) | 464 if (DO_BIC(BIC_Core)) |
357 outp += sprintf(outp, "\tCore"); | 465 outp += sprintf(outp, "\tCore"); |
358 if (show_cpu) | 466 if (DO_BIC(BIC_CPU)) |
359 outp += sprintf(outp, "\tCPU"); | 467 outp += sprintf(outp, "\tCPU"); |
360 if (has_aperf) | 468 if (DO_BIC(BIC_Avg_MHz)) |
361 outp += sprintf(outp, "\tAvg_MHz"); | 469 outp += sprintf(outp, "\tAvg_MHz"); |
362 if (has_aperf) | 470 if (DO_BIC(BIC_Busy)) |
363 outp += sprintf(outp, "\tBusy%%"); | 471 outp += sprintf(outp, "\tBusy%%"); |
364 if (has_aperf) | 472 if (DO_BIC(BIC_Bzy_MHz)) |
365 outp += sprintf(outp, "\tBzy_MHz"); | 473 outp += sprintf(outp, "\tBzy_MHz"); |
366 outp += sprintf(outp, "\tTSC_MHz"); | 474 if (DO_BIC(BIC_TSC_MHz)) 475 outp += sprintf(outp, "\tTSC_MHz"); |
367 368 if (!debug) 369 goto done; 370 | 476 477 if (!debug) 478 goto done; 479 |
371 if (do_irq) | 480 if (DO_BIC(BIC_IRQ)) |
372 outp += sprintf(outp, "\tIRQ"); | 481 outp += sprintf(outp, "\tIRQ"); |
373 if (do_smi) | 482 if (DO_BIC(BIC_SMI)) |
374 outp += sprintf(outp, "\tSMI"); 375 | 483 outp += sprintf(outp, "\tSMI"); 484 |
376 if (do_nhm_cstates) | 485 if (DO_BIC(BIC_CPU_c1)) |
377 outp += sprintf(outp, "\tCPU%%c1"); 378 379 for (mp = sys.tp; mp; mp = mp->next) { 380 if (mp->format == FORMAT_RAW) { 381 if (mp->width == 64) 382 outp += sprintf(outp, "\t%18.18s", mp->name); 383 else 384 outp += sprintf(outp, "\t%10.10s", mp->name); 385 } else { 386 outp += sprintf(outp, "\t%-7.7s", mp->name); 387 } 388 } 389 | 486 outp += sprintf(outp, "\tCPU%%c1"); 487 488 for (mp = sys.tp; mp; mp = mp->next) { 489 if (mp->format == FORMAT_RAW) { 490 if (mp->width == 64) 491 outp += sprintf(outp, "\t%18.18s", mp->name); 492 else 493 outp += sprintf(outp, "\t%10.10s", mp->name); 494 } else { 495 outp += sprintf(outp, "\t%-7.7s", mp->name); 496 } 497 } 498 |
390 if (do_nhm_cstates && !do_slm_cstates && !do_knl_cstates) | 499 if (DO_BIC(BIC_CPU_c3) && !do_slm_cstates && !do_knl_cstates) |
391 outp += sprintf(outp, "\tCPU%%c3"); | 500 outp += sprintf(outp, "\tCPU%%c3"); |
392 if (do_nhm_cstates) | 501 if (DO_BIC(BIC_CPU_c6)) |
393 outp += sprintf(outp, "\tCPU%%c6"); | 502 outp += sprintf(outp, "\tCPU%%c6"); |
394 if (do_snb_cstates) | 503 if (DO_BIC(BIC_CPU_c7)) |
395 outp += sprintf(outp, "\tCPU%%c7"); 396 397 | 504 outp += sprintf(outp, "\tCPU%%c7"); 505 506 |
398 if (do_dts) | 507 if (DO_BIC(BIC_CoreTmp)) |
399 outp += sprintf(outp, "\tCoreTmp"); 400 401 for (mp = sys.cp; mp; mp = mp->next) { 402 if (mp->format == FORMAT_RAW) { 403 if (mp->width == 64) 404 outp += sprintf(outp, "\t%18.18s", mp->name); 405 else 406 outp += sprintf(outp, "\t%10.10s", mp->name); 407 } else { 408 outp += sprintf(outp, "\t%-7.7s", mp->name); 409 } 410 } 411 | 508 outp += sprintf(outp, "\tCoreTmp"); 509 510 for (mp = sys.cp; mp; mp = mp->next) { 511 if (mp->format == FORMAT_RAW) { 512 if (mp->width == 64) 513 outp += sprintf(outp, "\t%18.18s", mp->name); 514 else 515 outp += sprintf(outp, "\t%10.10s", mp->name); 516 } else { 517 outp += sprintf(outp, "\t%-7.7s", mp->name); 518 } 519 } 520 |
412 if (do_ptm) | 521 if (DO_BIC(BIC_PkgTmp)) |
413 outp += sprintf(outp, "\tPkgTmp"); 414 | 522 outp += sprintf(outp, "\tPkgTmp"); 523 |
415 if (do_gfx_rc6_ms) | 524 if (DO_BIC(BIC_GFX_rc6)) |
416 outp += sprintf(outp, "\tGFX%%rc6"); 417 | 525 outp += sprintf(outp, "\tGFX%%rc6"); 526 |
418 if (do_gfx_mhz) | 527 if (DO_BIC(BIC_GFXMHz)) |
419 outp += sprintf(outp, "\tGFXMHz"); 420 421 if (do_skl_residency) { 422 outp += sprintf(outp, "\tTotl%%C0"); 423 outp += sprintf(outp, "\tAny%%C0"); 424 outp += sprintf(outp, "\tGFX%%C0"); 425 outp += sprintf(outp, "\tCPUGFX%%"); 426 } --- 8 unchanged lines hidden (view full) --- 435 outp += sprintf(outp, "\tPkg%%pc7"); 436 if (do_c8_c9_c10) { 437 outp += sprintf(outp, "\tPkg%%pc8"); 438 outp += sprintf(outp, "\tPkg%%pc9"); 439 outp += sprintf(outp, "\tPk%%pc10"); 440 } 441 442 if (do_rapl && !rapl_joules) { | 528 outp += sprintf(outp, "\tGFXMHz"); 529 530 if (do_skl_residency) { 531 outp += sprintf(outp, "\tTotl%%C0"); 532 outp += sprintf(outp, "\tAny%%C0"); 533 outp += sprintf(outp, "\tGFX%%C0"); 534 outp += sprintf(outp, "\tCPUGFX%%"); 535 } --- 8 unchanged lines hidden (view full) --- 544 outp += sprintf(outp, "\tPkg%%pc7"); 545 if (do_c8_c9_c10) { 546 outp += sprintf(outp, "\tPkg%%pc8"); 547 outp += sprintf(outp, "\tPkg%%pc9"); 548 outp += sprintf(outp, "\tPk%%pc10"); 549 } 550 551 if (do_rapl && !rapl_joules) { |
443 if (do_rapl & RAPL_PKG) | 552 if (DO_BIC(BIC_PkgWatt)) |
444 outp += sprintf(outp, "\tPkgWatt"); | 553 outp += sprintf(outp, "\tPkgWatt"); |
445 if (do_rapl & RAPL_CORES_ENERGY_STATUS) | 554 if (DO_BIC(BIC_CorWatt)) |
446 outp += sprintf(outp, "\tCorWatt"); | 555 outp += sprintf(outp, "\tCorWatt"); |
447 if (do_rapl & RAPL_GFX) | 556 if (DO_BIC(BIC_GFXWatt)) |
448 outp += sprintf(outp, "\tGFXWatt"); | 557 outp += sprintf(outp, "\tGFXWatt"); |
449 if (do_rapl & RAPL_DRAM) | 558 if (DO_BIC(BIC_RAMWatt)) |
450 outp += sprintf(outp, "\tRAMWatt"); | 559 outp += sprintf(outp, "\tRAMWatt"); |
451 if (do_rapl & RAPL_PKG_PERF_STATUS) | 560 if (DO_BIC(BIC_PKG__)) |
452 outp += sprintf(outp, "\tPKG_%%"); | 561 outp += sprintf(outp, "\tPKG_%%"); |
453 if (do_rapl & RAPL_DRAM_PERF_STATUS) | 562 if (DO_BIC(BIC_RAM__)) |
454 outp += sprintf(outp, "\tRAM_%%"); 455 } else if (do_rapl && rapl_joules) { | 563 outp += sprintf(outp, "\tRAM_%%"); 564 } else if (do_rapl && rapl_joules) { |
456 if (do_rapl & RAPL_PKG) | 565 if (DO_BIC(BIC_Pkg_J)) |
457 outp += sprintf(outp, "\tPkg_J"); | 566 outp += sprintf(outp, "\tPkg_J"); |
458 if (do_rapl & RAPL_CORES_ENERGY_STATUS) | 567 if (DO_BIC(BIC_Cor_J)) |
459 outp += sprintf(outp, "\tCor_J"); | 568 outp += sprintf(outp, "\tCor_J"); |
460 if (do_rapl & RAPL_GFX) | 569 if (DO_BIC(BIC_GFX_J)) |
461 outp += sprintf(outp, "\tGFX_J"); | 570 outp += sprintf(outp, "\tGFX_J"); |
462 if (do_rapl & RAPL_DRAM) | 571 if (DO_BIC(BIC_RAM_J)) |
463 outp += sprintf(outp, "\tRAM_J"); | 572 outp += sprintf(outp, "\tRAM_J"); |
464 if (do_rapl & RAPL_PKG_PERF_STATUS) | 573 if (DO_BIC(BIC_PKG__)) |
465 outp += sprintf(outp, "\tPKG_%%"); | 574 outp += sprintf(outp, "\tPKG_%%"); |
466 if (do_rapl & RAPL_DRAM_PERF_STATUS) | 575 if (DO_BIC(BIC_RAM__)) |
467 outp += sprintf(outp, "\tRAM_%%"); 468 } 469 for (mp = sys.pp; mp; mp = mp->next) { 470 if (mp->format == FORMAT_RAW) { 471 if (mp->width == 64) 472 outp += sprintf(outp, "\t%18.18s", mp->name); 473 else 474 outp += sprintf(outp, "\t%10.10s", mp->name); --- 17 unchanged lines hidden (view full) --- 492 if (t) { 493 outp += sprintf(outp, "CPU: %d flags 0x%x\n", 494 t->cpu_id, t->flags); 495 outp += sprintf(outp, "TSC: %016llX\n", t->tsc); 496 outp += sprintf(outp, "aperf: %016llX\n", t->aperf); 497 outp += sprintf(outp, "mperf: %016llX\n", t->mperf); 498 outp += sprintf(outp, "c1: %016llX\n", t->c1); 499 | 576 outp += sprintf(outp, "\tRAM_%%"); 577 } 578 for (mp = sys.pp; mp; mp = mp->next) { 579 if (mp->format == FORMAT_RAW) { 580 if (mp->width == 64) 581 outp += sprintf(outp, "\t%18.18s", mp->name); 582 else 583 outp += sprintf(outp, "\t%10.10s", mp->name); --- 17 unchanged lines hidden (view full) --- 601 if (t) { 602 outp += sprintf(outp, "CPU: %d flags 0x%x\n", 603 t->cpu_id, t->flags); 604 outp += sprintf(outp, "TSC: %016llX\n", t->tsc); 605 outp += sprintf(outp, "aperf: %016llX\n", t->aperf); 606 outp += sprintf(outp, "mperf: %016llX\n", t->mperf); 607 outp += sprintf(outp, "c1: %016llX\n", t->c1); 608 |
500 if (do_irq) | 609 if (DO_BIC(BIC_IRQ)) |
501 outp += sprintf(outp, "IRQ: %08X\n", t->irq_count); | 610 outp += sprintf(outp, "IRQ: %08X\n", t->irq_count); |
502 if (do_smi) | 611 if (DO_BIC(BIC_SMI)) |
503 outp += sprintf(outp, "SMI: %08X\n", t->smi_count); 504 505 for (i = 0, mp = sys.tp; mp; i++, mp = mp->next) { 506 outp += sprintf(outp, "tADDED [%d] msr0x%x: %08llX\n", 507 i, mp->msr_num, t->counter[i]); 508 } 509 } 510 --- 67 unchanged lines hidden (view full) --- 578 /* if showing only 1st thread in pkg and this isn't one, bail out */ 579 if (show_pkg_only && !(t->flags & CPU_IS_FIRST_CORE_IN_PACKAGE)) 580 return 0; 581 582 interval_float = tv_delta.tv_sec + tv_delta.tv_usec/1000000.0; 583 584 /* topo columns, print blanks on 1st (average) line */ 585 if (t == &average.threads) { | 612 outp += sprintf(outp, "SMI: %08X\n", t->smi_count); 613 614 for (i = 0, mp = sys.tp; mp; i++, mp = mp->next) { 615 outp += sprintf(outp, "tADDED [%d] msr0x%x: %08llX\n", 616 i, mp->msr_num, t->counter[i]); 617 } 618 } 619 --- 67 unchanged lines hidden (view full) --- 687 /* if showing only 1st thread in pkg and this isn't one, bail out */ 688 if (show_pkg_only && !(t->flags & CPU_IS_FIRST_CORE_IN_PACKAGE)) 689 return 0; 690 691 interval_float = tv_delta.tv_sec + tv_delta.tv_usec/1000000.0; 692 693 /* topo columns, print blanks on 1st (average) line */ 694 if (t == &average.threads) { |
586 if (show_pkg) | 695 if (DO_BIC(BIC_Package)) |
587 outp += sprintf(outp, "\t-"); | 696 outp += sprintf(outp, "\t-"); |
588 if (show_core) | 697 if (DO_BIC(BIC_Core)) |
589 outp += sprintf(outp, "\t-"); | 698 outp += sprintf(outp, "\t-"); |
590 if (show_cpu) | 699 if (DO_BIC(BIC_CPU)) |
591 outp += sprintf(outp, "\t-"); 592 } else { | 700 outp += sprintf(outp, "\t-"); 701 } else { |
593 if (show_pkg) { | 702 if (DO_BIC(BIC_Package)) { |
594 if (p) 595 outp += sprintf(outp, "\t%d", p->package_id); 596 else 597 outp += sprintf(outp, "\t-"); 598 } | 703 if (p) 704 outp += sprintf(outp, "\t%d", p->package_id); 705 else 706 outp += sprintf(outp, "\t-"); 707 } |
599 if (show_core) { | 708 if (DO_BIC(BIC_Core)) { |
600 if (c) 601 outp += sprintf(outp, "\t%d", c->core_id); 602 else 603 outp += sprintf(outp, "\t-"); 604 } | 709 if (c) 710 outp += sprintf(outp, "\t%d", c->core_id); 711 else 712 outp += sprintf(outp, "\t-"); 713 } |
605 if (show_cpu) | 714 if (DO_BIC(BIC_CPU)) |
606 outp += sprintf(outp, "\t%d", t->cpu_id); 607 } 608 | 715 outp += sprintf(outp, "\t%d", t->cpu_id); 716 } 717 |
609 /* Avg_MHz */ 610 if (has_aperf) | 718 if (DO_BIC(BIC_Avg_MHz)) |
611 outp += sprintf(outp, "\t%.0f", 612 1.0 / units * t->aperf / interval_float); 613 | 719 outp += sprintf(outp, "\t%.0f", 720 1.0 / units * t->aperf / interval_float); 721 |
614 /* Busy% */ 615 if (has_aperf) | 722 if (DO_BIC(BIC_Busy)) |
616 outp += sprintf(outp, "\t%.2f", 100.0 * t->mperf/t->tsc/tsc_tweak); 617 | 723 outp += sprintf(outp, "\t%.2f", 100.0 * t->mperf/t->tsc/tsc_tweak); 724 |
618 /* Bzy_MHz */ 619 if (has_aperf) { | 725 if (DO_BIC(BIC_Bzy_MHz)) { |
620 if (has_base_hz) 621 outp += sprintf(outp, "\t%.0f", base_hz / units * t->aperf / t->mperf); 622 else 623 outp += sprintf(outp, "\t%.0f", 624 1.0 * t->tsc / units * t->aperf / t->mperf / interval_float); 625 } 626 | 726 if (has_base_hz) 727 outp += sprintf(outp, "\t%.0f", base_hz / units * t->aperf / t->mperf); 728 else 729 outp += sprintf(outp, "\t%.0f", 730 1.0 * t->tsc / units * t->aperf / t->mperf / interval_float); 731 } 732 |
627 /* TSC_MHz */ 628 outp += sprintf(outp, "\t%.0f", 1.0 * t->tsc/units/interval_float); | 733 if (DO_BIC(BIC_TSC_MHz)) 734 outp += sprintf(outp, "\t%.0f", 1.0 * t->tsc/units/interval_float); |
629 630 if (!debug) 631 goto done; 632 633 /* IRQ */ | 735 736 if (!debug) 737 goto done; 738 739 /* IRQ */ |
634 if (do_irq) | 740 if (DO_BIC(BIC_IRQ)) |
635 outp += sprintf(outp, "\t%d", t->irq_count); 636 637 /* SMI */ | 741 outp += sprintf(outp, "\t%d", t->irq_count); 742 743 /* SMI */ |
638 if (do_smi) | 744 if (DO_BIC(BIC_SMI)) |
639 outp += sprintf(outp, "\t%d", t->smi_count); 640 641 /* C1 */ | 745 outp += sprintf(outp, "\t%d", t->smi_count); 746 747 /* C1 */ |
642 if (do_nhm_cstates) | 748 if (DO_BIC(BIC_CPU_c1)) |
643 outp += sprintf(outp, "\t%.2f", 100.0 * t->c1/t->tsc); 644 645 /* Added counters */ 646 for (i = 0, mp = sys.tp; mp; i++, mp = mp->next) { 647 if (mp->format == FORMAT_RAW) { 648 if (mp->width == 32) 649 outp += sprintf(outp, "\t0x%08lx", (unsigned long) t->counter[i]); 650 else --- 4 unchanged lines hidden (view full) --- 655 outp += sprintf(outp, "\t%.2f", 100.0 * t->counter[i]/t->tsc); 656 } 657 } 658 659 /* print per-core data only for 1st thread in core */ 660 if (!(t->flags & CPU_IS_FIRST_THREAD_IN_CORE)) 661 goto done; 662 | 749 outp += sprintf(outp, "\t%.2f", 100.0 * t->c1/t->tsc); 750 751 /* Added counters */ 752 for (i = 0, mp = sys.tp; mp; i++, mp = mp->next) { 753 if (mp->format == FORMAT_RAW) { 754 if (mp->width == 32) 755 outp += sprintf(outp, "\t0x%08lx", (unsigned long) t->counter[i]); 756 else --- 4 unchanged lines hidden (view full) --- 761 outp += sprintf(outp, "\t%.2f", 100.0 * t->counter[i]/t->tsc); 762 } 763 } 764 765 /* print per-core data only for 1st thread in core */ 766 if (!(t->flags & CPU_IS_FIRST_THREAD_IN_CORE)) 767 goto done; 768 |
663 if (do_nhm_cstates && !do_slm_cstates && !do_knl_cstates) | 769 if (DO_BIC(BIC_CPU_c3) && !do_slm_cstates && !do_knl_cstates) |
664 outp += sprintf(outp, "\t%.2f", 100.0 * c->c3/t->tsc); | 770 outp += sprintf(outp, "\t%.2f", 100.0 * c->c3/t->tsc); |
665 if (do_nhm_cstates) | 771 if (DO_BIC(BIC_CPU_c6)) |
666 outp += sprintf(outp, "\t%.2f", 100.0 * c->c6/t->tsc); | 772 outp += sprintf(outp, "\t%.2f", 100.0 * c->c6/t->tsc); |
667 if (do_snb_cstates) | 773 if (DO_BIC(BIC_CPU_c7)) |
668 outp += sprintf(outp, "\t%.2f", 100.0 * c->c7/t->tsc); 669 | 774 outp += sprintf(outp, "\t%.2f", 100.0 * c->c7/t->tsc); 775 |
670 671 if (do_dts) | 776 if (DO_BIC(BIC_CoreTmp)) |
672 outp += sprintf(outp, "\t%d", c->core_temp_c); 673 674 for (i = 0, mp = sys.cp; mp; i++, mp = mp->next) { 675 if (mp->format == FORMAT_RAW) { 676 if (mp->width == 32) 677 outp += sprintf(outp, "\t0x%08lx", (unsigned long) c->counter[i]); 678 else 679 outp += sprintf(outp, "\t0x%016llx", c->counter[i]); --- 4 unchanged lines hidden (view full) --- 684 } 685 } 686 687 /* print per-package data only for 1st core in package */ 688 if (!(t->flags & CPU_IS_FIRST_CORE_IN_PACKAGE)) 689 goto done; 690 691 /* PkgTmp */ | 777 outp += sprintf(outp, "\t%d", c->core_temp_c); 778 779 for (i = 0, mp = sys.cp; mp; i++, mp = mp->next) { 780 if (mp->format == FORMAT_RAW) { 781 if (mp->width == 32) 782 outp += sprintf(outp, "\t0x%08lx", (unsigned long) c->counter[i]); 783 else 784 outp += sprintf(outp, "\t0x%016llx", c->counter[i]); --- 4 unchanged lines hidden (view full) --- 789 } 790 } 791 792 /* print per-package data only for 1st core in package */ 793 if (!(t->flags & CPU_IS_FIRST_CORE_IN_PACKAGE)) 794 goto done; 795 796 /* PkgTmp */ |
692 if (do_ptm) | 797 if (DO_BIC(BIC_PkgTmp)) |
693 outp += sprintf(outp, "\t%d", p->pkg_temp_c); 694 695 /* GFXrc6 */ | 798 outp += sprintf(outp, "\t%d", p->pkg_temp_c); 799 800 /* GFXrc6 */ |
696 if (do_gfx_rc6_ms) { | 801 if (DO_BIC(BIC_GFX_rc6)) { |
697 if (p->gfx_rc6_ms == -1) { /* detect GFX counter reset */ 698 outp += sprintf(outp, "\t**.**"); 699 } else { 700 outp += sprintf(outp, "\t%.2f", 701 p->gfx_rc6_ms / 10.0 / interval_float); 702 } 703 } 704 705 /* GFXMHz */ | 802 if (p->gfx_rc6_ms == -1) { /* detect GFX counter reset */ 803 outp += sprintf(outp, "\t**.**"); 804 } else { 805 outp += sprintf(outp, "\t%.2f", 806 p->gfx_rc6_ms / 10.0 / interval_float); 807 } 808 } 809 810 /* GFXMHz */ |
706 if (do_gfx_mhz) | 811 if (DO_BIC(BIC_GFXMHz)) |
707 outp += sprintf(outp, "\t%d", p->gfx_mhz); 708 709 /* Totl%C0, Any%C0 GFX%C0 CPUGFX% */ 710 if (do_skl_residency) { 711 outp += sprintf(outp, "\t%.2f", 100.0 * p->pkg_wtd_core_c0/t->tsc); 712 outp += sprintf(outp, "\t%.2f", 100.0 * p->pkg_any_core_c0/t->tsc); 713 outp += sprintf(outp, "\t%.2f", 100.0 * p->pkg_any_gfxe_c0/t->tsc); 714 outp += sprintf(outp, "\t%.2f", 100.0 * p->pkg_both_core_gfxe_c0/t->tsc); --- 17 unchanged lines hidden (view full) --- 732 * If measurement interval exceeds minimum RAPL Joule Counter range, 733 * indicate that results are suspect by printing "**" in fraction place. 734 */ 735 if (interval_float < rapl_joule_counter_range) 736 fmt8 = "\t%.2f"; 737 else 738 fmt8 = "%6.0f**"; 739 | 812 outp += sprintf(outp, "\t%d", p->gfx_mhz); 813 814 /* Totl%C0, Any%C0 GFX%C0 CPUGFX% */ 815 if (do_skl_residency) { 816 outp += sprintf(outp, "\t%.2f", 100.0 * p->pkg_wtd_core_c0/t->tsc); 817 outp += sprintf(outp, "\t%.2f", 100.0 * p->pkg_any_core_c0/t->tsc); 818 outp += sprintf(outp, "\t%.2f", 100.0 * p->pkg_any_gfxe_c0/t->tsc); 819 outp += sprintf(outp, "\t%.2f", 100.0 * p->pkg_both_core_gfxe_c0/t->tsc); --- 17 unchanged lines hidden (view full) --- 837 * If measurement interval exceeds minimum RAPL Joule Counter range, 838 * indicate that results are suspect by printing "**" in fraction place. 839 */ 840 if (interval_float < rapl_joule_counter_range) 841 fmt8 = "\t%.2f"; 842 else 843 fmt8 = "%6.0f**"; 844 |
740 if (do_rapl && !rapl_joules) { 741 if (do_rapl & RAPL_PKG) 742 outp += sprintf(outp, fmt8, p->energy_pkg * rapl_energy_units / interval_float); 743 if (do_rapl & RAPL_CORES_ENERGY_STATUS) 744 outp += sprintf(outp, fmt8, p->energy_cores * rapl_energy_units / interval_float); 745 if (do_rapl & RAPL_GFX) 746 outp += sprintf(outp, fmt8, p->energy_gfx * rapl_energy_units / interval_float); 747 if (do_rapl & RAPL_DRAM) 748 outp += sprintf(outp, fmt8, p->energy_dram * rapl_dram_energy_units / interval_float); 749 if (do_rapl & RAPL_PKG_PERF_STATUS) 750 outp += sprintf(outp, fmt8, 100.0 * p->rapl_pkg_perf_status * rapl_time_units / interval_float); 751 if (do_rapl & RAPL_DRAM_PERF_STATUS) 752 outp += sprintf(outp, fmt8, 100.0 * p->rapl_dram_perf_status * rapl_time_units / interval_float); 753 } else if (do_rapl && rapl_joules) { 754 if (do_rapl & RAPL_PKG) 755 outp += sprintf(outp, fmt8, 756 p->energy_pkg * rapl_energy_units); 757 if (do_rapl & RAPL_CORES) 758 outp += sprintf(outp, fmt8, 759 p->energy_cores * rapl_energy_units); 760 if (do_rapl & RAPL_GFX) 761 outp += sprintf(outp, fmt8, 762 p->energy_gfx * rapl_energy_units); 763 if (do_rapl & RAPL_DRAM) 764 outp += sprintf(outp, fmt8, 765 p->energy_dram * rapl_dram_energy_units); 766 if (do_rapl & RAPL_PKG_PERF_STATUS) 767 outp += sprintf(outp, fmt8, 100.0 * p->rapl_pkg_perf_status * rapl_time_units / interval_float); 768 if (do_rapl & RAPL_DRAM_PERF_STATUS) 769 outp += sprintf(outp, fmt8, 100.0 * p->rapl_dram_perf_status * rapl_time_units / interval_float); 770 } | 845 if (DO_BIC(BIC_PkgWatt)) 846 outp += sprintf(outp, fmt8, p->energy_pkg * rapl_energy_units / interval_float); 847 if (DO_BIC(BIC_CorWatt)) 848 outp += sprintf(outp, fmt8, p->energy_cores * rapl_energy_units / interval_float); 849 if (DO_BIC(BIC_GFXWatt)) 850 outp += sprintf(outp, fmt8, p->energy_gfx * rapl_energy_units / interval_float); 851 if (DO_BIC(BIC_RAMWatt)) 852 outp += sprintf(outp, fmt8, p->energy_dram * rapl_dram_energy_units / interval_float); 853 if (DO_BIC(BIC_Pkg_J)) 854 outp += sprintf(outp, fmt8, p->energy_pkg * rapl_energy_units); 855 if (DO_BIC(BIC_Cor_J)) 856 outp += sprintf(outp, fmt8, p->energy_cores * rapl_energy_units); 857 if (DO_BIC(BIC_GFX_J)) 858 outp += sprintf(outp, fmt8, p->energy_gfx * rapl_energy_units); 859 if (DO_BIC(BIC_RAM_J)) 860 outp += sprintf(outp, fmt8, p->energy_dram * rapl_dram_energy_units); 861 if (DO_BIC(BIC_PKG__)) 862 outp += sprintf(outp, fmt8, 100.0 * p->rapl_pkg_perf_status * rapl_time_units / interval_float); 863 if (DO_BIC(BIC_RAM__)) 864 outp += sprintf(outp, fmt8, 100.0 * p->rapl_dram_perf_status * rapl_time_units / interval_float); 865 |
771 for (i = 0, mp = sys.pp; mp; i++, mp = mp->next) { 772 if (mp->format == FORMAT_RAW) { 773 if (mp->width == 32) 774 outp += sprintf(outp, "\t0x%08lx", (unsigned long) p->counter[i]); 775 else 776 outp += sprintf(outp, "\t0x%016llx", p->counter[i]); 777 } else if (mp->format == FORMAT_DELTA) { 778 outp += sprintf(outp, "\t%lld", p->counter[i]); --- 137 unchanged lines hidden (view full) --- 916 /* check for TSC < 1 Mcycles over interval */ 917 if (old->tsc < (1000 * 1000)) 918 errx(-3, "Insanely slow TSC rate, TSC stops in idle?\n" 919 "You can disable all c-states by booting with \"idle=poll\"\n" 920 "or just the deep ones with \"processor.max_cstate=1\""); 921 922 old->c1 = new->c1 - old->c1; 923 | 866 for (i = 0, mp = sys.pp; mp; i++, mp = mp->next) { 867 if (mp->format == FORMAT_RAW) { 868 if (mp->width == 32) 869 outp += sprintf(outp, "\t0x%08lx", (unsigned long) p->counter[i]); 870 else 871 outp += sprintf(outp, "\t0x%016llx", p->counter[i]); 872 } else if (mp->format == FORMAT_DELTA) { 873 outp += sprintf(outp, "\t%lld", p->counter[i]); --- 137 unchanged lines hidden (view full) --- 1011 /* check for TSC < 1 Mcycles over interval */ 1012 if (old->tsc < (1000 * 1000)) 1013 errx(-3, "Insanely slow TSC rate, TSC stops in idle?\n" 1014 "You can disable all c-states by booting with \"idle=poll\"\n" 1015 "or just the deep ones with \"processor.max_cstate=1\""); 1016 1017 old->c1 = new->c1 - old->c1; 1018 |
924 if (has_aperf) { | 1019 if (DO_BIC(BIC_Avg_MHz) || DO_BIC(BIC_Busy) || DO_BIC(BIC_Bzy_MHz)) { |
925 if ((new->aperf > old->aperf) && (new->mperf > old->mperf)) { 926 old->aperf = new->aperf - old->aperf; 927 old->mperf = new->mperf - old->mperf; 928 } else { 929 return -1; 930 } 931 } 932 --- 19 unchanged lines hidden (view full) --- 952 } 953 954 if (old->mperf == 0) { 955 if (debug > 1) 956 fprintf(outf, "cpu%d MPERF 0!\n", old->cpu_id); 957 old->mperf = 1; /* divide by 0 protection */ 958 } 959 | 1020 if ((new->aperf > old->aperf) && (new->mperf > old->mperf)) { 1021 old->aperf = new->aperf - old->aperf; 1022 old->mperf = new->mperf - old->mperf; 1023 } else { 1024 return -1; 1025 } 1026 } 1027 --- 19 unchanged lines hidden (view full) --- 1047 } 1048 1049 if (old->mperf == 0) { 1050 if (debug > 1) 1051 fprintf(outf, "cpu%d MPERF 0!\n", old->cpu_id); 1052 old->mperf = 1; /* divide by 0 protection */ 1053 } 1054 |
960 if (do_irq) | 1055 if (DO_BIC(BIC_IRQ)) |
961 old->irq_count = new->irq_count - old->irq_count; 962 | 1056 old->irq_count = new->irq_count - old->irq_count; 1057 |
963 if (do_smi) | 1058 if (DO_BIC(BIC_SMI)) |
964 old->smi_count = new->smi_count - old->smi_count; 965 966 for (i = 0, mp = sys.tp; mp; i++, mp = mp->next) { 967 if (mp->format == FORMAT_RAW) 968 old->counter[i] = new->counter[i]; 969 else 970 old->counter[i] = new->counter[i] - old->counter[i]; 971 } --- 240 unchanged lines hidden (view full) --- 1212 if (cpu_migrate(cpu)) { 1213 fprintf(outf, "Could not migrate to CPU %d\n", cpu); 1214 return -1; 1215 } 1216 1217retry: 1218 t->tsc = rdtsc(); /* we are running on local CPU of interest */ 1219 | 1059 old->smi_count = new->smi_count - old->smi_count; 1060 1061 for (i = 0, mp = sys.tp; mp; i++, mp = mp->next) { 1062 if (mp->format == FORMAT_RAW) 1063 old->counter[i] = new->counter[i]; 1064 else 1065 old->counter[i] = new->counter[i] - old->counter[i]; 1066 } --- 240 unchanged lines hidden (view full) --- 1307 if (cpu_migrate(cpu)) { 1308 fprintf(outf, "Could not migrate to CPU %d\n", cpu); 1309 return -1; 1310 } 1311 1312retry: 1313 t->tsc = rdtsc(); /* we are running on local CPU of interest */ 1314 |
1220 if (has_aperf) { | 1315 if (DO_BIC(BIC_Avg_MHz) || DO_BIC(BIC_Busy) || DO_BIC(BIC_Bzy_MHz)) { |
1221 unsigned long long tsc_before, tsc_between, tsc_after, aperf_time, mperf_time; 1222 1223 /* 1224 * The TSC, APERF and MPERF must be read together for 1225 * APERF/MPERF and MPERF/TSC to give accurate results. 1226 * 1227 * Unfortunately, APERF and MPERF are read by 1228 * individual system call, so delays may occur --- 39 unchanged lines hidden (view full) --- 1268 cpu, aperf_time, mperf_time); 1269 } 1270 aperf_mperf_retry_count = 0; 1271 1272 t->aperf = t->aperf * aperf_mperf_multiplier; 1273 t->mperf = t->mperf * aperf_mperf_multiplier; 1274 } 1275 | 1316 unsigned long long tsc_before, tsc_between, tsc_after, aperf_time, mperf_time; 1317 1318 /* 1319 * The TSC, APERF and MPERF must be read together for 1320 * APERF/MPERF and MPERF/TSC to give accurate results. 1321 * 1322 * Unfortunately, APERF and MPERF are read by 1323 * individual system call, so delays may occur --- 39 unchanged lines hidden (view full) --- 1363 cpu, aperf_time, mperf_time); 1364 } 1365 aperf_mperf_retry_count = 0; 1366 1367 t->aperf = t->aperf * aperf_mperf_multiplier; 1368 t->mperf = t->mperf * aperf_mperf_multiplier; 1369 } 1370 |
1276 if (do_irq) | 1371 if (DO_BIC(BIC_IRQ)) |
1277 t->irq_count = irqs_per_cpu[cpu]; | 1372 t->irq_count = irqs_per_cpu[cpu]; |
1278 if (do_smi) { | 1373 if (DO_BIC(BIC_SMI)) { |
1279 if (get_msr(cpu, MSR_SMI_COUNT, &msr)) 1280 return -5; 1281 t->smi_count = msr & 0xFFFFFFFF; 1282 } 1283 1284 if (use_c1_residency_msr) { 1285 if (get_msr(cpu, MSR_CORE_C1_RES, &t->c1)) 1286 return -6; --- 4 unchanged lines hidden (view full) --- 1291 return -10; 1292 } 1293 1294 1295 /* collect core counters only for 1st thread in core */ 1296 if (!(t->flags & CPU_IS_FIRST_THREAD_IN_CORE)) 1297 return 0; 1298 | 1374 if (get_msr(cpu, MSR_SMI_COUNT, &msr)) 1375 return -5; 1376 t->smi_count = msr & 0xFFFFFFFF; 1377 } 1378 1379 if (use_c1_residency_msr) { 1380 if (get_msr(cpu, MSR_CORE_C1_RES, &t->c1)) 1381 return -6; --- 4 unchanged lines hidden (view full) --- 1386 return -10; 1387 } 1388 1389 1390 /* collect core counters only for 1st thread in core */ 1391 if (!(t->flags & CPU_IS_FIRST_THREAD_IN_CORE)) 1392 return 0; 1393 |
1299 if (do_nhm_cstates && !do_slm_cstates && !do_knl_cstates) { | 1394 if (DO_BIC(BIC_CPU_c3) && !do_slm_cstates && !do_knl_cstates) { |
1300 if (get_msr(cpu, MSR_CORE_C3_RESIDENCY, &c->c3)) 1301 return -6; 1302 } 1303 | 1395 if (get_msr(cpu, MSR_CORE_C3_RESIDENCY, &c->c3)) 1396 return -6; 1397 } 1398 |
1304 if (do_nhm_cstates && !do_knl_cstates) { | 1399 if (DO_BIC(BIC_CPU_c6) && !do_knl_cstates) { |
1305 if (get_msr(cpu, MSR_CORE_C6_RESIDENCY, &c->c6)) 1306 return -7; 1307 } else if (do_knl_cstates) { 1308 if (get_msr(cpu, MSR_KNL_CORE_C6_RESIDENCY, &c->c6)) 1309 return -7; 1310 } 1311 | 1400 if (get_msr(cpu, MSR_CORE_C6_RESIDENCY, &c->c6)) 1401 return -7; 1402 } else if (do_knl_cstates) { 1403 if (get_msr(cpu, MSR_KNL_CORE_C6_RESIDENCY, &c->c6)) 1404 return -7; 1405 } 1406 |
1312 if (do_snb_cstates) | 1407 if (DO_BIC(BIC_CPU_c7)) |
1313 if (get_msr(cpu, MSR_CORE_C7_RESIDENCY, &c->c7)) 1314 return -8; 1315 | 1408 if (get_msr(cpu, MSR_CORE_C7_RESIDENCY, &c->c7)) 1409 return -8; 1410 |
1316 if (do_dts) { | 1411 if (DO_BIC(BIC_CoreTmp)) { |
1317 if (get_msr(cpu, MSR_IA32_THERM_STATUS, &msr)) 1318 return -9; 1319 c->core_temp_c = tcc_activation_temp - ((msr >> 16) & 0x7F); 1320 } 1321 1322 for (i = 0, mp = sys.cp; mp; i++, mp = mp->next) { 1323 if (get_msr(cpu, mp->msr_num, &c->counter[i])) 1324 return -10; --- 58 unchanged lines hidden (view full) --- 1383 return -16; 1384 p->rapl_pkg_perf_status = msr & 0xFFFFFFFF; 1385 } 1386 if (do_rapl & RAPL_DRAM_PERF_STATUS) { 1387 if (get_msr(cpu, MSR_DRAM_PERF_STATUS, &msr)) 1388 return -16; 1389 p->rapl_dram_perf_status = msr & 0xFFFFFFFF; 1390 } | 1412 if (get_msr(cpu, MSR_IA32_THERM_STATUS, &msr)) 1413 return -9; 1414 c->core_temp_c = tcc_activation_temp - ((msr >> 16) & 0x7F); 1415 } 1416 1417 for (i = 0, mp = sys.cp; mp; i++, mp = mp->next) { 1418 if (get_msr(cpu, mp->msr_num, &c->counter[i])) 1419 return -10; --- 58 unchanged lines hidden (view full) --- 1478 return -16; 1479 p->rapl_pkg_perf_status = msr & 0xFFFFFFFF; 1480 } 1481 if (do_rapl & RAPL_DRAM_PERF_STATUS) { 1482 if (get_msr(cpu, MSR_DRAM_PERF_STATUS, &msr)) 1483 return -16; 1484 p->rapl_dram_perf_status = msr & 0xFFFFFFFF; 1485 } |
1391 if (do_ptm) { | 1486 if (DO_BIC(BIC_PkgTmp)) { |
1392 if (get_msr(cpu, MSR_IA32_PACKAGE_THERM_STATUS, &msr)) 1393 return -17; 1394 p->pkg_temp_c = tcc_activation_temp - ((msr >> 16) & 0x7F); 1395 } 1396 | 1487 if (get_msr(cpu, MSR_IA32_PACKAGE_THERM_STATUS, &msr)) 1488 return -17; 1489 p->pkg_temp_c = tcc_activation_temp - ((msr >> 16) & 0x7F); 1490 } 1491 |
1397 if (do_gfx_rc6_ms) | 1492 if (DO_BIC(BIC_GFX_rc6)) |
1398 p->gfx_rc6_ms = gfx_cur_rc6_ms; 1399 | 1493 p->gfx_rc6_ms = gfx_cur_rc6_ms; 1494 |
1400 if (do_gfx_mhz) | 1495 if (DO_BIC(BIC_GFXMHz)) |
1401 p->gfx_mhz = gfx_cur_mhz; 1402 1403 for (i = 0, mp = sys.pp; mp; i++, mp = mp->next) { 1404 if (get_msr(cpu, mp->msr_num, &p->counter[i])) 1405 return -10; 1406 } 1407 1408 return 0; --- 741 unchanged lines hidden (view full) --- 2150 * 2151 * return 1 if configuration restart needed, else return 0 2152 */ 2153int snapshot_proc_sysfs_files(void) 2154{ 2155 if (snapshot_proc_interrupts()) 2156 return 1; 2157 | 1496 p->gfx_mhz = gfx_cur_mhz; 1497 1498 for (i = 0, mp = sys.pp; mp; i++, mp = mp->next) { 1499 if (get_msr(cpu, mp->msr_num, &p->counter[i])) 1500 return -10; 1501 } 1502 1503 return 0; --- 741 unchanged lines hidden (view full) --- 2245 * 2246 * return 1 if configuration restart needed, else return 0 2247 */ 2248int snapshot_proc_sysfs_files(void) 2249{ 2250 if (snapshot_proc_interrupts()) 2251 return 1; 2252 |
2158 if (do_gfx_rc6_ms) | 2253 if (DO_BIC(BIC_GFX_rc6)) |
2159 snapshot_gfx_rc6_ms(); 2160 | 2254 snapshot_gfx_rc6_ms(); 2255 |
2161 if (do_gfx_mhz) | 2256 if (DO_BIC(BIC_GFXMHz)) |
2162 snapshot_gfx_mhz(); 2163 2164 return 0; 2165} 2166 2167void turbostat_loop() 2168{ 2169 int retval; --- 619 unchanged lines hidden (view full) --- 2789 case INTEL_FAM6_SANDYBRIDGE: 2790 case INTEL_FAM6_IVYBRIDGE: 2791 case INTEL_FAM6_HASWELL_CORE: /* HSW */ 2792 case INTEL_FAM6_HASWELL_ULT: /* HSW */ 2793 case INTEL_FAM6_HASWELL_GT3E: /* HSW */ 2794 case INTEL_FAM6_BROADWELL_CORE: /* BDW */ 2795 case INTEL_FAM6_BROADWELL_GT3E: /* BDW */ 2796 do_rapl = RAPL_PKG | RAPL_CORES | RAPL_CORE_POLICY | RAPL_GFX | RAPL_PKG_POWER_INFO; | 2257 snapshot_gfx_mhz(); 2258 2259 return 0; 2260} 2261 2262void turbostat_loop() 2263{ 2264 int retval; --- 619 unchanged lines hidden (view full) --- 2884 case INTEL_FAM6_SANDYBRIDGE: 2885 case INTEL_FAM6_IVYBRIDGE: 2886 case INTEL_FAM6_HASWELL_CORE: /* HSW */ 2887 case INTEL_FAM6_HASWELL_ULT: /* HSW */ 2888 case INTEL_FAM6_HASWELL_GT3E: /* HSW */ 2889 case INTEL_FAM6_BROADWELL_CORE: /* BDW */ 2890 case INTEL_FAM6_BROADWELL_GT3E: /* BDW */ 2891 do_rapl = RAPL_PKG | RAPL_CORES | RAPL_CORE_POLICY | RAPL_GFX | RAPL_PKG_POWER_INFO; |
2892 if (rapl_joules) { 2893 BIC_PRESENT(BIC_Pkg_J); 2894 BIC_PRESENT(BIC_Cor_J); 2895 BIC_PRESENT(BIC_GFX_J); 2896 } else { 2897 BIC_PRESENT(BIC_PkgWatt); 2898 BIC_PRESENT(BIC_CorWatt); 2899 BIC_PRESENT(BIC_GFXWatt); 2900 } |
|
2797 break; 2798 case INTEL_FAM6_ATOM_GOLDMONT: /* BXT */ 2799 do_rapl = RAPL_PKG | RAPL_PKG_POWER_INFO; | 2901 break; 2902 case INTEL_FAM6_ATOM_GOLDMONT: /* BXT */ 2903 do_rapl = RAPL_PKG | RAPL_PKG_POWER_INFO; |
2904 if (rapl_joules) 2905 BIC_PRESENT(BIC_Pkg_J); 2906 else 2907 BIC_PRESENT(BIC_PkgWatt); |
|
2800 break; 2801 case INTEL_FAM6_SKYLAKE_MOBILE: /* SKL */ 2802 case INTEL_FAM6_SKYLAKE_DESKTOP: /* SKL */ 2803 case INTEL_FAM6_KABYLAKE_MOBILE: /* KBL */ 2804 case INTEL_FAM6_KABYLAKE_DESKTOP: /* KBL */ 2805 do_rapl = RAPL_PKG | RAPL_DRAM | RAPL_DRAM_PERF_STATUS | RAPL_PKG_PERF_STATUS | RAPL_PKG_POWER_INFO; | 2908 break; 2909 case INTEL_FAM6_SKYLAKE_MOBILE: /* SKL */ 2910 case INTEL_FAM6_SKYLAKE_DESKTOP: /* SKL */ 2911 case INTEL_FAM6_KABYLAKE_MOBILE: /* KBL */ 2912 case INTEL_FAM6_KABYLAKE_DESKTOP: /* KBL */ 2913 do_rapl = RAPL_PKG | RAPL_DRAM | RAPL_DRAM_PERF_STATUS | RAPL_PKG_PERF_STATUS | RAPL_PKG_POWER_INFO; |
2914 BIC_PRESENT(BIC_PKG__); 2915 BIC_PRESENT(BIC_RAM__); 2916 if (rapl_joules) { 2917 BIC_PRESENT(BIC_Pkg_J); 2918 BIC_PRESENT(BIC_Cor_J); 2919 BIC_PRESENT(BIC_RAM_J); 2920 } else { 2921 BIC_PRESENT(BIC_PkgWatt); 2922 BIC_PRESENT(BIC_CorWatt); 2923 BIC_PRESENT(BIC_RAMWatt); 2924 } |
|
2806 break; 2807 case INTEL_FAM6_HASWELL_X: /* HSX */ 2808 case INTEL_FAM6_BROADWELL_X: /* BDX */ 2809 case INTEL_FAM6_BROADWELL_XEON_D: /* BDX-DE */ 2810 case INTEL_FAM6_SKYLAKE_X: /* SKX */ 2811 case INTEL_FAM6_XEON_PHI_KNL: /* KNL */ 2812 case INTEL_FAM6_XEON_PHI_KNM: 2813 do_rapl = RAPL_PKG | RAPL_DRAM | RAPL_DRAM_POWER_INFO | RAPL_DRAM_PERF_STATUS | RAPL_PKG_PERF_STATUS | RAPL_PKG_POWER_INFO; | 2925 break; 2926 case INTEL_FAM6_HASWELL_X: /* HSX */ 2927 case INTEL_FAM6_BROADWELL_X: /* BDX */ 2928 case INTEL_FAM6_BROADWELL_XEON_D: /* BDX-DE */ 2929 case INTEL_FAM6_SKYLAKE_X: /* SKX */ 2930 case INTEL_FAM6_XEON_PHI_KNL: /* KNL */ 2931 case INTEL_FAM6_XEON_PHI_KNM: 2932 do_rapl = RAPL_PKG | RAPL_DRAM | RAPL_DRAM_POWER_INFO | RAPL_DRAM_PERF_STATUS | RAPL_PKG_PERF_STATUS | RAPL_PKG_POWER_INFO; |
2933 BIC_PRESENT(BIC_PKG__); 2934 BIC_PRESENT(BIC_RAM__); 2935 if (rapl_joules) { 2936 BIC_PRESENT(BIC_Pkg_J); 2937 BIC_PRESENT(BIC_RAM_J); 2938 } else { 2939 BIC_PRESENT(BIC_PkgWatt); 2940 BIC_PRESENT(BIC_RAMWatt); 2941 } |
|
2814 break; 2815 case INTEL_FAM6_SANDYBRIDGE_X: 2816 case INTEL_FAM6_IVYBRIDGE_X: 2817 do_rapl = RAPL_PKG | RAPL_CORES | RAPL_CORE_POLICY | RAPL_DRAM | RAPL_DRAM_POWER_INFO | RAPL_PKG_PERF_STATUS | RAPL_DRAM_PERF_STATUS | RAPL_PKG_POWER_INFO; | 2942 break; 2943 case INTEL_FAM6_SANDYBRIDGE_X: 2944 case INTEL_FAM6_IVYBRIDGE_X: 2945 do_rapl = RAPL_PKG | RAPL_CORES | RAPL_CORE_POLICY | RAPL_DRAM | RAPL_DRAM_POWER_INFO | RAPL_PKG_PERF_STATUS | RAPL_DRAM_PERF_STATUS | RAPL_PKG_POWER_INFO; |
2946 BIC_PRESENT(BIC_PKG__); 2947 BIC_PRESENT(BIC_RAM__); 2948 if (rapl_joules) { 2949 BIC_PRESENT(BIC_Pkg_J); 2950 BIC_PRESENT(BIC_Cor_J); 2951 BIC_PRESENT(BIC_RAM_J); 2952 } else { 2953 BIC_PRESENT(BIC_PkgWatt); 2954 BIC_PRESENT(BIC_CorWatt); 2955 BIC_PRESENT(BIC_RAMWatt); 2956 } |
|
2818 break; 2819 case INTEL_FAM6_ATOM_SILVERMONT1: /* BYT */ 2820 case INTEL_FAM6_ATOM_SILVERMONT2: /* AVN */ 2821 do_rapl = RAPL_PKG | RAPL_CORES; | 2957 break; 2958 case INTEL_FAM6_ATOM_SILVERMONT1: /* BYT */ 2959 case INTEL_FAM6_ATOM_SILVERMONT2: /* AVN */ 2960 do_rapl = RAPL_PKG | RAPL_CORES; |
2961 if (rapl_joules) { 2962 BIC_PRESENT(BIC_Pkg_J); 2963 BIC_PRESENT(BIC_Cor_J); 2964 } else { 2965 BIC_PRESENT(BIC_PkgWatt); 2966 BIC_PRESENT(BIC_CorWatt); 2967 } |
|
2822 break; 2823 case INTEL_FAM6_ATOM_DENVERTON: /* DNV */ 2824 do_rapl = RAPL_PKG | RAPL_DRAM | RAPL_DRAM_POWER_INFO | RAPL_DRAM_PERF_STATUS | RAPL_PKG_PERF_STATUS | RAPL_PKG_POWER_INFO | RAPL_CORES_ENERGY_STATUS; | 2968 break; 2969 case INTEL_FAM6_ATOM_DENVERTON: /* DNV */ 2970 do_rapl = RAPL_PKG | RAPL_DRAM | RAPL_DRAM_POWER_INFO | RAPL_DRAM_PERF_STATUS | RAPL_PKG_PERF_STATUS | RAPL_PKG_POWER_INFO | RAPL_CORES_ENERGY_STATUS; |
2971 BIC_PRESENT(BIC_PKG__); 2972 BIC_PRESENT(BIC_RAM__); 2973 if (rapl_joules) { 2974 BIC_PRESENT(BIC_Pkg_J); 2975 BIC_PRESENT(BIC_Cor_J); 2976 BIC_PRESENT(BIC_RAM_J); 2977 } else { 2978 BIC_PRESENT(BIC_PkgWatt); 2979 BIC_PRESENT(BIC_CorWatt); 2980 BIC_PRESENT(BIC_RAMWatt); 2981 } |
|
2825 break; 2826 default: 2827 return; 2828 } 2829 2830 /* units on package 0, verify later other packages match */ 2831 if (get_msr(base_cpu, MSR_RAPL_POWER_UNIT, &msr)) 2832 return; --- 560 unchanged lines hidden (view full) --- 3393 3394 /* 3395 * APERF/MPERF is advertised by CPUID.EAX=0x6: ECX.bit0 3396 * this check is valid for both Intel and AMD 3397 */ 3398 3399 __cpuid(0x6, eax, ebx, ecx, edx); 3400 has_aperf = ecx & (1 << 0); | 2982 break; 2983 default: 2984 return; 2985 } 2986 2987 /* units on package 0, verify later other packages match */ 2988 if (get_msr(base_cpu, MSR_RAPL_POWER_UNIT, &msr)) 2989 return; --- 560 unchanged lines hidden (view full) --- 3550 3551 /* 3552 * APERF/MPERF is advertised by CPUID.EAX=0x6: ECX.bit0 3553 * this check is valid for both Intel and AMD 3554 */ 3555 3556 __cpuid(0x6, eax, ebx, ecx, edx); 3557 has_aperf = ecx & (1 << 0); |
3558 if (has_aperf) { 3559 BIC_PRESENT(BIC_Avg_MHz); 3560 BIC_PRESENT(BIC_Busy); 3561 BIC_PRESENT(BIC_Bzy_MHz); 3562 } |
|
3401 do_dts = eax & (1 << 0); | 3563 do_dts = eax & (1 << 0); |
3564 if (do_dts) 3565 BIC_PRESENT(BIC_CoreTmp); |
|
3402 do_ptm = eax & (1 << 6); | 3566 do_ptm = eax & (1 << 6); |
3567 if (do_ptm) 3568 BIC_PRESENT(BIC_PkgTmp); |
|
3403 has_hwp = eax & (1 << 7); 3404 has_hwp_notify = eax & (1 << 8); 3405 has_hwp_activity_window = eax & (1 << 9); 3406 has_hwp_epp = eax & (1 << 10); 3407 has_hwp_pkg = eax & (1 << 11); 3408 has_epb = ecx & (1 << 3); 3409 3410 if (debug) --- 81 unchanged lines hidden (view full) --- 3492 if (debug) 3493 fprintf(outf, "CPUID(0x16): base_mhz: %d max_mhz: %d bus_mhz: %d\n", 3494 base_mhz, max_mhz, bus_mhz); 3495 } 3496 3497 if (has_aperf) 3498 aperf_mperf_multiplier = get_aperf_mperf_multiplier(family, model); 3499 | 3569 has_hwp = eax & (1 << 7); 3570 has_hwp_notify = eax & (1 << 8); 3571 has_hwp_activity_window = eax & (1 << 9); 3572 has_hwp_epp = eax & (1 << 10); 3573 has_hwp_pkg = eax & (1 << 11); 3574 has_epb = ecx & (1 << 3); 3575 3576 if (debug) --- 81 unchanged lines hidden (view full) --- 3658 if (debug) 3659 fprintf(outf, "CPUID(0x16): base_mhz: %d max_mhz: %d bus_mhz: %d\n", 3660 base_mhz, max_mhz, bus_mhz); 3661 } 3662 3663 if (has_aperf) 3664 aperf_mperf_multiplier = get_aperf_mperf_multiplier(family, model); 3665 |
3500 do_nhm_platform_info = do_nhm_cstates = do_smi = probe_nhm_msrs(family, model); | 3666 BIC_PRESENT(BIC_IRQ); 3667 BIC_PRESENT(BIC_TSC_MHz); 3668 3669 if (probe_nhm_msrs(family, model)) { 3670 do_nhm_platform_info = 1; 3671 BIC_PRESENT(BIC_CPU_c1); 3672 BIC_PRESENT(BIC_CPU_c3); 3673 BIC_PRESENT(BIC_CPU_c6); 3674 BIC_PRESENT(BIC_SMI); 3675 } |
3501 do_snb_cstates = has_snb_msrs(family, model); | 3676 do_snb_cstates = has_snb_msrs(family, model); |
3677 3678 if (do_snb_cstates) 3679 BIC_PRESENT(BIC_CPU_c7); 3680 |
|
3502 do_irtl_snb = has_snb_msrs(family, model); 3503 do_pc2 = do_snb_cstates && (pkg_cstate_limit >= PCL__2); 3504 do_pc3 = (pkg_cstate_limit >= PCL__3); 3505 do_pc6 = (pkg_cstate_limit >= PCL__6); 3506 do_pc7 = do_snb_cstates && (pkg_cstate_limit >= PCL__7); 3507 do_c8_c9_c10 = has_hsw_msrs(family, model); 3508 do_irtl_hsw = has_hsw_msrs(family, model); 3509 do_skl_residency = has_skl_msrs(family, model); --- 7 unchanged lines hidden (view full) --- 3517 perf_limit_reasons_probe(family, model); 3518 3519 if (debug) 3520 dump_cstate_pstate_config_info(family, model); 3521 3522 if (has_skl_msrs(family, model)) 3523 calculate_tsc_tweak(); 3524 | 3681 do_irtl_snb = has_snb_msrs(family, model); 3682 do_pc2 = do_snb_cstates && (pkg_cstate_limit >= PCL__2); 3683 do_pc3 = (pkg_cstate_limit >= PCL__3); 3684 do_pc6 = (pkg_cstate_limit >= PCL__6); 3685 do_pc7 = do_snb_cstates && (pkg_cstate_limit >= PCL__7); 3686 do_c8_c9_c10 = has_hsw_msrs(family, model); 3687 do_irtl_hsw = has_hsw_msrs(family, model); 3688 do_skl_residency = has_skl_msrs(family, model); --- 7 unchanged lines hidden (view full) --- 3696 perf_limit_reasons_probe(family, model); 3697 3698 if (debug) 3699 dump_cstate_pstate_config_info(family, model); 3700 3701 if (has_skl_msrs(family, model)) 3702 calculate_tsc_tweak(); 3703 |
3525 do_gfx_rc6_ms = !access("/sys/class/drm/card0/power/rc6_residency_ms", R_OK); | 3704 if (!access("/sys/class/drm/card0/power/rc6_residency_ms", R_OK)) 3705 BIC_PRESENT(BIC_GFX_rc6); |
3526 | 3706 |
3527 do_gfx_mhz = !access("/sys/class/graphics/fb0/device/drm/card0/gt_cur_freq_mhz", R_OK); | 3707 if (!access("/sys/class/graphics/fb0/device/drm/card0/gt_cur_freq_mhz", R_OK)) 3708 BIC_PRESENT(BIC_GFXMHz); |
3528 3529 return; 3530} 3531 3532void help() 3533{ 3534 fprintf(outf, 3535 "Usage: turbostat [OPTIONS][(--interval seconds) | COMMAND ...]\n" --- 42 unchanged lines hidden (view full) --- 3578 int physical_package_id; 3579 } *cpus; 3580 3581 /* Initialize num_cpus, max_cpu_num */ 3582 topo.num_cpus = 0; 3583 topo.max_cpu_num = 0; 3584 for_all_proc_cpus(count_cpus); 3585 if (!summary_only && topo.num_cpus > 1) | 3709 3710 return; 3711} 3712 3713void help() 3714{ 3715 fprintf(outf, 3716 "Usage: turbostat [OPTIONS][(--interval seconds) | COMMAND ...]\n" --- 42 unchanged lines hidden (view full) --- 3759 int physical_package_id; 3760 } *cpus; 3761 3762 /* Initialize num_cpus, max_cpu_num */ 3763 topo.num_cpus = 0; 3764 topo.max_cpu_num = 0; 3765 for_all_proc_cpus(count_cpus); 3766 if (!summary_only && topo.num_cpus > 1) |
3586 show_cpu = 1; | 3767 BIC_PRESENT(BIC_CPU); |
3587 3588 if (debug > 1) 3589 fprintf(outf, "num_cpus %d max_cpu_num %d\n", topo.num_cpus, topo.max_cpu_num); 3590 3591 cpus = calloc(1, (topo.max_cpu_num + 1) * sizeof(struct cpu_topology)); 3592 if (cpus == NULL) 3593 err(1, "calloc cpus"); 3594 --- 44 unchanged lines hidden (view full) --- 3639 fprintf(outf, "cpu %d pkg %d core %d\n", 3640 i, cpus[i].physical_package_id, cpus[i].core_id); 3641 } 3642 topo.num_cores_per_pkg = max_core_id + 1; 3643 if (debug > 1) 3644 fprintf(outf, "max_core_id %d, sizing for %d cores per package\n", 3645 max_core_id, topo.num_cores_per_pkg); 3646 if (debug && !summary_only && topo.num_cores_per_pkg > 1) | 3768 3769 if (debug > 1) 3770 fprintf(outf, "num_cpus %d max_cpu_num %d\n", topo.num_cpus, topo.max_cpu_num); 3771 3772 cpus = calloc(1, (topo.max_cpu_num + 1) * sizeof(struct cpu_topology)); 3773 if (cpus == NULL) 3774 err(1, "calloc cpus"); 3775 --- 44 unchanged lines hidden (view full) --- 3820 fprintf(outf, "cpu %d pkg %d core %d\n", 3821 i, cpus[i].physical_package_id, cpus[i].core_id); 3822 } 3823 topo.num_cores_per_pkg = max_core_id + 1; 3824 if (debug > 1) 3825 fprintf(outf, "max_core_id %d, sizing for %d cores per package\n", 3826 max_core_id, topo.num_cores_per_pkg); 3827 if (debug && !summary_only && topo.num_cores_per_pkg > 1) |
3647 show_core = 1; | 3828 BIC_PRESENT(BIC_Core); |
3648 3649 topo.num_packages = max_package_id + 1; 3650 if (debug > 1) 3651 fprintf(outf, "max_package_id %d, sizing for %d packages\n", 3652 max_package_id, topo.num_packages); 3653 if (debug && !summary_only && topo.num_packages > 1) | 3829 3830 topo.num_packages = max_package_id + 1; 3831 if (debug > 1) 3832 fprintf(outf, "max_package_id %d, sizing for %d packages\n", 3833 max_package_id, topo.num_packages); 3834 if (debug && !summary_only && topo.num_packages > 1) |
3654 show_pkg = 1; | 3835 BIC_PRESENT(BIC_Package); |
3655 3656 topo.num_threads_per_core = max_siblings; 3657 if (debug > 1) 3658 fprintf(outf, "max_siblings %d\n", max_siblings); 3659 3660 free(cpus); 3661} 3662 --- 377 unchanged lines hidden (view full) --- 4040 if (add_counter(msr_num, name_buffer, width, scope, type, format)) 4041 fail++; 4042 4043 if (fail) { 4044 help(); 4045 exit(1); 4046 } 4047} | 3836 3837 topo.num_threads_per_core = max_siblings; 3838 if (debug > 1) 3839 fprintf(outf, "max_siblings %d\n", max_siblings); 3840 3841 free(cpus); 3842} 3843 --- 377 unchanged lines hidden (view full) --- 4221 if (add_counter(msr_num, name_buffer, width, scope, type, format)) 4222 fail++; 4223 4224 if (fail) { 4225 help(); 4226 exit(1); 4227 } 4228} |
4229/* 4230 * HIDE_LIST - hide this list of counters, show the rest [default] 4231 * SHOW_LIST - show this list of counters, hide the rest 4232 */ 4233enum show_hide_mode { SHOW_LIST, HIDE_LIST } global_show_hide_mode = HIDE_LIST; 4234 4235int shown; 4236/* 4237 * parse_show_hide() - process cmdline to set default counter action 4238 */ 4239void parse_show_hide(char *optarg, enum show_hide_mode new_mode) 4240{ 4241 /* 4242 * --show: show only those specified 4243 * The 1st invocation will clear and replace the enabled mask 4244 * subsequent invocations can add to it. 4245 */ 4246 if (new_mode == SHOW_LIST) { 4247 if (shown == 0) 4248 bic_enabled = bic_lookup(optarg); 4249 else 4250 bic_enabled |= bic_lookup(optarg); 4251 shown = 1; 4252 4253 return; 4254 } 4255 4256 /* 4257 * --hide: do not show those specified 4258 * multiple invocations simply clear more bits in enabled mask 4259 */ 4260 bic_enabled &= ~bic_lookup(optarg); 4261} 4262 |
|
4048void cmdline(int argc, char **argv) 4049{ 4050 int opt; 4051 int option_index = 0; 4052 static struct option long_options[] = { 4053 {"add", required_argument, 0, 'a'}, 4054 {"Dump", no_argument, 0, 'D'}, 4055 {"debug", no_argument, 0, 'd'}, 4056 {"interval", required_argument, 0, 'i'}, 4057 {"help", no_argument, 0, 'h'}, | 4263void cmdline(int argc, char **argv) 4264{ 4265 int opt; 4266 int option_index = 0; 4267 static struct option long_options[] = { 4268 {"add", required_argument, 0, 'a'}, 4269 {"Dump", no_argument, 0, 'D'}, 4270 {"debug", no_argument, 0, 'd'}, 4271 {"interval", required_argument, 0, 'i'}, 4272 {"help", no_argument, 0, 'h'}, |
4273 {"hide", required_argument, 0, 'H'}, // meh, -h taken by --help |
|
4058 {"Joules", no_argument, 0, 'J'}, 4059 {"out", required_argument, 0, 'o'}, 4060 {"Package", no_argument, 0, 'p'}, 4061 {"processor", no_argument, 0, 'p'}, | 4274 {"Joules", no_argument, 0, 'J'}, 4275 {"out", required_argument, 0, 'o'}, 4276 {"Package", no_argument, 0, 'p'}, 4277 {"processor", no_argument, 0, 'p'}, |
4278 {"show", required_argument, 0, 's'}, |
|
4062 {"Summary", no_argument, 0, 'S'}, 4063 {"TCC", required_argument, 0, 'T'}, 4064 {"version", no_argument, 0, 'v' }, 4065 {0, 0, 0, 0 } 4066 }; 4067 4068 progname = argv[0]; 4069 --- 4 unchanged lines hidden (view full) --- 4074 parse_add_command(optarg); 4075 break; 4076 case 'D': 4077 dump_only++; 4078 break; 4079 case 'd': 4080 debug++; 4081 break; | 4279 {"Summary", no_argument, 0, 'S'}, 4280 {"TCC", required_argument, 0, 'T'}, 4281 {"version", no_argument, 0, 'v' }, 4282 {0, 0, 0, 0 } 4283 }; 4284 4285 progname = argv[0]; 4286 --- 4 unchanged lines hidden (view full) --- 4291 parse_add_command(optarg); 4292 break; 4293 case 'D': 4294 dump_only++; 4295 break; 4296 case 'd': 4297 debug++; 4298 break; |
4299 case 'H': 4300 parse_show_hide(optarg, HIDE_LIST); 4301 break; |
|
4082 case 'h': 4083 default: 4084 help(); 4085 exit(1); 4086 case 'i': 4087 { 4088 double interval = strtod(optarg, NULL); 4089 --- 14 unchanged lines hidden (view full) --- 4104 outf = fopen_or_die(optarg, "w"); 4105 break; 4106 case 'P': 4107 show_pkg_only++; 4108 break; 4109 case 'p': 4110 show_core_only++; 4111 break; | 4302 case 'h': 4303 default: 4304 help(); 4305 exit(1); 4306 case 'i': 4307 { 4308 double interval = strtod(optarg, NULL); 4309 --- 14 unchanged lines hidden (view full) --- 4324 outf = fopen_or_die(optarg, "w"); 4325 break; 4326 case 'P': 4327 show_pkg_only++; 4328 break; 4329 case 'p': 4330 show_core_only++; 4331 break; |
4332 case 's': 4333 parse_show_hide(optarg, SHOW_LIST); 4334 break; |
|
4112 case 'S': 4113 summary_only++; 4114 break; 4115 case 'T': 4116 tcc_activation_temp_override = atoi(optarg); 4117 break; 4118 case 'v': 4119 print_version(); --- 31 unchanged lines hidden --- | 4335 case 'S': 4336 summary_only++; 4337 break; 4338 case 'T': 4339 tcc_activation_temp_override = atoi(optarg); 4340 break; 4341 case 'v': 4342 print_version(); --- 31 unchanged lines hidden --- |