| .. | .. |
|---|
| 42 | 42 | Prefixing with ! shows all syscalls but the ones specified. You may |
|---|
| 43 | 43 | need to escape it. |
|---|
| 44 | 44 | |
|---|
| 45 | +--filter=<filter>:: |
|---|
| 46 | + Event filter. This option should follow an event selector (-e) which |
|---|
| 47 | + selects tracepoint event(s). |
|---|
| 48 | + |
|---|
| 49 | + |
|---|
| 45 | 50 | -D msecs:: |
|---|
| 46 | 51 | --delay msecs:: |
|---|
| 47 | 52 | After starting the program, wait msecs before measuring. This is useful to |
|---|
| .. | .. |
|---|
| 141 | 146 | Show all syscalls followed by a summary by thread with min, max, and |
|---|
| 142 | 147 | average times (in msec) and relative stddev. |
|---|
| 143 | 148 | |
|---|
| 149 | +--errno-summary:: |
|---|
| 150 | + To be used with -s or -S, to show stats for the errnos experienced by |
|---|
| 151 | + syscalls, using only this option will trigger --summary. |
|---|
| 152 | + |
|---|
| 144 | 153 | --tool_stats:: |
|---|
| 145 | 154 | Show tool stats such as number of times fd->pathname was discovered thru |
|---|
| 146 | 155 | hooking the open syscall return + vfs_getname or via reading /proc/pid/fd, etc. |
|---|
| .. | .. |
|---|
| 171 | 180 | --kernel-syscall-graph:: |
|---|
| 172 | 181 | Show the kernel callchains on the syscall exit path. |
|---|
| 173 | 182 | |
|---|
| 183 | +--max-events=N:: |
|---|
| 184 | + Stop after processing N events. Note that strace-like events are considered |
|---|
| 185 | + only at exit time or when a syscall is interrupted, i.e. in those cases this |
|---|
| 186 | + option is equivalent to the number of lines printed. |
|---|
| 187 | + |
|---|
| 188 | +--switch-on EVENT_NAME:: |
|---|
| 189 | + Only consider events after this event is found. |
|---|
| 190 | + |
|---|
| 191 | +--switch-off EVENT_NAME:: |
|---|
| 192 | + Stop considering events after this event is found. |
|---|
| 193 | + |
|---|
| 194 | +--show-on-off-events:: |
|---|
| 195 | + Show the --switch-on/off events too. |
|---|
| 196 | + |
|---|
| 174 | 197 | --max-stack:: |
|---|
| 175 | 198 | Set the stack depth limit when parsing the callchain, anything |
|---|
| 176 | 199 | beyond the specified depth will be ignored. Note that at this point |
|---|
| .. | .. |
|---|
| 199 | 222 | When processing pre-existing threads /proc/XXX/mmap, it may take a long time, |
|---|
| 200 | 223 | because the file may be huge. A time out is needed in such cases. |
|---|
| 201 | 224 | This option sets the time out limit. The default value is 500 ms. |
|---|
| 225 | + |
|---|
| 226 | +--sort-events:: |
|---|
| 227 | + Do sorting on batches of events, use when noticing out of order events that |
|---|
| 228 | + may happen, for instance, when a thread gets migrated to a different CPU |
|---|
| 229 | + while processing a syscall. |
|---|
| 230 | + |
|---|
| 231 | +--libtraceevent_print:: |
|---|
| 232 | + Use libtraceevent to print tracepoint arguments. By default 'perf trace' uses |
|---|
| 233 | + the same beautifiers used in the strace-like enter+exit lines to augment the |
|---|
| 234 | + tracepoint arguments. |
|---|
| 235 | + |
|---|
| 236 | +--map-dump:: |
|---|
| 237 | + Dump BPF maps setup by events passed via -e, for instance the augmented_raw_syscalls |
|---|
| 238 | + living in tools/perf/examples/bpf/augmented_raw_syscalls.c. For now this |
|---|
| 239 | + dumps just boolean map values and integer keys, in time this will print in hex |
|---|
| 240 | + by default and use BTF when available, as well as use functions to do pretty |
|---|
| 241 | + printing using the existing 'perf trace' syscall arg beautifiers to map integer |
|---|
| 242 | + arguments to strings (pid to comm, syscall id to syscall name, etc). |
|---|
| 243 | + |
|---|
| 202 | 244 | |
|---|
| 203 | 245 | PAGEFAULTS |
|---|
| 204 | 246 | ---------- |
|---|
| .. | .. |
|---|
| 238 | 280 | As you can see, there was major pagefault in python process, from |
|---|
| 239 | 281 | CRYPTO_push_info_ routine which faulted somewhere in libcrypto.so. |
|---|
| 240 | 282 | |
|---|
| 283 | +Trace the first 4 open, openat or open_by_handle_at syscalls (in the future more syscalls may match here): |
|---|
| 284 | + |
|---|
| 285 | + $ perf trace -e open* --max-events 4 |
|---|
| 286 | + [root@jouet perf]# trace -e open* --max-events 4 |
|---|
| 287 | + 2272.992 ( 0.037 ms): gnome-shell/1370 openat(dfd: CWD, filename: /proc/self/stat) = 31 |
|---|
| 288 | + 2277.481 ( 0.139 ms): gnome-shell/3039 openat(dfd: CWD, filename: /proc/self/stat) = 65 |
|---|
| 289 | + 3026.398 ( 0.076 ms): gnome-shell/3039 openat(dfd: CWD, filename: /proc/self/stat) = 65 |
|---|
| 290 | + 4294.665 ( 0.015 ms): sed/15879 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC) = 3 |
|---|
| 291 | + $ |
|---|
| 292 | + |
|---|
| 293 | +Trace the first minor page fault when running a workload: |
|---|
| 294 | + |
|---|
| 295 | + # perf trace -F min --max-stack=7 --max-events 1 sleep 1 |
|---|
| 296 | + 0.000 ( 0.000 ms): sleep/18006 minfault [__clear_user+0x1a] => 0x5626efa56080 (?k) |
|---|
| 297 | + __clear_user ([kernel.kallsyms]) |
|---|
| 298 | + load_elf_binary ([kernel.kallsyms]) |
|---|
| 299 | + search_binary_handler ([kernel.kallsyms]) |
|---|
| 300 | + __do_execve_file.isra.33 ([kernel.kallsyms]) |
|---|
| 301 | + __x64_sys_execve ([kernel.kallsyms]) |
|---|
| 302 | + do_syscall_64 ([kernel.kallsyms]) |
|---|
| 303 | + entry_SYSCALL_64 ([kernel.kallsyms]) |
|---|
| 304 | + # |
|---|
| 305 | + |
|---|
| 306 | +Trace the next min page page fault to take place on the first CPU: |
|---|
| 307 | + |
|---|
| 308 | + # perf trace -F min --call-graph=dwarf --max-events 1 --cpu 0 |
|---|
| 309 | + 0.000 ( 0.000 ms): Web Content/17136 minfault [js::gc::Chunk::fetchNextDecommittedArena+0x4b] => 0x7fbe6181b000 (?.) |
|---|
| 310 | + js::gc::FreeSpan::initAsEmpty (inlined) |
|---|
| 311 | + js::gc::Arena::setAsNotAllocated (inlined) |
|---|
| 312 | + js::gc::Chunk::fetchNextDecommittedArena (/usr/lib64/firefox/libxul.so) |
|---|
| 313 | + js::gc::Chunk::allocateArena (/usr/lib64/firefox/libxul.so) |
|---|
| 314 | + js::gc::GCRuntime::allocateArena (/usr/lib64/firefox/libxul.so) |
|---|
| 315 | + js::gc::ArenaLists::allocateFromArena (/usr/lib64/firefox/libxul.so) |
|---|
| 316 | + js::gc::GCRuntime::tryNewTenuredThing<JSString, (js::AllowGC)1> (inlined) |
|---|
| 317 | + js::AllocateString<JSString, (js::AllowGC)1> (/usr/lib64/firefox/libxul.so) |
|---|
| 318 | + js::Allocate<JSThinInlineString, (js::AllowGC)1> (inlined) |
|---|
| 319 | + JSThinInlineString::new_<(js::AllowGC)1> (inlined) |
|---|
| 320 | + AllocateInlineString<(js::AllowGC)1, unsigned char> (inlined) |
|---|
| 321 | + js::ConcatStrings<(js::AllowGC)1> (/usr/lib64/firefox/libxul.so) |
|---|
| 322 | + [0x18b26e6bc2bd] (/tmp/perf-17136.map) |
|---|
| 323 | + # |
|---|
| 324 | + |
|---|
| 325 | +Trace the next two sched:sched_switch events, four block:*_plug events, the |
|---|
| 326 | +next block:*_unplug and the next three net:*dev_queue events, this last one |
|---|
| 327 | +with a backtrace of at most 16 entries, system wide: |
|---|
| 328 | + |
|---|
| 329 | + # perf trace -e sched:*switch/nr=2/,block:*_plug/nr=4/,block:*_unplug/nr=1/,net:*dev_queue/nr=3,max-stack=16/ |
|---|
| 330 | + 0.000 :0/0 sched:sched_switch:swapper/2:0 [120] S ==> rcu_sched:10 [120] |
|---|
| 331 | + 0.015 rcu_sched/10 sched:sched_switch:rcu_sched:10 [120] R ==> swapper/2:0 [120] |
|---|
| 332 | + 254.198 irq/50-iwlwifi/680 net:net_dev_queue:dev=wlp3s0 skbaddr=0xffff93498051f600 len=66 |
|---|
| 333 | + __dev_queue_xmit ([kernel.kallsyms]) |
|---|
| 334 | + 273.977 :0/0 net:net_dev_queue:dev=wlp3s0 skbaddr=0xffff93498051f600 len=78 |
|---|
| 335 | + __dev_queue_xmit ([kernel.kallsyms]) |
|---|
| 336 | + 274.007 :0/0 net:net_dev_queue:dev=wlp3s0 skbaddr=0xffff93498051ff00 len=78 |
|---|
| 337 | + __dev_queue_xmit ([kernel.kallsyms]) |
|---|
| 338 | + 2930.140 kworker/u16:58/2722 block:block_plug:[kworker/u16:58] |
|---|
| 339 | + 2930.162 kworker/u16:58/2722 block:block_unplug:[kworker/u16:58] 1 |
|---|
| 340 | + 4466.094 jbd2/dm-2-8/748 block:block_plug:[jbd2/dm-2-8] |
|---|
| 341 | + 8050.123 kworker/u16:30/2694 block:block_plug:[kworker/u16:30] |
|---|
| 342 | + 8050.271 kworker/u16:30/2694 block:block_plug:[kworker/u16:30] |
|---|
| 343 | + # |
|---|
| 344 | + |
|---|
| 241 | 345 | SEE ALSO |
|---|
| 242 | 346 | -------- |
|---|
| 243 | 347 | linkperf:perf-record[1], linkperf:perf-script[1] |
|---|