aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util/evsel.h
diff options
context:
space:
mode:
authorJiri Olsa <jolsa@redhat.com>2012-08-08 06:22:36 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2012-08-14 16:03:49 -0400
commit6a4bb04caacc8c2d06f345130e9086e3fea38ca7 (patch)
tree96a4c4e049c303a92ababf2807b5b8044f55bf74 /tools/perf/util/evsel.h
parentf5b1135bf79557563a814e53ecd610cce663c1e3 (diff)
perf tools: Enable grouping logic for parsed events
This patch adds a functionality that allows to create event groups based on the way they are specified on the command line. Adding functionality to the '{}' group syntax introduced in earlier patch. The current '--group/-g' option behaviour remains intact. If you specify it for record/stat/top command, all the specified events become members of a single group with the first event as a group leader. With the new '{}' group syntax you can create group like: # perf record -e '{cycles,faults}' ls resulting in single event group containing 'cycles' and 'faults' events, with cycles event as group leader. All groups are created with regards to threads and cpus. Thus recording an event group within a 2 threads on server with 4 CPUs will create 8 separate groups. Examples (first event in brackets is group leader): # 1 group (cpu-clock,task-clock) perf record --group -e cpu-clock,task-clock ls perf record -e '{cpu-clock,task-clock}' ls # 2 groups (cpu-clock,task-clock) (minor-faults,major-faults) perf record -e '{cpu-clock,task-clock},{minor-faults,major-faults}' ls # 1 group (cpu-clock,task-clock,minor-faults,major-faults) perf record --group -e cpu-clock,task-clock -e minor-faults,major-faults ls perf record -e '{cpu-clock,task-clock,minor-faults,major-faults}' ls # 2 groups (cpu-clock,task-clock) (minor-faults,major-faults) perf record -e '{cpu-clock,task-clock} -e '{minor-faults,major-faults}' \ -e instructions ls # 1 group # (cpu-clock,task-clock,minor-faults,major-faults,instructions) perf record --group -e cpu-clock,task-clock \ -e minor-faults,major-faults -e instructions ls perf record -e '{cpu-clock,task-clock,minor-faults,major-faults,instructions}' ls It's possible to use standard event modifier for a group, which spans over all events in the group and updates each event modifier settings, for example: # perf record -r '{faults:k,cache-references}:p' resulting in ':kp' modifier being used for 'faults' and ':p' modifier being used for 'cache-references' event. Reviewed-by: Namhyung Kim <namhyung@kernel.org> Signed-off-by: Jiri Olsa <jolsa@redhat.com> Acked-by: Peter Zijlstra <peterz@infradead.org> Cc: Andi Kleen <andi@firstfloor.org> Cc: Arnaldo Carvalho de Melo <acme@ghostprotocols.net> Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Ulrich Drepper <drepper@gmail.com> Link: http://lkml.kernel.org/n/tip-ho42u0wcr8mn1otkalqi13qp@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util/evsel.h')
-rw-r--r--tools/perf/util/evsel.h11
1 files changed, 5 insertions, 6 deletions
diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h
index 6a258c90e7ce..c411b421c888 100644
--- a/tools/perf/util/evsel.h
+++ b/tools/perf/util/evsel.h
@@ -70,6 +70,8 @@ struct perf_evsel {
70 bool supported; 70 bool supported;
71 /* parse modifier helper */ 71 /* parse modifier helper */
72 int exclude_GH; 72 int exclude_GH;
73 struct perf_evsel *leader;
74 char *group_name;
73}; 75};
74 76
75struct cpu_map; 77struct cpu_map;
@@ -109,14 +111,11 @@ void perf_evsel__free_id(struct perf_evsel *evsel);
109void perf_evsel__close_fd(struct perf_evsel *evsel, int ncpus, int nthreads); 111void perf_evsel__close_fd(struct perf_evsel *evsel, int ncpus, int nthreads);
110 112
111int perf_evsel__open_per_cpu(struct perf_evsel *evsel, 113int perf_evsel__open_per_cpu(struct perf_evsel *evsel,
112 struct cpu_map *cpus, bool group, 114 struct cpu_map *cpus);
113 struct xyarray *group_fds);
114int perf_evsel__open_per_thread(struct perf_evsel *evsel, 115int perf_evsel__open_per_thread(struct perf_evsel *evsel,
115 struct thread_map *threads, bool group, 116 struct thread_map *threads);
116 struct xyarray *group_fds);
117int perf_evsel__open(struct perf_evsel *evsel, struct cpu_map *cpus, 117int perf_evsel__open(struct perf_evsel *evsel, struct cpu_map *cpus,
118 struct thread_map *threads, bool group, 118 struct thread_map *threads);
119 struct xyarray *group_fds);
120void perf_evsel__close(struct perf_evsel *evsel, int ncpus, int nthreads); 119void perf_evsel__close(struct perf_evsel *evsel, int ncpus, int nthreads);
121 120
122#define perf_evsel__match(evsel, t, c) \ 121#define perf_evsel__match(evsel, t, c) \