Skip to content

Commit

Permalink
perf evlist: Show event attribute details
Browse files Browse the repository at this point in the history
There was no easy way to see the frequency used, and with the change of
default, we better provide one.

[root@sandy linux]# perf evlist -F
cycles: sample_freq=4000
[root@sandy linux]# perf evlist -v
cycles: sample_freq=4000, size: 80, sample_type: 391, read_format: 7, disabled: 1, inherit: 1, mmap: 1, comm: 1, freq: 1, sample_id_all: 1, exclude_guest: 1
[root@sandy linux]#

Cc: David Ahern <[email protected]>
Cc: Frederic Weisbecker <[email protected]>
Cc: Mike Galbraith <[email protected]>
Cc: Namhyung Kim <[email protected]>
Cc: Paul Mackerras <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Stephane Eranian <[email protected]>
Link: http://lkml.kernel.org/n/[email protected]
Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
  • Loading branch information
acmel committed May 22, 2012
1 parent 447a601 commit 26252ea
Show file tree
Hide file tree
Showing 2 changed files with 100 additions and 11 deletions.
8 changes: 8 additions & 0 deletions tools/perf/Documentation/perf-evlist.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,14 @@ OPTIONS
--input=::
Input file name. (default: perf.data unless stdin is a fifo)

-F::
--freq=::
Show just the sample frequency used for each event.

-v::
--verbose=::
Show all fields.

SEE ALSO
--------
linkperf:perf-record[1], linkperf:perf-list[1],
Expand Down
103 changes: 92 additions & 11 deletions tools/perf/builtin-evlist.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,40 @@
#include "util/parse-options.h"
#include "util/session.h"

static const char *input_name;
struct perf_attr_details {
bool freq;
bool verbose;
};

static int comma_printf(bool *first, const char *fmt, ...)
{
va_list args;
int ret = 0;

if (!*first) {
ret += printf(",");
} else {
ret += printf(":");
*first = false;
}

va_start(args, fmt);
ret += vprintf(fmt, args);
va_end(args);
return ret;
}

static int __if_print(bool *first, const char *field, u64 value)
{
if (value == 0)
return 0;

return comma_printf(first, " %s: %" PRIu64, field, value);
}

#define if_print(field) __if_print(&first, #field, pos->attr.field)

static int __cmd_evlist(void)
static int __cmd_evlist(const char *input_name, struct perf_attr_details *details)
{
struct perf_session *session;
struct perf_evsel *pos;
Expand All @@ -26,8 +57,52 @@ static int __cmd_evlist(void)
if (session == NULL)
return -ENOMEM;

list_for_each_entry(pos, &session->evlist->entries, node)
printf("%s\n", event_name(pos));
list_for_each_entry(pos, &session->evlist->entries, node) {
bool first = true;

printf("%s", event_name(pos));

if (details->verbose || details->freq) {
comma_printf(&first, " sample_freq=%" PRIu64,
(u64)pos->attr.sample_freq);
}

if (details->verbose) {
if_print(type);
if_print(config);
if_print(config1);
if_print(config2);
if_print(size);
if_print(sample_type);
if_print(read_format);
if_print(disabled);
if_print(inherit);
if_print(pinned);
if_print(exclusive);
if_print(exclude_user);
if_print(exclude_kernel);
if_print(exclude_hv);
if_print(exclude_idle);
if_print(mmap);
if_print(comm);
if_print(freq);
if_print(inherit_stat);
if_print(enable_on_exec);
if_print(task);
if_print(watermark);
if_print(precise_ip);
if_print(mmap_data);
if_print(sample_id_all);
if_print(exclude_host);
if_print(exclude_guest);
if_print(__reserved_1);
if_print(wakeup_events);
if_print(bp_type);
if_print(branch_sample_type);
}

putchar('\n');
}

perf_session__delete(session);
return 0;
Expand All @@ -38,17 +113,23 @@ static const char * const evlist_usage[] = {
NULL
};

static const struct option options[] = {
OPT_STRING('i', "input", &input_name, "file",
"input file name"),
OPT_END()
};

int cmd_evlist(int argc, const char **argv, const char *prefix __used)
{
struct perf_attr_details details = { .verbose = false, };
const char *input_name;
const struct option options[] = {
OPT_STRING('i', "input", &input_name, "file",
"Input file name"),
OPT_BOOLEAN('F', "freq", &details.freq,
"Show the sample frequency"),
OPT_BOOLEAN('v', "verbose", &details.verbose,
"Show all event attr details"),
OPT_END()
};

argc = parse_options(argc, argv, options, evlist_usage, 0);
if (argc)
usage_with_options(evlist_usage, options);

return __cmd_evlist();
return __cmd_evlist(input_name, &details);
}

0 comments on commit 26252ea

Please sign in to comment.