Skip to content

Commit

Permalink
perf tools: Add stat round user level event
Browse files Browse the repository at this point in the history
Adding the stat round event to be stored after each stat interval round,
so that report tools (report/script) gets notified and process interval
data.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Tested-by: Kan Liang <kan.liang@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1445784728-21732-18-git-send-email-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
  • Loading branch information
Jiri Olsa authored and Arnaldo Carvalho de Melo committed Dec 17, 2015
1 parent 0ea0e35 commit 2d8f0f1
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 1 deletion.
1 change: 1 addition & 0 deletions tools/perf/util/event.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ static const char *perf_event__names[] = {
[PERF_RECORD_CPU_MAP] = "CPU_MAP",
[PERF_RECORD_STAT_CONFIG] = "STAT_CONFIG",
[PERF_RECORD_STAT] = "STAT",
[PERF_RECORD_STAT_ROUND] = "STAT_ROUND",
};

const char *perf_event__name(unsigned int id)
Expand Down
13 changes: 13 additions & 0 deletions tools/perf/util/event.h
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,7 @@ enum perf_user_event_type { /* above any possible kernel type */
PERF_RECORD_CPU_MAP = 74,
PERF_RECORD_STAT_CONFIG = 75,
PERF_RECORD_STAT = 76,
PERF_RECORD_STAT_ROUND = 77,
PERF_RECORD_HEADER_MAX
};

Expand Down Expand Up @@ -432,6 +433,17 @@ struct stat_event {
};
};

enum {
PERF_STAT_ROUND_TYPE__INTERVAL = 0,
PERF_STAT_ROUND_TYPE__FINAL = 1,
};

struct stat_round_event {
struct perf_event_header header;
u64 type;
u64 time;
};

union perf_event {
struct perf_event_header header;
struct mmap_event mmap;
Expand All @@ -458,6 +470,7 @@ union perf_event {
struct cpu_map_event cpu_map;
struct stat_config_event stat_config;
struct stat_event stat;
struct stat_round_event stat_round;
};

void perf_event__print_totals(void);
Expand Down
21 changes: 21 additions & 0 deletions tools/perf/util/session.c
Original file line number Diff line number Diff line change
Expand Up @@ -333,6 +333,15 @@ static int process_stat_stub(struct perf_tool *tool __maybe_unused,
return 0;
}

static int process_stat_round_stub(struct perf_tool *tool __maybe_unused,
union perf_event *event __maybe_unused,
struct perf_session *perf_session
__maybe_unused)
{
dump_printf(": unhandled!\n");
return 0;
}

void perf_tool__fill_defaults(struct perf_tool *tool)
{
if (tool->sample == NULL)
Expand Down Expand Up @@ -391,6 +400,8 @@ void perf_tool__fill_defaults(struct perf_tool *tool)
tool->stat_config = process_event_stat_config_stub;
if (tool->stat == NULL)
tool->stat = process_stat_stub;
if (tool->stat_round == NULL)
tool->stat_round = process_stat_round_stub;
}

static void swap_sample_id_all(union perf_event *event, void *data)
Expand Down Expand Up @@ -729,6 +740,13 @@ static void perf_event__stat_swap(union perf_event *event,
event->stat.run = bswap_64(event->stat.run);
}

static void perf_event__stat_round_swap(union perf_event *event,
bool sample_id_all __maybe_unused)
{
event->stat_round.type = bswap_64(event->stat_round.type);
event->stat_round.time = bswap_64(event->stat_round.time);
}

typedef void (*perf_event__swap_op)(union perf_event *event,
bool sample_id_all);

Expand Down Expand Up @@ -760,6 +778,7 @@ static perf_event__swap_op perf_event__swap_ops[] = {
[PERF_RECORD_CPU_MAP] = perf_event__cpu_map_swap,
[PERF_RECORD_STAT_CONFIG] = perf_event__stat_config_swap,
[PERF_RECORD_STAT] = perf_event__stat_swap,
[PERF_RECORD_STAT_ROUND] = perf_event__stat_round_swap,
[PERF_RECORD_HEADER_MAX] = NULL,
};

Expand Down Expand Up @@ -1304,6 +1323,8 @@ static s64 perf_session__process_user_event(struct perf_session *session,
return tool->stat_config(tool, event, session);
case PERF_RECORD_STAT:
return tool->stat(tool, event, session);
case PERF_RECORD_STAT_ROUND:
return tool->stat_round(tool, event, session);
default:
return -EINVAL;
}
Expand Down
3 changes: 2 additions & 1 deletion tools/perf/util/tool.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,8 @@ struct perf_tool {
thread_map,
cpu_map,
stat_config,
stat;
stat,
stat_round;
event_op3 auxtrace;
bool ordered_events;
bool ordering_requires_timestamps;
Expand Down

0 comments on commit 2d8f0f1

Please sign in to comment.