Commit ffabd99e authored by Frederic Weisbecker's avatar Frederic Weisbecker

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: default avatarFrederic 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>
parent 6fcf7ddb
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
static char const *script_name; static char const *script_name;
static char const *generate_script_lang; static char const *generate_script_lang;
static bool debug_ordering; static bool debug_mode;
static u64 last_timestamp; static u64 last_timestamp;
static u64 nr_unordered; static u64 nr_unordered;
...@@ -92,7 +92,7 @@ static int process_sample_event(event_t *event, struct perf_session *session) ...@@ -92,7 +92,7 @@ static int process_sample_event(event_t *event, struct perf_session *session)
} }
if (session->sample_type & PERF_SAMPLE_RAW) { if (session->sample_type & PERF_SAMPLE_RAW) {
if (debug_ordering) { if (debug_mode) {
if (data.time < last_timestamp) { if (data.time < last_timestamp) {
pr_err("Samples misordered, previous: %llu " pr_err("Samples misordered, previous: %llu "
"this: %llu\n", last_timestamp, "this: %llu\n", last_timestamp,
...@@ -116,6 +116,15 @@ static int process_sample_event(event_t *event, struct perf_session *session) ...@@ -116,6 +116,15 @@ static int process_sample_event(event_t *event, struct perf_session *session)
return 0; return 0;
} }
static u64 nr_lost;
static int process_lost_event(event_t *event, struct perf_session *session __used)
{
nr_lost += event->lost.lost;
return 0;
}
static struct perf_event_ops event_ops = { static struct perf_event_ops event_ops = {
.sample = process_sample_event, .sample = process_sample_event,
.comm = event__process_comm, .comm = event__process_comm,
...@@ -123,6 +132,7 @@ static struct perf_event_ops event_ops = { ...@@ -123,6 +132,7 @@ static struct perf_event_ops event_ops = {
.event_type = event__process_event_type, .event_type = event__process_event_type,
.tracing_data = event__process_tracing_data, .tracing_data = event__process_tracing_data,
.build_id = event__process_build_id, .build_id = event__process_build_id,
.lost = process_lost_event,
.ordered_samples = true, .ordered_samples = true,
}; };
...@@ -141,8 +151,10 @@ static int __cmd_trace(struct perf_session *session) ...@@ -141,8 +151,10 @@ static int __cmd_trace(struct perf_session *session)
ret = perf_session__process_events(session, &event_ops); ret = perf_session__process_events(session, &event_ops);
if (debug_ordering) if (debug_mode) {
pr_err("Misordered timestamps: %llu\n", nr_unordered); pr_err("Misordered timestamps: %llu\n", nr_unordered);
pr_err("Lost events: %llu\n", nr_lost);
}
return ret; return ret;
} }
...@@ -554,8 +566,8 @@ static const struct option options[] = { ...@@ -554,8 +566,8 @@ static const struct option options[] = {
"generate perf-trace.xx script in specified language"), "generate perf-trace.xx script in specified language"),
OPT_STRING('i', "input", &input_name, "file", OPT_STRING('i', "input", &input_name, "file",
"input file name"), "input file name"),
OPT_BOOLEAN('d', "debug-ordering", &debug_ordering, OPT_BOOLEAN('d', "debug-mode", &debug_mode,
"check that samples time ordering is monotonic"), "do various checks like samples ordering and lost events"),
OPT_END() OPT_END()
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment