aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util/mem-events.c
diff options
context:
space:
mode:
authorJiri Olsa <jolsa@kernel.org>2016-02-15 03:34:35 -0500
committerArnaldo Carvalho de Melo <acme@redhat.com>2016-02-23 10:15:59 -0500
commitce1e22b08f0728e840614d3d0fc43fd1d6b7f7a2 (patch)
tree284f4a451e2a6b01751532b02fa8daa1eb8e0ac4 /tools/perf/util/mem-events.c
parentacbe613e0c03d59cab21aec3565cdb28c7df98c3 (diff)
perf mem: Add -e record option
Adding -e option for perf mem record command, to be able to specify memory event directly. Get list of available events: $ perf mem record -e list ldlat-loads ldlat-stores Monitor ldlat-loads: $ perf mem record -e ldlat-loads true Committer notes: Further testing: # perf mem record -e ldlat-loads true [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.020 MB perf.data (10 samples) ] # perf evlist cpu/mem-loads,ldlat=30/P # Signed-off-by: Jiri Olsa <jolsa@kernel.org> Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: David Ahern <dsahern@gmail.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/r/1455525293-8671-6-git-send-email-jolsa@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util/mem-events.c')
-rw-r--r--tools/perf/util/mem-events.c47
1 files changed, 44 insertions, 3 deletions
diff --git a/tools/perf/util/mem-events.c b/tools/perf/util/mem-events.c
index c6ba0a19ec9a..b1507c04b257 100644
--- a/tools/perf/util/mem-events.c
+++ b/tools/perf/util/mem-events.c
@@ -1,10 +1,51 @@
1#include <stddef.h>
2#include <stdlib.h>
3#include <string.h>
4#include <errno.h>
1#include "mem-events.h" 5#include "mem-events.h"
6#include "debug.h"
2 7
3#define E(n) { .name = n } 8#define E(t, n) { .tag = t, .name = n }
4 9
5struct perf_mem_event perf_mem_events[PERF_MEM_EVENTS__MAX] = { 10struct perf_mem_event perf_mem_events[PERF_MEM_EVENTS__MAX] = {
6 E("cpu/mem-loads,ldlat=30/P"), 11 E("ldlat-loads", "cpu/mem-loads,ldlat=30/P"),
7 E("cpu/mem-stores/P"), 12 E("ldlat-stores", "cpu/mem-stores/P"),
8}; 13};
9 14
10#undef E 15#undef E
16
17int perf_mem_events__parse(const char *str)
18{
19 char *tok, *saveptr = NULL;
20 bool found = false;
21 char *buf;
22 int j;
23
24 /* We need buffer that we know we can write to. */
25 buf = malloc(strlen(str) + 1);
26 if (!buf)
27 return -ENOMEM;
28
29 strcpy(buf, str);
30
31 tok = strtok_r((char *)buf, ",", &saveptr);
32
33 while (tok) {
34 for (j = 0; j < PERF_MEM_EVENTS__MAX; j++) {
35 struct perf_mem_event *e = &perf_mem_events[j];
36
37 if (strstr(e->tag, tok))
38 e->record = found = true;
39 }
40
41 tok = strtok_r(NULL, ",", &saveptr);
42 }
43
44 free(buf);
45
46 if (found)
47 return 0;
48
49 pr_err("failed: event '%s' not found, use '-e list' to get list of available events\n", str);
50 return -1;
51}