diff options
author | Frederic Weisbecker <fweisbec@gmail.com> | 2010-05-27 10:27:47 -0400 |
---|---|---|
committer | Frederic Weisbecker <fweisbec@gmail.com> | 2010-06-24 17:36:23 -0400 |
commit | ffabd99e051e73344efe4e53d58f11643f180512 (patch) | |
tree | 89de8034980b80c05982b0854f31bb42a53ff1f0 | |
parent | 6fcf7ddbb73d677b3bb7b16f0fff1419cb8349e9 (diff) |
perf: Report lost events in perf trace debug mode
Account and report lost events in perf trace debugging mode,
useful to check the reliability of the traces.
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Masami Hiramatsu <mhiramat@redhat.com>
Cc: Tom Zanussi <tzanussi@gmail.com>
-rw-r--r-- | tools/perf/builtin-trace.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index 83df8db4f35..294da725a57 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c | |||
@@ -11,7 +11,7 @@ | |||
11 | 11 | ||
12 | static char const *script_name; | 12 | static char const *script_name; |
13 | static char const *generate_script_lang; | 13 | static char const *generate_script_lang; |
14 | static bool debug_ordering; | 14 | static bool debug_mode; |
15 | static u64 last_timestamp; | 15 | static u64 last_timestamp; |
16 | static u64 nr_unordered; | 16 | static u64 nr_unordered; |
17 | 17 | ||
@@ -92,7 +92,7 @@ static int process_sample_event(event_t *event, struct perf_session *session) | |||
92 | } | 92 | } |
93 | 93 | ||
94 | if (session->sample_type & PERF_SAMPLE_RAW) { | 94 | if (session->sample_type & PERF_SAMPLE_RAW) { |
95 | if (debug_ordering) { | 95 | if (debug_mode) { |
96 | if (data.time < last_timestamp) { | 96 | if (data.time < last_timestamp) { |
97 | pr_err("Samples misordered, previous: %llu " | 97 | pr_err("Samples misordered, previous: %llu " |
98 | "this: %llu\n", last_timestamp, | 98 | "this: %llu\n", last_timestamp, |
@@ -116,6 +116,15 @@ static int process_sample_event(event_t *event, struct perf_session *session) | |||
116 | return 0; | 116 | return 0; |
117 | } | 117 | } |
118 | 118 | ||
119 | static u64 nr_lost; | ||
120 | |||
121 | static int process_lost_event(event_t *event, struct perf_session *session __used) | ||
122 | { | ||
123 | nr_lost += event->lost.lost; | ||
124 | |||
125 | return 0; | ||
126 | } | ||
127 | |||
119 | static struct perf_event_ops event_ops = { | 128 | static struct perf_event_ops event_ops = { |
120 | .sample = process_sample_event, | 129 | .sample = process_sample_event, |
121 | .comm = event__process_comm, | 130 | .comm = event__process_comm, |
@@ -123,6 +132,7 @@ static struct perf_event_ops event_ops = { | |||
123 | .event_type = event__process_event_type, | 132 | .event_type = event__process_event_type, |
124 | .tracing_data = event__process_tracing_data, | 133 | .tracing_data = event__process_tracing_data, |
125 | .build_id = event__process_build_id, | 134 | .build_id = event__process_build_id, |
135 | .lost = process_lost_event, | ||
126 | .ordered_samples = true, | 136 | .ordered_samples = true, |
127 | }; | 137 | }; |
128 | 138 | ||
@@ -141,8 +151,10 @@ static int __cmd_trace(struct perf_session *session) | |||
141 | 151 | ||
142 | ret = perf_session__process_events(session, &event_ops); | 152 | ret = perf_session__process_events(session, &event_ops); |
143 | 153 | ||
144 | if (debug_ordering) | 154 | if (debug_mode) { |
145 | pr_err("Misordered timestamps: %llu\n", nr_unordered); | 155 | pr_err("Misordered timestamps: %llu\n", nr_unordered); |
156 | pr_err("Lost events: %llu\n", nr_lost); | ||
157 | } | ||
146 | 158 | ||
147 | return ret; | 159 | return ret; |
148 | } | 160 | } |
@@ -554,8 +566,8 @@ static const struct option options[] = { | |||
554 | "generate perf-trace.xx script in specified language"), | 566 | "generate perf-trace.xx script in specified language"), |
555 | OPT_STRING('i', "input", &input_name, "file", | 567 | OPT_STRING('i', "input", &input_name, "file", |
556 | "input file name"), | 568 | "input file name"), |
557 | OPT_BOOLEAN('d', "debug-ordering", &debug_ordering, | 569 | OPT_BOOLEAN('d', "debug-mode", &debug_mode, |
558 | "check that samples time ordering is monotonic"), | 570 | "do various checks like samples ordering and lost events"), |
559 | 571 | ||
560 | OPT_END() | 572 | OPT_END() |
561 | }; | 573 | }; |