162306a36Sopenharmony_ciperf-lock(1) 262306a36Sopenharmony_ci============ 362306a36Sopenharmony_ci 462306a36Sopenharmony_ciNAME 562306a36Sopenharmony_ci---- 662306a36Sopenharmony_ciperf-lock - Analyze lock events 762306a36Sopenharmony_ci 862306a36Sopenharmony_ciSYNOPSIS 962306a36Sopenharmony_ci-------- 1062306a36Sopenharmony_ci[verse] 1162306a36Sopenharmony_ci'perf lock' {record|report|script|info|contention} 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ciDESCRIPTION 1462306a36Sopenharmony_ci----------- 1562306a36Sopenharmony_ciYou can analyze various lock behaviours 1662306a36Sopenharmony_ciand statistics with this 'perf lock' command. 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci 'perf lock record <command>' records lock events 1962306a36Sopenharmony_ci between start and end <command>. And this command 2062306a36Sopenharmony_ci produces the file "perf.data" which contains tracing 2162306a36Sopenharmony_ci results of lock events. 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci 'perf lock report' reports statistical data. 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci 'perf lock script' shows raw lock events. 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci 'perf lock info' shows metadata like threads or addresses 2862306a36Sopenharmony_ci of lock instances. 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci 'perf lock contention' shows contention statistics. 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ciCOMMON OPTIONS 3362306a36Sopenharmony_ci-------------- 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci-i:: 3662306a36Sopenharmony_ci--input=<file>:: 3762306a36Sopenharmony_ci Input file name. (default: perf.data unless stdin is a fifo) 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci--output=<file>:: 4062306a36Sopenharmony_ci Output file name for perf lock contention and report. 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci-v:: 4362306a36Sopenharmony_ci--verbose:: 4462306a36Sopenharmony_ci Be more verbose (show symbol address, etc). 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci-q:: 4762306a36Sopenharmony_ci--quiet:: 4862306a36Sopenharmony_ci Do not show any warnings or messages. (Suppress -v) 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci-D:: 5162306a36Sopenharmony_ci--dump-raw-trace:: 5262306a36Sopenharmony_ci Dump raw trace in ASCII. 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci-f:: 5562306a36Sopenharmony_ci--force:: 5662306a36Sopenharmony_ci Don't complain, do it. 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci--vmlinux=<file>:: 5962306a36Sopenharmony_ci vmlinux pathname 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci--kallsyms=<file>:: 6262306a36Sopenharmony_ci kallsyms pathname 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ciREPORT OPTIONS 6662306a36Sopenharmony_ci-------------- 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ci-k:: 6962306a36Sopenharmony_ci--key=<value>:: 7062306a36Sopenharmony_ci Sorting key. Possible values: acquired (default), contended, 7162306a36Sopenharmony_ci avg_wait, wait_total, wait_max, wait_min. 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ci-F:: 7462306a36Sopenharmony_ci--field=<value>:: 7562306a36Sopenharmony_ci Output fields. By default it shows all the fields but users can 7662306a36Sopenharmony_ci customize that using this. Possible values: acquired, contended, 7762306a36Sopenharmony_ci avg_wait, wait_total, wait_max, wait_min. 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_ci-c:: 8062306a36Sopenharmony_ci--combine-locks:: 8162306a36Sopenharmony_ci Merge lock instances in the same class (based on name). 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ci-t:: 8462306a36Sopenharmony_ci--threads:: 8562306a36Sopenharmony_ci The -t option is to show per-thread lock stat like below: 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ci $ perf lock report -t -F acquired,contended,avg_wait 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ci Name acquired contended avg wait (ns) 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci perf 240569 9 5784 9262306a36Sopenharmony_ci swapper 106610 19 543 9362306a36Sopenharmony_ci :15789 17370 2 14538 9462306a36Sopenharmony_ci ContainerMgr 8981 6 874 9562306a36Sopenharmony_ci sleep 5275 1 11281 9662306a36Sopenharmony_ci ContainerThread 4416 4 944 9762306a36Sopenharmony_ci RootPressureThr 3215 5 1215 9862306a36Sopenharmony_ci rcu_preempt 2954 0 0 9962306a36Sopenharmony_ci ContainerMgr 2560 0 0 10062306a36Sopenharmony_ci unnamed 1873 0 0 10162306a36Sopenharmony_ci EventManager_De 1845 1 636 10262306a36Sopenharmony_ci futex-default-S 1609 0 0 10362306a36Sopenharmony_ci 10462306a36Sopenharmony_ci-E:: 10562306a36Sopenharmony_ci--entries=<value>:: 10662306a36Sopenharmony_ci Display this many entries. 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_ci 10962306a36Sopenharmony_ciINFO OPTIONS 11062306a36Sopenharmony_ci------------ 11162306a36Sopenharmony_ci 11262306a36Sopenharmony_ci-t:: 11362306a36Sopenharmony_ci--threads:: 11462306a36Sopenharmony_ci dump thread list in perf.data 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_ci-m:: 11762306a36Sopenharmony_ci--map:: 11862306a36Sopenharmony_ci dump map of lock instances (address:name table) 11962306a36Sopenharmony_ci 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_ciCONTENTION OPTIONS 12262306a36Sopenharmony_ci-------------- 12362306a36Sopenharmony_ci 12462306a36Sopenharmony_ci-k:: 12562306a36Sopenharmony_ci--key=<value>:: 12662306a36Sopenharmony_ci Sorting key. Possible values: contended, wait_total (default), 12762306a36Sopenharmony_ci wait_max, wait_min, avg_wait. 12862306a36Sopenharmony_ci 12962306a36Sopenharmony_ci-F:: 13062306a36Sopenharmony_ci--field=<value>:: 13162306a36Sopenharmony_ci Output fields. By default it shows all but the wait_min fields 13262306a36Sopenharmony_ci and users can customize that using this. Possible values: 13362306a36Sopenharmony_ci contended, wait_total, wait_max, wait_min, avg_wait. 13462306a36Sopenharmony_ci 13562306a36Sopenharmony_ci-t:: 13662306a36Sopenharmony_ci--threads:: 13762306a36Sopenharmony_ci Show per-thread lock contention stat 13862306a36Sopenharmony_ci 13962306a36Sopenharmony_ci-b:: 14062306a36Sopenharmony_ci--use-bpf:: 14162306a36Sopenharmony_ci Use BPF program to collect lock contention stats instead of 14262306a36Sopenharmony_ci using the input data. 14362306a36Sopenharmony_ci 14462306a36Sopenharmony_ci-a:: 14562306a36Sopenharmony_ci--all-cpus:: 14662306a36Sopenharmony_ci System-wide collection from all CPUs. 14762306a36Sopenharmony_ci 14862306a36Sopenharmony_ci-C:: 14962306a36Sopenharmony_ci--cpu=<value>:: 15062306a36Sopenharmony_ci Collect samples only on the list of CPUs provided. Multiple CPUs can be 15162306a36Sopenharmony_ci provided as a comma-separated list with no space: 0,1. Ranges of CPUs 15262306a36Sopenharmony_ci are specified with -: 0-2. Default is to monitor all CPUs. 15362306a36Sopenharmony_ci 15462306a36Sopenharmony_ci-p:: 15562306a36Sopenharmony_ci--pid=<value>:: 15662306a36Sopenharmony_ci Record events on existing process ID (comma separated list). 15762306a36Sopenharmony_ci 15862306a36Sopenharmony_ci--tid=<value>:: 15962306a36Sopenharmony_ci Record events on existing thread ID (comma separated list). 16062306a36Sopenharmony_ci 16162306a36Sopenharmony_ci-M:: 16262306a36Sopenharmony_ci--map-nr-entries=<value>:: 16362306a36Sopenharmony_ci Maximum number of BPF map entries (default: 16384). 16462306a36Sopenharmony_ci This will be aligned to a power of 2. 16562306a36Sopenharmony_ci 16662306a36Sopenharmony_ci--max-stack=<value>:: 16762306a36Sopenharmony_ci Maximum stack depth when collecting lock contention (default: 8). 16862306a36Sopenharmony_ci 16962306a36Sopenharmony_ci--stack-skip=<value>:: 17062306a36Sopenharmony_ci Number of stack depth to skip when finding a lock caller (default: 3). 17162306a36Sopenharmony_ci 17262306a36Sopenharmony_ci-E:: 17362306a36Sopenharmony_ci--entries=<value>:: 17462306a36Sopenharmony_ci Display this many entries. 17562306a36Sopenharmony_ci 17662306a36Sopenharmony_ci-l:: 17762306a36Sopenharmony_ci--lock-addr:: 17862306a36Sopenharmony_ci Show lock contention stat by address 17962306a36Sopenharmony_ci 18062306a36Sopenharmony_ci-o:: 18162306a36Sopenharmony_ci--lock-owner:: 18262306a36Sopenharmony_ci Show lock contention stat by owners. Implies --threads and 18362306a36Sopenharmony_ci requires --use-bpf. 18462306a36Sopenharmony_ci 18562306a36Sopenharmony_ci-Y:: 18662306a36Sopenharmony_ci--type-filter=<value>:: 18762306a36Sopenharmony_ci Show lock contention only for given lock types (comma separated list). 18862306a36Sopenharmony_ci Available values are: 18962306a36Sopenharmony_ci semaphore, spinlock, rwlock, rwlock:R, rwlock:W, rwsem, rwsem:R, rwsem:W, 19062306a36Sopenharmony_ci rtmutex, rwlock-rt, rwlock-rt:R, rwlock-rt:W, pcpu-sem, pcpu-sem:R, pcpu-sem:W, 19162306a36Sopenharmony_ci mutex 19262306a36Sopenharmony_ci 19362306a36Sopenharmony_ci Note that RW-variant of locks have :R and :W suffix. Names without the 19462306a36Sopenharmony_ci suffix are shortcuts for the both variants. Ex) rwsem = rwsem:R + rwsem:W. 19562306a36Sopenharmony_ci 19662306a36Sopenharmony_ci-L:: 19762306a36Sopenharmony_ci--lock-filter=<value>:: 19862306a36Sopenharmony_ci Show lock contention only for given lock addresses or names (comma separated list). 19962306a36Sopenharmony_ci 20062306a36Sopenharmony_ci-S:: 20162306a36Sopenharmony_ci--callstack-filter=<value>:: 20262306a36Sopenharmony_ci Show lock contention only if the callstack contains the given string. 20362306a36Sopenharmony_ci Note that it matches the substring so 'rq' would match both 'raw_spin_rq_lock' 20462306a36Sopenharmony_ci and 'irq_enter_rcu'. 20562306a36Sopenharmony_ci 20662306a36Sopenharmony_ci-x:: 20762306a36Sopenharmony_ci--field-separator=<SEP>:: 20862306a36Sopenharmony_ci Show results using a CSV-style output to make it easy to import directly 20962306a36Sopenharmony_ci into spreadsheets. Columns are separated by the string specified in SEP. 21062306a36Sopenharmony_ci 21162306a36Sopenharmony_ci 21262306a36Sopenharmony_ciSEE ALSO 21362306a36Sopenharmony_ci-------- 21462306a36Sopenharmony_cilinkperf:perf[1] 215