Reviewed-by: Wang ShaoBo bobo.shaobowang@huawei.com
在 2021/10/9 12:13, yinxiujiang 写道:
From: Andi Kleen andi@firstfloor.org
mainline inclusion from mainline-5.11 commit 55a4de94c64bacffbcd802c954764e0de2ab217f category: feature bugzilla: https://gitee.com/openeuler/kernel/issues/I4CMQA CVE: NA
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.
Signed-off-by: Andi Kleen andi@firstfloor.org Acked-by: Jiri Olsa jolsa@kernel.org Cc: Alexey Budankov alexey.budankov@linux.intel.com Link: http://lore.kernel.org/lkml/20201027002737.30942-1-andi@firstfloor.org Signed-off-by: Arnaldo Carvalho de Melo acme@redhat.com Signed-off-by: yin-xiujiang yinxiujiang@kylinos.cn
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..f9bcd95bf352 100644 --- a/tools/perf/Documentation/perf-stat.txt +++ b/tools/perf/Documentation/perf-stat.txt @@ -320,6 +320,10 @@ STAT RECORD
Stores stat data into perf data file.
+--quiet:: +Don't print output. This is useful with perf stat record below to only +write data to the perf.data file.
- -o file:: --output file:: Output file name.
diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c index b01af171d94f..89e80a3bc9c3 100644 --- a/tools/perf/builtin-stat.c +++ b/tools/perf/builtin-stat.c @@ -973,6 +973,8 @@ static void print_counters(struct timespec *ts, int argc, const char **argv) if (STAT_RECORD && perf_stat.data.is_pipe) return;
- if (stat_config.quiet)
perf_evlist__print_counters(evsel_list, &stat_config, &target, ts, argc, argv); }return;
@@ -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,
#ifdef HAVE_LIBPFM OPT_CALLBACK(0, "pfm-events", &evsel_list, "event", "libpfm4 event selector. use 'perf list' to list available events","don't print output (useful with record)"),
@@ -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;