perf top: Save and display the drop count stats
authorJiri Olsa <jolsa@kernel.org>
Sun, 11 Nov 2018 19:02:46 +0000 (20:02 +0100)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 17 Dec 2018 17:58:33 +0000 (14:58 -0300)
Add drop count to 'perf top' headers:

  # perf top --stdio
   PerfTop:    3549 irqs/sec  kernel:51.8%  exact: 100.0% lost: 0/0 drop: 0/0 [4000Hz cycles:ppp],  (all, 8 CPUs)

  # perf top
  Samples: 0  of event 'cycles:ppp', 4000 Hz, Event count (approx.): 0 lost: 0/0 drop: 0/0

The format is: <current period drop>/<total drop>

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Acked-by: David S. Miller <davem@davemloft.net>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/n/tip-2lj87zz8tq9ye1ntax3ulw0n@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/builtin-top.c
tools/perf/ui/browsers/hists.c
tools/perf/util/top.c
tools/perf/util/top.h

index 234232d538c23477ef36cc20cb0b0fb9d1bcc285..9166f6087e3f02ce9b66a57c1c6d675cf5c9a140 100644 (file)
@@ -1112,8 +1112,11 @@ static int deliver_event(struct ordered_events *qe,
        struct machine *machine;
        int ret = -1;
 
-       if (should_drop(qevent, top))
+       if (should_drop(qevent, top)) {
+               top->drop++;
+               top->drop_total++;
                return 0;
+       }
 
        ret = perf_evlist__parse_sample(evlist, event, &sample);
        if (ret) {
index ae208c16c8a3bd4e63b67a10f7b1c1f10c78f78c..36b262c49f51897574a0b72575c9b8a0bddf5337 100644 (file)
@@ -2223,6 +2223,10 @@ static int hists_browser__scnprintf_title(struct hist_browser *browser, char *bf
                                     " lost: %" PRIu64 "/%" PRIu64,
                                     top->lost, top->lost_total);
 
+               printed += scnprintf(bf + printed, size - printed,
+                                    " drop: %" PRIu64 "/%" PRIu64,
+                                    top->drop, top->drop_total);
+
                if (top->zero)
                        printed += scnprintf(bf + printed, size - printed, " [z]");
        }
index e6582fa6a4dba076b3d786e2fa5eaccf98ae08c5..31a8dee9af691d7ebd219f02dbb02d5b5ad87501 100644 (file)
@@ -46,8 +46,9 @@ size_t perf_top__header_snprintf(struct perf_top *top, char *bf, size_t size)
                                                        samples_per_sec;
                ret = SNPRINTF(bf, size,
                               "   PerfTop:%8.0f irqs/sec  kernel:%4.1f%%"
-                              "  exact: %4.1f%% lost: %" PRIu64 "/%" PRIu64 " [", samples_per_sec,
-                              ksamples_percent, esamples_percent, top->lost, top->lost_total);
+                              "  exact: %4.1f%% lost: %" PRIu64 "/%" PRIu64 " drop: %" PRIu64 "/%" PRIu64 " [",
+                              samples_per_sec, ksamples_percent, esamples_percent,
+                              top->lost, top->lost_total, top->drop, top->drop_total);
        } else {
                float us_samples_per_sec = top->us_samples / top->delay_secs;
                float guest_kernel_samples_per_sec = top->guest_kernel_samples / top->delay_secs;
@@ -113,5 +114,5 @@ void perf_top__reset_sample_counters(struct perf_top *top)
 {
        top->samples = top->us_samples = top->kernel_samples =
        top->exact_samples = top->guest_kernel_samples =
-       top->guest_us_samples = top->lost = 0;
+       top->guest_us_samples = top->lost = top->drop = 0;
 }
index 5bce62ebcf147e518b26bc93d4677b5cb2b9b828..19f95eaf75c8aae163be370e7c80c69cdad43678 100644 (file)
@@ -22,7 +22,7 @@ struct perf_top {
         * Symbols will be added here in perf_event__process_sample and will
         * get out after decayed.
         */
-       u64                samples, lost, lost_total;
+       u64                samples, lost, lost_total, drop, drop_total;
        u64                kernel_samples, us_samples;
        u64                exact_samples;
        u64                guest_us_samples, guest_kernel_samples;