• Anton Blanchard's avatar
    perf: Fix inconsistency between IP and callchain sampling · 339ce1a4
    Anton Blanchard authored
    When running perf across all cpus with backtracing (-a -g), sometimes we
    get samples without associated backtraces:
    
        23.44%         init  [kernel]                     [k] restore
        11.46%         init                       eeba0c  [k] 0x00000000eeba0c
         6.77%      swapper  [kernel]                     [k] .perf_ctx_adjust_freq
         5.73%         init  [kernel]                     [k] .__trace_hcall_entry
         4.69%         perf  libc-2.9.so                  [.] 0x0000000006bb8c
                           |
                           |--11.11%-- 0xfffa941bbbc
    
    It turns out the backtrace code has a check for the idle task and the IP
    sampling does not. This creates problems when profiling an interrupt
    heavy workload (in my case 10Gbit ethernet) since we get no backtraces
    for interrupts received while idle (ie most of the workload).
    
    Right now x86 and sh check that current is not NULL, which should never
    happen so remove that too.
    
    Idle task's exclusion must be performed from the core code, on top
    of perf_event_attr:exclude_idle.
    Signed-off-by: default avatarAnton Blanchard <anton@samba.org>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Cc: Paul Mundt <lethal@linux-sh.org>
    LKML-Reference: <20100118054707.GT12666@kryten>
    Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
    339ce1a4
perf_callchain.c 2.01 KB