Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3d109de2 authored by Len Brown's avatar Len Brown
Browse files

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: default avatarLen Brown <len.brown@intel.com>
parent ba3dec99
Loading
Loading
Loading
Loading
+85 −85
Original line number Diff line number Diff line
@@ -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");
}