| perf-lock(1) |
| ============ |
| |
| NAME |
| ---- |
| perf-lock - Analyze lock events |
| |
| SYNOPSIS |
| -------- |
| [verse] |
| 'perf lock' {record|report|script|info|contention} |
| |
| DESCRIPTION |
| ----------- |
| You can analyze various lock behaviours |
| and statistics with this 'perf lock' command. |
| |
| 'perf lock record <command>' records lock events |
| between start and end <command>. And this command |
| produces the file "perf.data" which contains tracing |
| results of lock events. |
| |
| 'perf lock report' reports statistical data. |
| |
| 'perf lock script' shows raw lock events. |
| |
| 'perf lock info' shows metadata like threads or addresses |
| of lock instances. |
| |
| 'perf lock contention' shows contention statistics. |
| |
| COMMON OPTIONS |
| -------------- |
| |
| -i:: |
| --input=<file>:: |
| Input file name. (default: perf.data unless stdin is a fifo) |
| |
| --output=<file>:: |
| Output file name for perf lock contention and report. |
| |
| -v:: |
| --verbose:: |
| Be more verbose (show symbol address, etc). |
| |
| -q:: |
| --quiet:: |
| Do not show any warnings or messages. (Suppress -v) |
| |
| -D:: |
| --dump-raw-trace:: |
| Dump raw trace in ASCII. |
| |
| -f:: |
| --force:: |
| Don't complain, do it. |
| |
| --vmlinux=<file>:: |
| vmlinux pathname |
| |
| --kallsyms=<file>:: |
| kallsyms pathname |
| |
| |
| REPORT OPTIONS |
| -------------- |
| |
| -k:: |
| --key=<value>:: |
| Sorting key. Possible values: acquired (default), contended, |
| avg_wait, wait_total, wait_max, wait_min. |
| |
| -F:: |
| --field=<value>:: |
| 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. |
| |
| -c:: |
| --combine-locks:: |
| Merge lock instances in the same class (based on name). |
| |
| -t:: |
| --threads:: |
| The -t option is to show per-thread lock stat like below: |
| |
| $ perf lock report -t -F acquired,contended,avg_wait |
| |
| Name acquired contended avg wait (ns) |
| |
| 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 |
| |
| -E:: |
| --entries=<value>:: |
| Display this many entries. |
| |
| |
| INFO OPTIONS |
| ------------ |
| |
| -t:: |
| --threads:: |
| dump thread list in perf.data |
| |
| -m:: |
| --map:: |
| dump map of lock instances (address:name table) |
| |
| |
| CONTENTION OPTIONS |
| ------------------ |
| |
| -k:: |
| --key=<value>:: |
| Sorting key. Possible values: contended, wait_total (default), |
| wait_max, wait_min, avg_wait. |
| |
| -F:: |
| --field=<value>:: |
| 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=<value>:: |
| 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=<value>:: |
| Record events on existing process ID (comma separated list). |
| |
| --tid=<value>:: |
| Record events on existing thread ID (comma separated list). |
| |
| -M:: |
| --map-nr-entries=<value>:: |
| Maximum number of BPF map entries (default: 16384). |
| This will be aligned to a power of 2. |
| |
| --max-stack=<value>:: |
| Maximum stack depth when collecting lock contention (default: 8). |
| |
| --stack-skip=<value>:: |
| Number of stack depth to skip when finding a lock caller (default: 3). |
| |
| -E:: |
| --entries=<value>:: |
| 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=<value>:: |
| 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=<value>:: |
| Show lock contention only for given lock addresses or names (comma separated list). |
| |
| -S:: |
| --callstack-filter=<value>:: |
| Show lock contention only if the callstack contains the given string. |
| Note that it matches the substring so 'rq' would match both 'raw_spin_rq_lock' |
| and 'irq_enter_rcu'. |
| |
| -x:: |
| --field-separator=<SEP>:: |
| 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=<value>:: |
| Show lock contention only in the given cgroups (comma separated list). |
| |
| |
| SEE ALSO |
| -------- |
| linkperf:perf[1] |