tools/power turbostat: switch to tab delimited output
Switch to tab-delimited output from fixed-width columns to make it simpler to import into spreadsheets. As the fixed width columnns were 8-spaces wide, the output on the screen should not change. Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
Родитель
ba3dec99fc
Коммит
3d109de23c
|
@ -323,103 +323,103 @@ int get_msr(int cpu, off_t offset, unsigned long long *msr)
|
|||
void print_header(void)
|
||||
{
|
||||
if (show_pkg)
|
||||
outp += sprintf(outp, " Package");
|
||||
outp += sprintf(outp, "\tPackage");
|
||||
if (show_core)
|
||||
outp += sprintf(outp, " Core");
|
||||
outp += sprintf(outp, "\tCore");
|
||||
if (show_cpu)
|
||||
outp += sprintf(outp, " CPU");
|
||||
outp += sprintf(outp, "\tCPU");
|
||||
if (has_aperf)
|
||||
outp += sprintf(outp, " Avg_MHz");
|
||||
outp += sprintf(outp, "\tAvg_MHz");
|
||||
if (has_aperf)
|
||||
outp += sprintf(outp, " Busy%%");
|
||||
outp += sprintf(outp, "\tBusy%%");
|
||||
if (has_aperf)
|
||||
outp += sprintf(outp, " Bzy_MHz");
|
||||
outp += sprintf(outp, " TSC_MHz");
|
||||
outp += sprintf(outp, "\tBzy_MHz");
|
||||
outp += sprintf(outp, "\tTSC_MHz");
|
||||
|
||||
if (extra_delta_offset32)
|
||||
outp += sprintf(outp, " count 0x%03X", extra_delta_offset32);
|
||||
outp += sprintf(outp, "\tcount 0x%03X", extra_delta_offset32);
|
||||
if (extra_delta_offset64)
|
||||
outp += sprintf(outp, " COUNT 0x%03X", extra_delta_offset64);
|
||||
outp += sprintf(outp, "\tCOUNT 0x%03X", extra_delta_offset64);
|
||||
if (extra_msr_offset32)
|
||||
outp += sprintf(outp, " MSR 0x%03X", extra_msr_offset32);
|
||||
outp += sprintf(outp, "\tMSR 0x%03X", extra_msr_offset32);
|
||||
if (extra_msr_offset64)
|
||||
outp += sprintf(outp, " MSR 0x%03X", extra_msr_offset64);
|
||||
outp += sprintf(outp, "\tMSR 0x%03X", extra_msr_offset64);
|
||||
|
||||
if (!debug)
|
||||
goto done;
|
||||
|
||||
if (do_irq)
|
||||
outp += sprintf(outp, " IRQ");
|
||||
outp += sprintf(outp, "\tIRQ");
|
||||
if (do_smi)
|
||||
outp += sprintf(outp, " SMI");
|
||||
outp += sprintf(outp, "\tSMI");
|
||||
|
||||
if (do_nhm_cstates)
|
||||
outp += sprintf(outp, " CPU%%c1");
|
||||
outp += sprintf(outp, "\tCPU%%c1");
|
||||
if (do_nhm_cstates && !do_slm_cstates && !do_knl_cstates)
|
||||
outp += sprintf(outp, " CPU%%c3");
|
||||
outp += sprintf(outp, "\tCPU%%c3");
|
||||
if (do_nhm_cstates)
|
||||
outp += sprintf(outp, " CPU%%c6");
|
||||
outp += sprintf(outp, "\tCPU%%c6");
|
||||
if (do_snb_cstates)
|
||||
outp += sprintf(outp, " CPU%%c7");
|
||||
outp += sprintf(outp, "\tCPU%%c7");
|
||||
|
||||
if (do_dts)
|
||||
outp += sprintf(outp, " CoreTmp");
|
||||
outp += sprintf(outp, "\tCoreTmp");
|
||||
if (do_ptm)
|
||||
outp += sprintf(outp, " PkgTmp");
|
||||
outp += sprintf(outp, "\tPkgTmp");
|
||||
|
||||
if (do_gfx_rc6_ms)
|
||||
outp += sprintf(outp, " GFX%%rc6");
|
||||
outp += sprintf(outp, "\tGFX%%rc6");
|
||||
|
||||
if (do_gfx_mhz)
|
||||
outp += sprintf(outp, " GFXMHz");
|
||||
outp += sprintf(outp, "\tGFXMHz");
|
||||
|
||||
if (do_skl_residency) {
|
||||
outp += sprintf(outp, " Totl%%C0");
|
||||
outp += sprintf(outp, " Any%%C0");
|
||||
outp += sprintf(outp, " GFX%%C0");
|
||||
outp += sprintf(outp, " CPUGFX%%");
|
||||
outp += sprintf(outp, "\tTotl%%C0");
|
||||
outp += sprintf(outp, "\tAny%%C0");
|
||||
outp += sprintf(outp, "\tGFX%%C0");
|
||||
outp += sprintf(outp, "\tCPUGFX%%");
|
||||
}
|
||||
|
||||
if (do_pc2)
|
||||
outp += sprintf(outp, " Pkg%%pc2");
|
||||
outp += sprintf(outp, "\tPkg%%pc2");
|
||||
if (do_pc3)
|
||||
outp += sprintf(outp, " Pkg%%pc3");
|
||||
outp += sprintf(outp, "\tPkg%%pc3");
|
||||
if (do_pc6)
|
||||
outp += sprintf(outp, " Pkg%%pc6");
|
||||
outp += sprintf(outp, "\tPkg%%pc6");
|
||||
if (do_pc7)
|
||||
outp += sprintf(outp, " Pkg%%pc7");
|
||||
outp += sprintf(outp, "\tPkg%%pc7");
|
||||
if (do_c8_c9_c10) {
|
||||
outp += sprintf(outp, " Pkg%%pc8");
|
||||
outp += sprintf(outp, " Pkg%%pc9");
|
||||
outp += sprintf(outp, " Pk%%pc10");
|
||||
outp += sprintf(outp, "\tPkg%%pc8");
|
||||
outp += sprintf(outp, "\tPkg%%pc9");
|
||||
outp += sprintf(outp, "\tPk%%pc10");
|
||||
}
|
||||
|
||||
if (do_rapl && !rapl_joules) {
|
||||
if (do_rapl & RAPL_PKG)
|
||||
outp += sprintf(outp, " PkgWatt");
|
||||
outp += sprintf(outp, "\tPkgWatt");
|
||||
if (do_rapl & RAPL_CORES)
|
||||
outp += sprintf(outp, " CorWatt");
|
||||
outp += sprintf(outp, "\tCorWatt");
|
||||
if (do_rapl & RAPL_GFX)
|
||||
outp += sprintf(outp, " GFXWatt");
|
||||
outp += sprintf(outp, "\tGFXWatt");
|
||||
if (do_rapl & RAPL_DRAM)
|
||||
outp += sprintf(outp, " RAMWatt");
|
||||
outp += sprintf(outp, "\tRAMWatt");
|
||||
if (do_rapl & RAPL_PKG_PERF_STATUS)
|
||||
outp += sprintf(outp, " PKG_%%");
|
||||
outp += sprintf(outp, "\tPKG_%%");
|
||||
if (do_rapl & RAPL_DRAM_PERF_STATUS)
|
||||
outp += sprintf(outp, " RAM_%%");
|
||||
outp += sprintf(outp, "\tRAM_%%");
|
||||
} else if (do_rapl && rapl_joules) {
|
||||
if (do_rapl & RAPL_PKG)
|
||||
outp += sprintf(outp, " Pkg_J");
|
||||
outp += sprintf(outp, "\tPkg_J");
|
||||
if (do_rapl & RAPL_CORES)
|
||||
outp += sprintf(outp, " Cor_J");
|
||||
outp += sprintf(outp, "\tCor_J");
|
||||
if (do_rapl & RAPL_GFX)
|
||||
outp += sprintf(outp, " GFX_J");
|
||||
outp += sprintf(outp, "\tGFX_J");
|
||||
if (do_rapl & RAPL_DRAM)
|
||||
outp += sprintf(outp, " RAM_J");
|
||||
outp += sprintf(outp, "\tRAM_J");
|
||||
if (do_rapl & RAPL_PKG_PERF_STATUS)
|
||||
outp += sprintf(outp, " PKG_%%");
|
||||
outp += sprintf(outp, "\tPKG_%%");
|
||||
if (do_rapl & RAPL_DRAM_PERF_STATUS)
|
||||
outp += sprintf(outp, " RAM_%%");
|
||||
outp += sprintf(outp, "\tRAM_%%");
|
||||
}
|
||||
done:
|
||||
outp += sprintf(outp, "\n");
|
||||
|
@ -515,91 +515,91 @@ int format_counters(struct thread_data *t, struct core_data *c,
|
|||
/* topo columns, print blanks on 1st (average) line */
|
||||
if (t == &average.threads) {
|
||||
if (show_pkg)
|
||||
outp += sprintf(outp, " -");
|
||||
outp += sprintf(outp, "\t-");
|
||||
if (show_core)
|
||||
outp += sprintf(outp, " -");
|
||||
outp += sprintf(outp, "\t-");
|
||||
if (show_cpu)
|
||||
outp += sprintf(outp, " -");
|
||||
outp += sprintf(outp, "\t-");
|
||||
} else {
|
||||
if (show_pkg) {
|
||||
if (p)
|
||||
outp += sprintf(outp, "%8d", p->package_id);
|
||||
outp += sprintf(outp, "\t%d", p->package_id);
|
||||
else
|
||||
outp += sprintf(outp, " -");
|
||||
outp += sprintf(outp, "\t-");
|
||||
}
|
||||
if (show_core) {
|
||||
if (c)
|
||||
outp += sprintf(outp, "%8d", c->core_id);
|
||||
outp += sprintf(outp, "\t%d", c->core_id);
|
||||
else
|
||||
outp += sprintf(outp, " -");
|
||||
outp += sprintf(outp, "\t-");
|
||||
}
|
||||
if (show_cpu)
|
||||
outp += sprintf(outp, "%8d", t->cpu_id);
|
||||
outp += sprintf(outp, "\t%d", t->cpu_id);
|
||||
}
|
||||
|
||||
/* Avg_MHz */
|
||||
if (has_aperf)
|
||||
outp += sprintf(outp, "%8.0f",
|
||||
outp += sprintf(outp, "\t%.0f",
|
||||
1.0 / units * t->aperf / interval_float);
|
||||
|
||||
/* Busy% */
|
||||
if (has_aperf)
|
||||
outp += sprintf(outp, "%8.2f", 100.0 * t->mperf/t->tsc/tsc_tweak);
|
||||
outp += sprintf(outp, "\t%.2f", 100.0 * t->mperf/t->tsc/tsc_tweak);
|
||||
|
||||
/* Bzy_MHz */
|
||||
if (has_aperf) {
|
||||
if (has_base_hz)
|
||||
outp += sprintf(outp, "%8.0f", base_hz / units * t->aperf / t->mperf);
|
||||
outp += sprintf(outp, "\t%.0f", base_hz / units * t->aperf / t->mperf);
|
||||
else
|
||||
outp += sprintf(outp, "%8.0f",
|
||||
outp += sprintf(outp, "\t%.0f",
|
||||
1.0 * t->tsc / units * t->aperf / t->mperf / interval_float);
|
||||
}
|
||||
|
||||
/* TSC_MHz */
|
||||
outp += sprintf(outp, "%8.0f", 1.0 * t->tsc/units/interval_float);
|
||||
outp += sprintf(outp, "\t%.0f", 1.0 * t->tsc/units/interval_float);
|
||||
|
||||
/* delta */
|
||||
if (extra_delta_offset32)
|
||||
outp += sprintf(outp, " %11llu", t->extra_delta32);
|
||||
outp += sprintf(outp, "\t%11llu", t->extra_delta32);
|
||||
|
||||
/* DELTA */
|
||||
if (extra_delta_offset64)
|
||||
outp += sprintf(outp, " %11llu", t->extra_delta64);
|
||||
outp += sprintf(outp, "\t%11llu", t->extra_delta64);
|
||||
/* msr */
|
||||
if (extra_msr_offset32)
|
||||
outp += sprintf(outp, " 0x%08llx", t->extra_msr32);
|
||||
outp += sprintf(outp, "\t0x%08llx", t->extra_msr32);
|
||||
|
||||
/* MSR */
|
||||
if (extra_msr_offset64)
|
||||
outp += sprintf(outp, " 0x%016llx", t->extra_msr64);
|
||||
outp += sprintf(outp, "\t0x%016llx", t->extra_msr64);
|
||||
|
||||
if (!debug)
|
||||
goto done;
|
||||
|
||||
/* IRQ */
|
||||
if (do_irq)
|
||||
outp += sprintf(outp, "%8d", t->irq_count);
|
||||
outp += sprintf(outp, "\t%d", t->irq_count);
|
||||
|
||||
/* SMI */
|
||||
if (do_smi)
|
||||
outp += sprintf(outp, "%8d", t->smi_count);
|
||||
outp += sprintf(outp, "\t%d", t->smi_count);
|
||||
|
||||
if (do_nhm_cstates)
|
||||
outp += sprintf(outp, "%8.2f", 100.0 * t->c1/t->tsc);
|
||||
outp += sprintf(outp, "\t%.2f", 100.0 * t->c1/t->tsc);
|
||||
|
||||
/* print per-core data only for 1st thread in core */
|
||||
if (!(t->flags & CPU_IS_FIRST_THREAD_IN_CORE))
|
||||
goto done;
|
||||
|
||||
if (do_nhm_cstates && !do_slm_cstates && !do_knl_cstates)
|
||||
outp += sprintf(outp, "%8.2f", 100.0 * c->c3/t->tsc);
|
||||
outp += sprintf(outp, "\t%.2f", 100.0 * c->c3/t->tsc);
|
||||
if (do_nhm_cstates)
|
||||
outp += sprintf(outp, "%8.2f", 100.0 * c->c6/t->tsc);
|
||||
outp += sprintf(outp, "\t%.2f", 100.0 * c->c6/t->tsc);
|
||||
if (do_snb_cstates)
|
||||
outp += sprintf(outp, "%8.2f", 100.0 * c->c7/t->tsc);
|
||||
outp += sprintf(outp, "\t%.2f", 100.0 * c->c7/t->tsc);
|
||||
|
||||
if (do_dts)
|
||||
outp += sprintf(outp, "%8d", c->core_temp_c);
|
||||
outp += sprintf(outp, "\t%d", c->core_temp_c);
|
||||
|
||||
/* print per-package data only for 1st core in package */
|
||||
if (!(t->flags & CPU_IS_FIRST_CORE_IN_PACKAGE))
|
||||
|
@ -607,42 +607,42 @@ int format_counters(struct thread_data *t, struct core_data *c,
|
|||
|
||||
/* PkgTmp */
|
||||
if (do_ptm)
|
||||
outp += sprintf(outp, "%8d", p->pkg_temp_c);
|
||||
outp += sprintf(outp, "\t%d", p->pkg_temp_c);
|
||||
|
||||
/* GFXrc6 */
|
||||
if (do_gfx_rc6_ms) {
|
||||
if (p->gfx_rc6_ms == -1) { /* detect GFX counter reset */
|
||||
outp += sprintf(outp, " **.**");
|
||||
outp += sprintf(outp, "\t**.**");
|
||||
} else {
|
||||
outp += sprintf(outp, "%8.2f",
|
||||
outp += sprintf(outp, "\t%.2f",
|
||||
p->gfx_rc6_ms / 10.0 / interval_float);
|
||||
}
|
||||
}
|
||||
|
||||
/* GFXMHz */
|
||||
if (do_gfx_mhz)
|
||||
outp += sprintf(outp, "%8d", p->gfx_mhz);
|
||||
outp += sprintf(outp, "\t%d", p->gfx_mhz);
|
||||
|
||||
/* Totl%C0, Any%C0 GFX%C0 CPUGFX% */
|
||||
if (do_skl_residency) {
|
||||
outp += sprintf(outp, "%8.2f", 100.0 * p->pkg_wtd_core_c0/t->tsc);
|
||||
outp += sprintf(outp, "%8.2f", 100.0 * p->pkg_any_core_c0/t->tsc);
|
||||
outp += sprintf(outp, "%8.2f", 100.0 * p->pkg_any_gfxe_c0/t->tsc);
|
||||
outp += sprintf(outp, "%8.2f", 100.0 * p->pkg_both_core_gfxe_c0/t->tsc);
|
||||
outp += sprintf(outp, "\t%.2f", 100.0 * p->pkg_wtd_core_c0/t->tsc);
|
||||
outp += sprintf(outp, "\t%.2f", 100.0 * p->pkg_any_core_c0/t->tsc);
|
||||
outp += sprintf(outp, "\t%.2f", 100.0 * p->pkg_any_gfxe_c0/t->tsc);
|
||||
outp += sprintf(outp, "\t%.2f", 100.0 * p->pkg_both_core_gfxe_c0/t->tsc);
|
||||
}
|
||||
|
||||
if (do_pc2)
|
||||
outp += sprintf(outp, "%8.2f", 100.0 * p->pc2/t->tsc);
|
||||
outp += sprintf(outp, "\t%.2f", 100.0 * p->pc2/t->tsc);
|
||||
if (do_pc3)
|
||||
outp += sprintf(outp, "%8.2f", 100.0 * p->pc3/t->tsc);
|
||||
outp += sprintf(outp, "\t%.2f", 100.0 * p->pc3/t->tsc);
|
||||
if (do_pc6)
|
||||
outp += sprintf(outp, "%8.2f", 100.0 * p->pc6/t->tsc);
|
||||
outp += sprintf(outp, "\t%.2f", 100.0 * p->pc6/t->tsc);
|
||||
if (do_pc7)
|
||||
outp += sprintf(outp, "%8.2f", 100.0 * p->pc7/t->tsc);
|
||||
outp += sprintf(outp, "\t%.2f", 100.0 * p->pc7/t->tsc);
|
||||
if (do_c8_c9_c10) {
|
||||
outp += sprintf(outp, "%8.2f", 100.0 * p->pc8/t->tsc);
|
||||
outp += sprintf(outp, "%8.2f", 100.0 * p->pc9/t->tsc);
|
||||
outp += sprintf(outp, "%8.2f", 100.0 * p->pc10/t->tsc);
|
||||
outp += sprintf(outp, "\t%.2f", 100.0 * p->pc8/t->tsc);
|
||||
outp += sprintf(outp, "\t%.2f", 100.0 * p->pc9/t->tsc);
|
||||
outp += sprintf(outp, "\t%.2f", 100.0 * p->pc10/t->tsc);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -650,7 +650,7 @@ int format_counters(struct thread_data *t, struct core_data *c,
|
|||
* indicate that results are suspect by printing "**" in fraction place.
|
||||
*/
|
||||
if (interval_float < rapl_joule_counter_range)
|
||||
fmt8 = "%8.2f";
|
||||
fmt8 = "\t%.2f";
|
||||
else
|
||||
fmt8 = "%6.0f**";
|
||||
|
||||
|
@ -3715,7 +3715,7 @@ int get_and_dump_counters(void)
|
|||
}
|
||||
|
||||
void print_version() {
|
||||
fprintf(outf, "turbostat version 4.13 22 Apr 2016"
|
||||
fprintf(outf, "turbostat version 4.14 22 Apr 2016"
|
||||
" - Len Brown <lenb@kernel.org>\n");
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче