perf report: Add -q/--quiet option
authorNamhyung Kim <namhyung@kernel.org>
Fri, 17 Feb 2017 08:17:39 +0000 (17:17 +0900)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 20 Feb 2017 14:46:58 +0000 (11:46 -0300)
The -q/--quiet option is to suppress any message.  Sometimes users just
want to see the numbers and it can be used for that case.

Before:

  $ perf report | head -15
  Failed to open /lib/modules/3.19.3-3-ARCH/kernel/fs/ext4/ext4.ko.gz, continuing without symbols
  Failed to open /lib/modules/3.19.3-3-ARCH/kernel/fs/jbd2/jbd2.ko.gz, continuing without symbols
  Failed to open /tmp/perf-14507.map, continuing without symbols
  ...
  # To display the perf.data header info, please use --header/--header-only options.
  #
  #
  # Total Lost Samples: 0
  #
  # Samples: 39K of event 'cycles'
  # Event count (approx.): 30444796573
  #
  # Overhead  Command      Shared Object        Symbol
  # ........  ...........  ...................  .........................
  #
       9.28%  swapper    [kernel.vmlinux]     [k] intel_idle
       5.64%  swapper    [kernel.vmlinux]     [k] native_write_msr_safe
       1.93%  swapper    [kernel.vmlinux]     [k] __switch_to
       1.89%  swapper    [kernel.vmlinux]     [k] menu_select
       1.75%  sched-pipe   [kernel.vmlinux]     [k] __switch_to

After:

  $ perf report -q | head
       9.28%  swapper    [kernel.vmlinux]     [k] intel_idle
       5.64%  swapper    [kernel.vmlinux]     [k] native_write_msr_safe
       1.93%  swapper    [kernel.vmlinux]     [k] __switch_to
       1.89%  swapper    [kernel.vmlinux]     [k] menu_select
       1.75%  sched-pipe   [kernel.vmlinux]     [k] __switch_to
       1.67%  swapper    [kernel.vmlinux]     [k] cpu_startup_entry
       1.48%  sched-pipe   [kernel.vmlinux]     [k] enqueue_entity
       1.46%  swapper    [kernel.vmlinux]     [k] __schedule
       1.36%  swapper    [kernel.vmlinux]     [k] native_read_tsc
       1.34%  sched-pipe   [kernel.vmlinux]     [k] __schedule

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Suggested-and-Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: kernel-team@lge.com
Link: http://lkml.kernel.org/r/20170217081742.17417-4-namhyung@kernel.org
[ Removed builtin-report.c verbose > 0 hunk added to the previous patch ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/Documentation/perf-report.txt
tools/perf/builtin-report.c

index f2914f0..c04cc06 100644 (file)
@@ -25,6 +25,10 @@ OPTIONS
 --verbose::
         Be more verbose. (show symbol address, etc)
 
+-q::
+--quiet::
+       Do not show any message.  (Suppress -v)
+
 -n::
 --show-nr-samples::
        Show the number of samples for each symbol
index a944881..0a88670 100644 (file)
@@ -320,6 +320,9 @@ static size_t hists__fprintf_nr_sample_events(struct hists *hists, struct report
        size_t size = sizeof(buf);
        int socked_id = hists->socket_filter;
 
+       if (quiet)
+               return 0;
+
        if (symbol_conf.filter_relative) {
                nr_samples = hists->stats.nr_non_filtered_samples;
                nr_events = hists->stats.total_non_filtered_period;
@@ -372,7 +375,11 @@ static int perf_evlist__tty_browse_hists(struct perf_evlist *evlist,
 {
        struct perf_evsel *pos;
 
-       fprintf(stdout, "#\n# Total Lost Samples: %" PRIu64 "\n#\n", evlist->stats.total_lost_samples);
+       if (!quiet) {
+               fprintf(stdout, "#\n# Total Lost Samples: %" PRIu64 "\n#\n",
+                       evlist->stats.total_lost_samples);
+       }
+
        evlist__for_each_entry(evlist, pos) {
                struct hists *hists = evsel__hists(pos);
                const char *evname = perf_evsel__name(pos);
@@ -382,7 +389,7 @@ static int perf_evlist__tty_browse_hists(struct perf_evlist *evlist,
                        continue;
 
                hists__fprintf_nr_sample_events(hists, rep, evname, stdout);
-               hists__fprintf(hists, true, 0, 0, rep->min_percent, stdout,
+               hists__fprintf(hists, !quiet, 0, 0, rep->min_percent, stdout,
                               symbol_conf.use_callchain);
                fprintf(stdout, "\n\n");
        }
@@ -716,6 +723,7 @@ int cmd_report(int argc, const char **argv, const char *prefix __maybe_unused)
                    "input file name"),
        OPT_INCR('v', "verbose", &verbose,
                    "be more verbose (show symbol address, etc)"),
+       OPT_BOOLEAN('q', "quiet", &quiet, "Do not show any message"),
        OPT_BOOLEAN('D', "dump-raw-trace", &dump_trace,
                    "dump raw trace in ASCII"),
        OPT_STRING('k', "vmlinux", &symbol_conf.vmlinux_name,
@@ -863,6 +871,9 @@ int cmd_report(int argc, const char **argv, const char *prefix __maybe_unused)
                report.symbol_filter_str = argv[0];
        }
 
+       if (quiet)
+               perf_quiet_option();
+
        if (symbol_conf.vmlinux_name &&
            access(symbol_conf.vmlinux_name, R_OK)) {
                pr_err("Invalid file: %s\n", symbol_conf.vmlinux_name);
@@ -983,14 +994,14 @@ repeat:
                goto error;
        }
 
-       if (report.header || report.header_only) {
+       if ((report.header || report.header_only) && !quiet) {
                perf_session__fprintf_info(session, stdout,
                                           report.show_full_info);
                if (report.header_only) {
                        ret = 0;
                        goto error;
                }
-       } else if (use_browser == 0) {
+       } else if (use_browser == 0 && !quiet) {
                fputs("# To display the perf.data header info, please use --header/--header-only options.\n#\n",
                      stdout);
        }