[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1276141760-11590-6-git-send-regression-fweisbec@gmail.com>
Date: Thu, 10 Jun 2010 05:49:20 +0200
From: Frederic Weisbecker <fweisbec@...il.com>
To: Ingo Molnar <mingo@...e.hu>
Cc: LKML <linux-kernel@...r.kernel.org>,
Frederic Weisbecker <fweisbec@...il.com>,
Ingo Molnar <mingo@...e.hu>,
Peter Zijlstra <a.p.zijlstra@...llo.nl>,
Arnaldo Carvalho de Melo <acme@...hat.com>,
Paul Mackerras <paulus@...ba.org>,
Cyrill Gorcunov <gorcunov@...il.com>,
Zhang Yanmin <yanmin_zhang@...ux.intel.com>,
Steven Rostedt <rostedt@...dmis.org>
Subject: [PATCH 5/5] perf: Support for task/softirq/hardirq exclusion on tools
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@...il.com>
Cc: Ingo Molnar <mingo@...e.hu>
Cc: Peter Zijlstra <a.p.zijlstra@...llo.nl>
Cc: Arnaldo Carvalho de Melo <acme@...hat.com>
Cc: Paul Mackerras <paulus@...ba.org>
Cc: Cyrill Gorcunov <gorcunov@...il.com>
Cc: Zhang Yanmin <yanmin_zhang@...ux.intel.com>
Cc: Steven Rostedt <rostedt@...dmis.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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists