'\" t .\" Title: perf-lock .\" Author: [see the "AUTHOR(S)" section] .\" Generator: Asciidoctor 2.0.20 .\" Date: 2024-02-04 .\" Manual: perf Manual .\" Source: perf .\" Language: English .\" .TH "PERF\-LOCK" "1" "2024-02-04" "perf" "perf Manual" .ie \n(.g .ds Aq \(aq .el .ds Aq ' .ss \n[.ss] 0 .nh .ad l .de URL \fI\\$2\fP <\\$1>\\$3 .. .als MTO URL .if \n[.g] \{\ . mso www.tmac . am URL . ad l . . . am MTO . ad l . . . LINKSTYLE blue R < > .\} .SH "NAME" perf-lock \- Analyze lock events .SH "SYNOPSIS" .sp .nf \fIperf lock\fP {record|report|script|info|contention} .fi .br .SH "DESCRIPTION" .sp You can analyze various lock behaviours and statistics with this \fIperf lock\fP command. .sp .if n .RS 4 .nf .fam C \*(Aqperf lock record \*(Aq records lock events between start and end . And this command produces the file "perf.data" which contains tracing results of lock events. .fam .fi .if n .RE .sp .if n .RS 4 .nf .fam C \*(Aqperf lock report\*(Aq reports statistical data. .fam .fi .if n .RE .sp .if n .RS 4 .nf .fam C \*(Aqperf lock script\*(Aq shows raw lock events. .fam .fi .if n .RE .sp .if n .RS 4 .nf .fam C \*(Aqperf lock info\*(Aq shows metadata like threads or addresses of lock instances. .fam .fi .if n .RE .sp .if n .RS 4 .nf .fam C \*(Aqperf lock contention\*(Aq shows contention statistics. .fam .fi .if n .RE .SH "COMMON OPTIONS" .sp \-i, \-\-input= .RS 4 Input file name. (default: perf.data unless stdin is a fifo) .RE .sp \-\-output= .RS 4 Output file name for perf lock contention and report. .RE .sp \-v, \-\-verbose .RS 4 Be more verbose (show symbol address, etc). .RE .sp \-q, \-\-quiet .RS 4 Do not show any warnings or messages. (Suppress \-v) .RE .sp \-D, \-\-dump\-raw\-trace .RS 4 Dump raw trace in ASCII. .RE .sp \-f, \-\-force .RS 4 Don\(cqt complain, do it. .RE .sp \-\-vmlinux= .RS 4 vmlinux pathname .RE .sp \-\-kallsyms= .RS 4 kallsyms pathname .RE .SH "REPORT OPTIONS" .sp \-k, \-\-key= .RS 4 Sorting key. Possible values: acquired (default), contended, avg_wait, wait_total, wait_max, wait_min. .RE .sp \-F, \-\-field= .RS 4 Output fields. By default it shows all the fields but users can customize that using this. Possible values: acquired, contended, avg_wait, wait_total, wait_max, wait_min. .RE .sp \-c, \-\-combine\-locks .RS 4 Merge lock instances in the same class (based on name). .RE .sp \-t, \-\-threads .RS 4 The \-t option is to show per\-thread lock stat like below: .sp .if n .RS 4 .nf .fam C $ perf lock report \-t \-F acquired,contended,avg_wait .fam .fi .if n .RE .sp .if n .RS 4 .nf .fam C Name acquired contended avg wait (ns) .fam .fi .if n .RE .sp .if n .RS 4 .nf .fam C perf 240569 9 5784 swapper 106610 19 543 :15789 17370 2 14538 ContainerMgr 8981 6 874 sleep 5275 1 11281 ContainerThread 4416 4 944 RootPressureThr 3215 5 1215 rcu_preempt 2954 0 0 ContainerMgr 2560 0 0 unnamed 1873 0 0 EventManager_De 1845 1 636 futex\-default\-S 1609 0 0 .fam .fi .if n .RE .RE .sp \-E, \-\-entries= .RS 4 Display this many entries. .RE .SH "INFO OPTIONS" .sp \-t, \-\-threads .RS 4 dump thread list in perf.data .RE .sp \-m, \-\-map .RS 4 dump map of lock instances (address:name table) .RE .sp CONTENTION OPTIONS .sp .if n .RS 4 .nf .fam C \-k:: \-\-key=:: Sorting key. Possible values: contended, wait_total (default), wait_max, wait_min, avg_wait. \-F:: \-\-field=:: Output fields. By default it shows all but the wait_min fields and users can customize that using this. Possible values: contended, wait_total, wait_max, wait_min, avg_wait. \-t:: \-\-threads:: Show per\-thread lock contention stat \-b:: \-\-use\-bpf:: Use BPF program to collect lock contention stats instead of using the input data. \-a:: \-\-all\-cpus:: System\-wide collection from all CPUs. \-C:: \-\-cpu=:: Collect samples only on the list of CPUs provided. Multiple CPUs can be provided as a comma\-separated list with no space: 0,1. Ranges of CPUs are specified with \-: 0\-2. Default is to monitor all CPUs. \-p:: \-\-pid=:: Record events on existing process ID (comma separated list). \-\-tid=:: Record events on existing thread ID (comma separated list). \-M:: \-\-map\-nr\-entries=:: Maximum number of BPF map entries (default: 16384). This will be aligned to a power of 2. \-\-max\-stack=:: Maximum stack depth when collecting lock contention (default: 8). \-\-stack\-skip=:: Number of stack depth to skip when finding a lock caller (default: 3). \-E:: \-\-entries=:: Display this many entries. \-l:: \-\-lock\-addr:: Show lock contention stat by address \-o:: \-\-lock\-owner:: Show lock contention stat by owners. Implies \-\-threads and requires \-\-use\-bpf. \-Y:: \-\-type\-filter=:: Show lock contention only for given lock types (comma separated list). Available values are: semaphore, spinlock, rwlock, rwlock:R, rwlock:W, rwsem, rwsem:R, rwsem:W, rtmutex, rwlock\-rt, rwlock\-rt:R, rwlock\-rt:W, pcpu\-sem, pcpu\-sem:R, pcpu\-sem:W, mutex Note that RW\-variant of locks have :R and :W suffix. Names without the suffix are shortcuts for the both variants. Ex) rwsem = rwsem:R + rwsem:W. \-L:: \-\-lock\-filter=:: Show lock contention only for given lock addresses or names (comma separated list). \-S:: \-\-callstack\-filter=:: Show lock contention only if the callstack contains the given string. Note that it matches the substring so \*(Aqrq\*(Aq would match both \*(Aqraw_spin_rq_lock\*(Aq and \*(Aqirq_enter_rcu\*(Aq. \-x:: \-\-field\-separator=:: Show results using a CSV\-style output to make it easy to import directly into spreadsheets. Columns are separated by the string specified in SEP. SEE ALSO \-\-\-\-\-\-\-\- linkperf:perf[1] .fam .fi .if n .RE