• Namhyung Kim's avatar
    perf lock contention: Add -Y/--type-filter option · b4a7eff9
    Namhyung Kim authored
    The -Y/--type-filter option is to filter the result for specific lock
    types only.  It can accept comma-separated values.  Note that it would
    accept type names like one in the output.  spinlock, mutex, rwsem:R and
    so on.
    
    For RW-variant lock types, it converts the name to the both variants.
    In other words, "rwsem" is same as "rwsem:R,rwsem:W".  Also note that
    "mutex" has two different encoding - one for sleeping wait, another for
    optimistic spinning.  Add "mutex-spin" entry for the lock_type_table so
    that we can add it for "mutex" under the table.
    
      $ sudo ./perf lock record -a -- ./perf bench sched messaging
    
      $ sudo ./perf lock con -E 5 -Y spinlock
       contended  total wait   max wait  avg wait      type  caller
    
             802     1.26 ms   11.73 us   1.58 us  spinlock  __wake_up_common_lock+0x62
              13   787.16 us  105.44 us  60.55 us  spinlock  remove_wait_queue+0x14
              12   612.96 us   78.70 us  51.08 us  spinlock  prepare_to_wait+0x27
             114   340.68 us   12.61 us   2.99 us  spinlock  try_to_wake_up+0x1f5
              83   226.38 us    9.15 us   2.73 us  spinlock  folio_lruvec_lock_irqsave+0x5e
    
    Committer notes:
    
    Make get_type_flag() return UINT_MAX for error instad of -1UL, as that
    function returns 'unsigned int' and we store the value on a 'unsigned
    int' 'flags' variable which makes clang unhappy:
    
      35    98.23 fedora:37                     : FAIL clang version 15.0.6 (Fedora 15.0.6-1.fc37)
        builtin-lock.c:2012:14: error: result of comparison of constant 18446744073709551615 with expression of type 'unsigned int' is always true [-Werror,-Wtautological-constant-out-of-range-compare]
                                if (flags != -1UL) {
                                    ~~~~~ ^  ~~~~
        builtin-lock.c:2021:14: error: result of comparison of constant 18446744073709551615 with expression of type 'unsigned int' is always true [-Werror,-Wtautological-constant-out-of-range-compare]
                                if (flags != -1UL) {
                                    ~~~~~ ^  ~~~~
        builtin-lock.c:2037:14: error: result of comparison of constant 18446744073709551615 with expression of type 'unsigned int' is always true [-Werror,-Wtautological-constant-out-of-range-compare]
                                if (flags != -1UL) {
                                    ~~~~~ ^  ~~~~
        3 errors generated.
    Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Blake Jones <blakejones@google.com>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Song Liu <song@kernel.org>
    Cc: bpf@vger.kernel.org
    Link: https://lore.kernel.org/r/20221219201732.460111-3-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    b4a7eff9
lock-contention.h 3.45 KB