Re: [PATCH 1/2] perf tools: Add --quiet option to perf stat

From: Arnaldo Carvalho de Melo
Date: Tue Oct 27 2020 - 12:59:42 EST


Em Mon, Oct 26, 2020 at 05:27:36PM -0700, Andi Kleen escreveu:
> Add a new --quiet option to perf stat. This is useful with perf stat
> record to write the data only to the perf.data file, which can lower
> measurement overhead because the data doesn't need to be formatted.
>
> On my 4C desktop:
>
> % time ./perf stat record -e $(python -c 'print ",".join(["cycles"]*1000)') -a -I 1000 sleep 5
> ...
> real 0m5.377s
> user 0m0.238s
> sys 0m0.452s
> % time ./perf stat record --quiet -e $(python -c 'print ",".join(["cycles"]*1000)') -a -I 1000 sleep 5
>
> real 0m5.452s
> user 0m0.183s
> sys 0m0.423s
>
> In this example it cuts the user time by 20%. On systems with more cores
> the savings are higher.

Applied 1/2,

Thanks,

- Arnaldo

> Signed-off-by: Andi Kleen <andi@xxxxxxxxxxxxxx>
> ---
> tools/perf/Documentation/perf-stat.txt | 4 ++++
> tools/perf/builtin-stat.c | 6 +++++-
> tools/perf/util/stat.h | 1 +
> 3 files changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/tools/perf/Documentation/perf-stat.txt b/tools/perf/Documentation/perf-stat.txt
> index 9f9f29025e49..b138dd192423 100644
> --- a/tools/perf/Documentation/perf-stat.txt
> +++ b/tools/perf/Documentation/perf-stat.txt
> @@ -316,6 +316,10 @@ small group that need not have multiplexing is lowered. This option
> forbids the event merging logic from sharing events between groups and
> may be used to increase accuracy in this case.
>
> +--quiet::
> +Don't print output. This is useful with perf stat record below to only
> +write data to the perf.data file.
> +
> STAT RECORD
> -----------
> Stores stat data into perf data file.
> diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
> index b01af171d94f..743fe47e7a88 100644
> --- a/tools/perf/builtin-stat.c
> +++ b/tools/perf/builtin-stat.c
> @@ -972,6 +972,8 @@ static void print_counters(struct timespec *ts, int argc, const char **argv)
> /* Do not print anything if we record to the pipe. */
> if (STAT_RECORD && perf_stat.data.is_pipe)
> return;
> + if (stat_config.quiet)
> + return;
>
> perf_evlist__print_counters(evsel_list, &stat_config, &target,
> ts, argc, argv);
> @@ -1171,6 +1173,8 @@ static struct option stat_options[] = {
> "threads of same physical core"),
> OPT_BOOLEAN(0, "summary", &stat_config.summary,
> "print summary for interval mode"),
> + OPT_BOOLEAN(0, "quiet", &stat_config.quiet,
> + "don't print output (useful with record)"),
> #ifdef HAVE_LIBPFM
> OPT_CALLBACK(0, "pfm-events", &evsel_list, "event",
> "libpfm4 event selector. use 'perf list' to list available events",
> @@ -2132,7 +2136,7 @@ int cmd_stat(int argc, const char **argv)
> goto out;
> }
>
> - if (!output) {
> + if (!output && !stat_config.quiet) {
> struct timespec tm;
> mode = append_file ? "a" : "w";
>
> diff --git a/tools/perf/util/stat.h b/tools/perf/util/stat.h
> index 487010c624be..05adf8165025 100644
> --- a/tools/perf/util/stat.h
> +++ b/tools/perf/util/stat.h
> @@ -122,6 +122,7 @@ struct perf_stat_config {
> bool metric_no_group;
> bool metric_no_merge;
> bool stop_read_counter;
> + bool quiet;
> FILE *output;
> unsigned int interval;
> unsigned int timeout;
> --
> 2.28.0
>

--

- Arnaldo