• Namhyung Kim's avatar
    perf lock contention: Support filters for different aggregation · ebab2916
    Namhyung Kim authored
    It'd be useful to filter other than the current aggregation mode.  For
    example, users may want to see callstacks for specific locks only.  Or
    they may want tasks from a certain callstack.
    
    The tracepoints already collected the information but it needs to check
    the condition again when processing the event.  And it needs to change
    BPF to allow the key combinations.
    
    The lock contentions on 'rcu_state' spinlock can be monitored:
    
      $ sudo perf lock con -abv -L rcu_state sleep 1
      ...
       contended   total wait     max wait     avg wait         type   caller
    
               4    151.39 us     62.57 us     37.85 us     spinlock   rcu_core+0xcb
                              0xffffffff81fd1666  _raw_spin_lock_irqsave+0x46
                              0xffffffff8172d76b  rcu_core+0xcb
                              0xffffffff822000eb  __softirqentry_text_start+0xeb
                              0xffffffff816a0ba9  __irq_exit_rcu+0xc9
                              0xffffffff81fc0112  sysvec_apic_timer_interrupt+0xa2
                              0xffffffff82000e46  asm_sysvec_apic_timer_interrupt+0x16
                              0xffffffff81d49f78  cpuidle_enter_state+0xd8
                              0xffffffff81d4a259  cpuidle_enter+0x29
               1     30.21 us     30.21 us     30.21 us     spinlock   rcu_core+0xcb
                              0xffffffff81fd1666  _raw_spin_lock_irqsave+0x46
                              0xffffffff8172d76b  rcu_core+0xcb
                              0xffffffff822000eb  __softirqentry_text_start+0xeb
                              0xffffffff816a0ba9  __irq_exit_rcu+0xc9
                              0xffffffff81fc00c4  sysvec_apic_timer_interrupt+0x54
                              0xffffffff82000e46  asm_sysvec_apic_timer_interrupt+0x16
               1     28.84 us     28.84 us     28.84 us     spinlock   rcu_accelerate_cbs_unlocked+0x40
                              0xffffffff81fd1c60  _raw_spin_lock+0x30
                              0xffffffff81728cf0  rcu_accelerate_cbs_unlocked+0x40
                              0xffffffff8172da82  rcu_core+0x3e2
                              0xffffffff822000eb  __softirqentry_text_start+0xeb
                              0xffffffff816a0ba9  __irq_exit_rcu+0xc9
                              0xffffffff81fc0112  sysvec_apic_timer_interrupt+0xa2
                              0xffffffff82000e46  asm_sysvec_apic_timer_interrupt+0x16
                              0xffffffff81d49f78  cpuidle_enter_state+0xd8
      ...
    
    To see tasks calling 'rcu_core' function:
    
      $ sudo perf lock con -abt -S rcu_core sleep 1
       contended   total wait     max wait     avg wait          pid   comm
    
              19     23.46 us      2.21 us      1.23 us            0   swapper
               2     18.37 us     17.01 us      9.19 us      2061859   ThreadPoolForeg
               3      5.76 us      1.97 us      1.92 us         3909   pipewire-pulse
               1      2.26 us      2.26 us      2.26 us      1809271   MediaSu~isor #2
               1      1.97 us      1.97 us      1.97 us      1514882   Chrome_ChildIOT
               1       987 ns       987 ns       987 ns         3740   pipewire-pulse
    Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Hao Luo <haoluo@google.com>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Juri Lelli <juri.lelli@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Song Liu <song@kernel.org>
    Cc: bpf@vger.kernel.org
    Link: https://lore.kernel.org/r/20230203021324.143540-4-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    ebab2916
lock_data.h 559 Bytes