lkml.org 
[lkml]   [2010]   [Jun]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH 5/5] perf: Support for task/softirq/hardirq exclusion on tools
Date
Bring the following new flags on perf events:

- t = Profile task context
- s = Profile softirq context
- i = Profile hardirq context

Example:

perf record -a -g -e cycles:i ls -R /usr > /dev/null
3.11% ls [kernel.kallsyms] [k] __lock_acquire
|
--- __lock_acquire
|
|--95.83%-- lock_acquire
| _raw_spin_lock
| |
| |--30.43%-- perf_ctx_adjust_freq
| | perf_event_task_tick
| | scheduler_tick
| | update_process_times
| | tick_sched_timer
| | __run_hrtimer
| | hrtimer_interrupt
| | smp_apic_timer_interrupt
| | apic_timer_interrupt
Signed-off-by: Frederic 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: Cyrill Gorcunov <gorcunov@gmail.com>
Cc: Zhang Yanmin <yanmin_zhang@linux.intel.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
---
tools/perf/util/parse-events.c | 37 ++++++++++++++++++++++++++-----------
1 files changed, 26 insertions(+), 11 deletions(-)
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index 9bf0f40..7a18e71 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -688,24 +688,36 @@ static enum event_result
parse_event_modifier(const char **strp, struct perf_event_attr *attr)
{
const char *str = *strp;
- int exclude = 0;
- int eu = 0, ek = 0, eh = 0, precise = 0;
+ int exclude_ring = 0, exclude_context = 0;
+ int eu = 0, ek = 0, eh = 0, et = 0, es = 0, ei = 0, precise = 0;

if (*str++ != ':')
return 0;
while (*str) {
if (*str == 'u') {
- if (!exclude)
- exclude = eu = ek = eh = 1;
+ if (!exclude_ring)
+ exclude_ring = eu = ek = eh = 1;
eu = 0;
} else if (*str == 'k') {
- if (!exclude)
- exclude = eu = ek = eh = 1;
+ if (!exclude_ring)
+ exclude_ring = eu = ek = eh = 1;
ek = 0;
} else if (*str == 'h') {
- if (!exclude)
- exclude = eu = ek = eh = 1;
+ if (!exclude_ring)
+ exclude_ring = eu = ek = eh = 1;
eh = 0;
+ } else if (*str == 't') {
+ if (!exclude_context)
+ exclude_context = et = es = ei = 1;
+ et = 0;
+ } else if (*str == 's') {
+ if (!exclude_context)
+ exclude_context = et = es = ei = 1;
+ es = 0;
+ } else if (*str == 'i') {
+ if (!exclude_context)
+ exclude_context = et = es = ei = 1;
+ ei = 0;
} else if (*str == 'p') {
precise++;
} else
@@ -715,9 +727,12 @@ parse_event_modifier(const char **strp, struct perf_event_attr *attr)
}
if (str >= *strp + 2) {
*strp = str;
- attr->exclude_user = eu;
- attr->exclude_kernel = ek;
- attr->exclude_hv = eh;
+ attr->exclude_user = eu;
+ attr->exclude_kernel = ek;
+ attr->exclude_hv = eh;
+ attr->exclude_task = et;
+ attr->exclude_softirq = es;
+ attr->exclude_hardirq = ei;
attr->precise_ip = precise;
return 1;
}
--
1.6.2.3


\
 
 \ /
  Last update: 2010-06-12 09:37    [from the cache]
©2003-2011 Jasper Spaans