'\" t .\" Title: perf-lock .\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author] .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: 2023-09-12 .\" Manual: perf Manual .\" Source: perf .\" Language: English .\" .TH "PERF\-LOCK" "1" "2023\-09\-12" "perf" "perf Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" perf-lock \- Analyze lock events .SH "SYNOPSIS" .sp .nf \fIperf lock\fR {record|report|script|info|contention} .fi .SH "DESCRIPTION" .sp You can analyze various lock behaviours and statistics with this \fIperf lock\fR command\&. .sp .if n \{\ .RS 4 .\} .nf \*(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\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf \*(Aqperf lock report\*(Aq reports statistical data\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf \*(Aqperf lock script\*(Aq shows raw lock events\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf \*(Aqperf lock info\*(Aq shows metadata like threads or addresses of lock instances\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf \*(Aqperf lock contention\*(Aq shows contention statistics\&. .fi .if n \{\ .RE .\} .SH "COMMON OPTIONS" .PP \-i, \-\-input= .RS 4 Input file name\&. (default: perf\&.data unless stdin is a fifo) .RE .PP \-\-output= .RS 4 Output file name for perf lock contention and report\&. .RE .PP \-v, \-\-verbose .RS 4 Be more verbose (show symbol address, etc)\&. .RE .PP \-q, \-\-quiet .RS 4 Do not show any warnings or messages\&. (Suppress \-v) .RE .PP \-D, \-\-dump\-raw\-trace .RS 4 Dump raw trace in ASCII\&. .RE .PP \-f, \-\-force .RS 4 Don\(cqt complain, do it\&. .RE .PP \-\-vmlinux= .RS 4 vmlinux pathname .RE .PP \-\-kallsyms= .RS 4 kallsyms pathname .RE .SH "REPORT OPTIONS" .PP \-k, \-\-key= .RS 4 Sorting key\&. Possible values: acquired (default), contended, avg_wait, wait_total, wait_max, wait_min\&. .RE .PP \-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 .PP \-c, \-\-combine\-locks .RS 4 Merge lock instances in the same class (based on name)\&. .RE .PP \-t, \-\-threads .RS 4 The \-t option is to show per\-thread lock stat like below: .sp .if n \{\ .RS 4 .\} .nf $ perf lock report \-t \-F acquired,contended,avg_wait .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf Name acquired contended avg wait (ns) .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf 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 .fi .if n \{\ .RE .\} .RE .PP \-E, \-\-entries= .RS 4 Display this many entries\&. .RE .SH "INFO OPTIONS" .PP \-t, \-\-threads .RS 4 dump thread list in perf\&.data .RE .PP \-m, \-\-map .RS 4 dump map of lock instances (address:name table) .RE .sp CONTENTION OPTIONS .sp .if n \{\ .RS 4 .\} .nf \&.ft 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\&. \-\-lock\-cgroup:: Show lock contention stat by cgroup\&. Requires \-\-use\-bpf\&. \-G:: \-\-cgroup\-filter=:: Show lock contention only in the given cgroups (comma separated list)\&. SEE ALSO \&.ft .fi .if n \{\ .RE .\} .sp \fBperf\fR(1)