.. | .. |
---|
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] |
---|