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    [W:0.043 / U:62.604 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site