Prev: [PATCH 0/5] perf events finer grained context instrumentation / context exclusion
Next: [PATCH 1/5] perf: Provide a proper stop action for software events
From: Frederic Weisbecker on 9 Jun 2010 23:50 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(a)gmail.com> Cc: Ingo Molnar <mingo(a)elte.hu> Cc: Peter Zijlstra <a.p.zijlstra(a)chello.nl> Cc: Arnaldo Carvalho de Melo <acme(a)redhat.com> Cc: Paul Mackerras <paulus(a)samba.org> Cc: Cyrill Gorcunov <gorcunov(a)gmail.com> Cc: Zhang Yanmin <yanmin_zhang(a)linux.intel.com> Cc: Steven Rostedt <rostedt(a)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 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |