blob: 2c7e702a940c5aca5da0a8846141ece26cd4d4bc [file] [log] [blame]
Brendan Greggf4bf2752016-07-21 18:13:24 -07001Demonstrations of profile, the Linux eBPF/bcc version.
2
3
4This is a CPU profiler. It works by taking samples of stack traces at timed
5intervals, and frequency counting them in kernel context for efficiency.
6
7Example output:
8
9# ./profile
10Sampling at 49 Hertz of all threads by user + kernel stack... Hit Ctrl-C to end.
11^C
Sasha Goldshtein860823b2017-02-08 23:23:20 -050012 filemap_map_pages
13 handle_mm_fault
14 __do_page_fault
15 do_page_fault
16 page_fault
17 [unknown]
Brendan Greggf4bf2752016-07-21 18:13:24 -070018 - cp (9036)
19 1
20
Sasha Goldshtein860823b2017-02-08 23:23:20 -050021 [unknown]
22 [unknown]
Brendan Greggf4bf2752016-07-21 18:13:24 -070023 - sign-file (8877)
24 1
25
Sasha Goldshtein860823b2017-02-08 23:23:20 -050026 __clear_user
27 iov_iter_zero
28 read_iter_zero
29 __vfs_read
30 vfs_read
31 sys_read
32 entry_SYSCALL_64_fastpath
33 read
Brendan Greggf4bf2752016-07-21 18:13:24 -070034 - dd (25036)
35 4
36
Sasha Goldshtein860823b2017-02-08 23:23:20 -050037 func_a
38 main
39 __libc_start_main
40 [unknown]
Brendan Greggf4bf2752016-07-21 18:13:24 -070041 - func_ab (13549)
42 5
43
Brendan Gregg81baae42019-01-26 21:53:11 -080044The output was long; I truncated some lines ("[...]").
45
46This default output prints stack traces, followed by a line to describe the
47process (a dash, the process name, and a PID in parenthesis), and then an
48integer count of how many times this stack trace was sampled.
49
50The func_ab process is running the func_a() function, called by main(),
51called by __libc_start_main(), and called by "[unknown]" with what looks
52like a bogus address (1st column). That's evidence of a broken stack trace.
53It's common for user-level software that hasn't been compiled with frame
54pointers (in this case, libc).
55
56The dd process has called read(), and then enters the kernel via
57entry_SYSCALL_64_fastpath(), calling sys_read(), and so on. Yes, I'm now
58reading it bottom up. That way follows the code flow.
59
60
61By default, CPU idle stacks are excluded. They can be included with -I:
62
63# ./profile -I
64
Brendan Greggf4bf2752016-07-21 18:13:24 -070065[...]
66
Sasha Goldshtein860823b2017-02-08 23:23:20 -050067 native_safe_halt
68 default_idle
69 arch_cpu_idle
70 default_idle_call
71 cpu_startup_entry
72 rest_init
73 start_kernel
74 x86_64_start_reservations
75 x86_64_start_kernel
Brendan Greggf4bf2752016-07-21 18:13:24 -070076 - swapper/0 (0)
77 72
78
Sasha Goldshtein860823b2017-02-08 23:23:20 -050079 native_safe_halt
80 default_idle
81 arch_cpu_idle
82 default_idle_call
83 cpu_startup_entry
84 start_secondary
Brendan Greggf4bf2752016-07-21 18:13:24 -070085 - swapper/1 (0)
86 75
87
Brendan Greggf4bf2752016-07-21 18:13:24 -070088The output above shows the most frequent stack was from the "swapper/1"
89process (PID 0), running the native_safe_halt() function, which was called
90by default_idle(), which was called by arch_cpu_idle(), and so on. This is
91the idle thread. Stacks can be read top-down, to follow ancestry: child,
92parent, grandparent, etc.
93
Brendan Greggf4bf2752016-07-21 18:13:24 -070094
Brendan Gregg81baae42019-01-26 21:53:11 -080095The dd process profiled ealrier is actually "dd if=/dev/zero of=/dev/null":
96it's a simple workload to analyze that just moves bytes from /dev/zero to
97/dev/null. Profiling just that process:
Brendan Greggf4bf2752016-07-21 18:13:24 -070098
99# ./profile -p 25036
100Sampling at 49 Hertz of PID 25036 by user + kernel stack... Hit Ctrl-C to end.
101^C
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500102 [unknown]
103 [unknown]
Brendan Greggf4bf2752016-07-21 18:13:24 -0700104 - dd (25036)
105 1
106
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500107 __write
Brendan Greggf4bf2752016-07-21 18:13:24 -0700108 - dd (25036)
109 1
110
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500111 read
Brendan Greggf4bf2752016-07-21 18:13:24 -0700112 - dd (25036)
113 1
114
115[...]
116
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500117 [unknown]
118 [unknown]
Brendan Greggf4bf2752016-07-21 18:13:24 -0700119 - dd (25036)
120 2
121
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500122 entry_SYSCALL_64_fastpath
123 __write
124 [unknown]
Brendan Greggf4bf2752016-07-21 18:13:24 -0700125 - dd (25036)
126 3
127
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500128 entry_SYSCALL_64_fastpath
129 read
Brendan Greggf4bf2752016-07-21 18:13:24 -0700130 - dd (25036)
131 3
132
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500133 __clear_user
134 iov_iter_zero
135 read_iter_zero
136 __vfs_read
137 vfs_read
138 sys_read
139 entry_SYSCALL_64_fastpath
140 read
141 [unknown]
Brendan Greggf4bf2752016-07-21 18:13:24 -0700142 - dd (25036)
143 3
144
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500145 __clear_user
146 iov_iter_zero
147 read_iter_zero
148 __vfs_read
149 vfs_read
150 sys_read
151 entry_SYSCALL_64_fastpath
152 read
Brendan Greggf4bf2752016-07-21 18:13:24 -0700153 - dd (25036)
154 7
155
156Again, I've truncated some lines. Now we're just analyzing the dd process.
157The filtering is performed in kernel context, for efficiency.
158
159This output has some "[unknown]" frames that probably have valid addresses,
160but we're lacking the symbol translation. This is a common for all profilers
161on Linux, and is usually fixable. See the DEBUGGING section of the profile(8)
162man page.
163
164
165Lets add delimiters between the user and kernel stacks, using -d:
166
167# ./profile -p 25036 -d
168^C
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500169 __vfs_write
170 sys_write
171 entry_SYSCALL_64_fastpath
Brendan Greggf4bf2752016-07-21 18:13:24 -0700172 --
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500173 __write
Brendan Greggf4bf2752016-07-21 18:13:24 -0700174 - dd (25036)
175 1
176
177 --
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500178 [unknown]
179 [unknown]
Brendan Greggf4bf2752016-07-21 18:13:24 -0700180 - dd (25036)
181 1
182
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500183 iov_iter_init
184 __vfs_read
185 vfs_read
186 sys_read
187 entry_SYSCALL_64_fastpath
Brendan Greggf4bf2752016-07-21 18:13:24 -0700188 --
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500189 read
Brendan Greggf4bf2752016-07-21 18:13:24 -0700190 - dd (25036)
191 1
192
193[...]
194
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500195 __clear_user
196 iov_iter_zero
197 read_iter_zero
198 __vfs_read
199 vfs_read
200 sys_read
201 entry_SYSCALL_64_fastpath
Brendan Greggf4bf2752016-07-21 18:13:24 -0700202 --
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500203 read
Brendan Greggf4bf2752016-07-21 18:13:24 -0700204 - dd (25036)
205 9
206
207In this mode, the delimiters are "--".
208
209
210
211Here's another example, a func_ab program that runs two functions, func_a() and
212func_b(). Profiling it for 5 seconds:
213
214# ./profile -p `pgrep -n func_ab` 5
215Sampling at 49 Hertz of PID 2930 by user + kernel stack for 5 secs.
216
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500217 func_a
218 main
219 __libc_start_main
220 [unknown]
Brendan Greggf4bf2752016-07-21 18:13:24 -0700221 - func_ab (2930)
222 2
223
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500224 func_b
225 main
226 __libc_start_main
227 [unknown]
Brendan Greggf4bf2752016-07-21 18:13:24 -0700228 - func_ab (2930)
229 3
230
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500231 func_a
232 main
233 __libc_start_main
234 [unknown]
Brendan Greggf4bf2752016-07-21 18:13:24 -0700235 - func_ab (2930)
236 5
237
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500238 func_b
239 main
240 __libc_start_main
241 [unknown]
Brendan Greggf4bf2752016-07-21 18:13:24 -0700242 - func_ab (2930)
243 12
244
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500245 func_b
246 main
247 __libc_start_main
248 [unknown]
Brendan Greggf4bf2752016-07-21 18:13:24 -0700249 - func_ab (2930)
250 19
251
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500252 func_a
253 main
254 __libc_start_main
255 [unknown]
Brendan Greggf4bf2752016-07-21 18:13:24 -0700256 - func_ab (2930)
257 22
258
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500259 func_b
260 main
261 __libc_start_main
262 [unknown]
Brendan Greggf4bf2752016-07-21 18:13:24 -0700263 - func_ab (2930)
264 64
265
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500266 func_a
267 main
268 __libc_start_main
269 [unknown]
Brendan Greggf4bf2752016-07-21 18:13:24 -0700270 - func_ab (2930)
271 72
272
273Note that the same stack (2nd column) seems to be repeated. Weren't we doing
274frequency counting and only printing unique stacks? We are, but in terms of
275the raw addresses, not the symbols. See the 1st column: those stacks are
276all unique.
277
278
279We can output in "folded format", which puts the stack trace on one line,
280separating frames with semi-colons. Eg:
281
282# ./profile -f -p `pgrep -n func_ab` 5
283func_ab;[unknown];__libc_start_main;main;func_a 2
284func_ab;[unknown];__libc_start_main;main;func_b 2
285func_ab;[unknown];__libc_start_main;main;func_a 11
286func_ab;[unknown];__libc_start_main;main;func_b 12
287func_ab;[unknown];__libc_start_main;main;func_a 23
288func_ab;[unknown];__libc_start_main;main;func_b 28
289func_ab;[unknown];__libc_start_main;main;func_b 57
290func_ab;[unknown];__libc_start_main;main;func_a 64
291
292I find this pretty useful for writing to files and later grepping.
293
294
295Folded format can also be used by flame graph stack visualizers, including
296the original implementation:
297
298 https://github.com/brendangregg/FlameGraph
299
300I'd include delimiters, -d. For example:
301
302# ./profile -df -p `pgrep -n func_ab` 5 > out.profile
303# git clone https://github.com/brendangregg/FlameGraph
304# ./FlameGraph/flamegraph.pl < out.profile > out.svg
305
306(Yes, I could pipe profile directly into flamegraph.pl, however, I like to
307keep the raw folded profiles around: can be useful for regenerating flamegraphs
308with different options, and, for differential flame graphs.)
309
310
311Some flamegraph.pl palettes recognize kernel annotations, which can be added
312with -a. It simply adds a "_[k]" at the end of kernel function names.
313For example:
314
315# ./profile -adf -p `pgrep -n dd` 10
316dd;[unknown] 1
317dd;[unknown];[unknown] 1
318dd;[unknown];[unknown] 1
319dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];rw_verify_area_[k];security_file_permission_[k];__fsnotify_parent_[k] 1
320dd;[unknown];__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k];__fsnotify_parent_[k] 1
321dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];__fdget_pos_[k] 1
322dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];rw_verify_area_[k];apparmor_file_permission_[k] 1
323dd;[unknown] 1
324dd;[unknown];[unknown] 1
325dd;__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k] 1
326dd;[unknown] 1
327dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];__fget_light_[k] 1
328dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];rw_verify_area_[k];__fsnotify_parent_[k] 1
329dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k];iov_iter_zero_[k] 1
330dd;[unknown];__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];__fget_light_[k] 1
331dd;[unknown];[unknown] 1
332dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k] 1
333dd;[unknown];[unknown] 1
334dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k];iov_iter_zero_[k] 1
335dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k];iov_iter_zero_[k] 1
336dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];read_iter_zero_[k] 1
337dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__fsnotify_parent_[k] 1
338dd;[unknown];[unknown] 1
339dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];rw_verify_area_[k];security_file_permission_[k];apparmor_file_permission_[k];common_file_perm_[k] 1
340dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];__fsnotify_parent_[k] 1
341dd;__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k];fsnotify_[k] 1
342dd;__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k];rw_verify_area_[k];security_file_permission_[k] 1
343dd;[unknown];__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];__fdget_pos_[k] 1
344dd;[unknown];__write;-;entry_SYSCALL_64_fastpath_[k] 1
345dd;[unknown];[unknown] 1
346dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];rw_verify_area_[k];security_file_permission_[k] 1
347dd;__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k] 1
348dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];__fget_light_[k] 1
349dd;[unknown] 1
350dd;[unknown];__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k] 1
351dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];rw_verify_area_[k];security_file_permission_[k];apparmor_file_permission_[k] 1
352dd;[unknown];[unknown] 1
353dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];rw_verify_area_[k];security_file_permission_[k] 1
354dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];rw_verify_area_[k];__fsnotify_parent_[k] 1
355dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k];iov_iter_zero_[k] 1
356dd;__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k];rw_verify_area_[k];security_file_permission_[k] 1
357dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k];iov_iter_zero_[k];__clear_user_[k] 1
358dd;[unknown];[unknown] 1
359dd;__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k] 1
360dd;[unknown];[unknown] 1
361dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];rw_verify_area_[k];security_file_permission_[k];apparmor_file_permission_[k];common_file_perm_[k] 1
362dd;read 1
363dd;__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k];security_file_permission_[k] 1
364dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];fsnotify_[k] 1
365dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];fsnotify_[k] 1
366dd;__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k];rw_verify_area_[k];apparmor_file_permission_[k] 1
367dd;[unknown];__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k];__fsnotify_parent_[k] 1
368dd;[unknown];__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k];rw_verify_area_[k];apparmor_file_permission_[k] 1
369dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k] 1
370dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];iov_iter_init_[k] 1
371dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];rw_verify_area_[k];security_file_permission_[k];__fsnotify_parent_[k] 1
372dd;[unknown];__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k];__vfs_write_[k];write_null_[k] 1
373dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k];__clear_user_[k] 1
374dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];security_file_permission_[k] 1
375dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];rw_verify_area_[k];security_file_permission_[k];apparmor_file_permission_[k];common_file_perm_[k] 1
376dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k] 1
377dd;[unknown];__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k] 1
378dd;__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k] 1
379dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];rw_verify_area_[k] 1
380dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];__fget_light_[k] 1
381dd;[unknown];__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k];rw_verify_area_[k] 1
382dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k] 1
383dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];__vfs_read_[k] 1
384dd;[unknown];__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k];__vfs_write_[k] 1
385dd;[unknown] 1
386dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k];iov_iter_zero_[k] 1
387dd;[unknown] 1
388dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k] 1
389dd;__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];__fsnotify_parent_[k] 1
390dd;__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k] 1
391dd;[unknown];[unknown] 1
392dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k];iov_iter_zero_[k] 1
393dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k];iov_iter_zero_[k] 1
394dd;[unknown];__write;-;sys_write_[k] 1
395dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];__fsnotify_parent_[k] 1
396dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];rw_verify_area_[k];security_file_permission_[k];common_file_perm_[k] 1
397dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k];iov_iter_zero_[k] 1
398dd;[unknown];[unknown] 1
399dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k];iov_iter_zero_[k];__clear_user_[k] 1
400dd;__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k];rw_verify_area_[k];security_file_permission_[k];apparmor_file_permission_[k] 1
401dd;__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];__fget_light_[k] 1
402dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k] 1
403dd;read;-;entry_SYSCALL_64_fastpath_[k];vfs_read_[k] 1
404dd;__write 1
405dd;read;-;entry_SYSCALL_64_fastpath_[k];vfs_read_[k] 1
406dd;__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k];rw_verify_area_[k];security_file_permission_[k];apparmor_file_permission_[k];common_file_perm_[k] 1
407dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k];iov_iter_zero_[k] 1
408dd;[unknown];__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];__fget_light_[k] 1
409dd;[unknown];[unknown] 1
410dd;[unknown] 1
411dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k];iov_iter_zero_[k] 1
412dd;[unknown] 1
413dd;[unknown] 1
414dd;[unknown];[unknown] 1
415dd;__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k] 1
416dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k];iov_iter_zero_[k] 1
417dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k] 1
418dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k] 1
419dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k] 1
420dd;__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k];rw_verify_area_[k];security_file_permission_[k];apparmor_file_permission_[k];common_file_perm_[k] 1
421dd;__write 1
422dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];__fget_light_[k] 1
423dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];rw_verify_area_[k];security_file_permission_[k] 1
424dd;__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k] 1
425dd;[unknown] 1
426dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];__fget_light_[k] 1
427dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k] 1
428dd;[unknown];[unknown] 1
429dd;__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];__fdget_pos_[k] 1
430dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k] 1
431dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k] 1
432dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];_cond_resched_[k] 1
433dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];iov_iter_init_[k] 1
434dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];rw_verify_area_[k];security_file_permission_[k];__fsnotify_parent_[k] 1
435dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k] 1
436dd;__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];rw_verify_area_[k] 1
437dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];rw_verify_area_[k];apparmor_file_permission_[k] 1
438dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k];iov_iter_zero_[k] 1
439dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k] 1
440dd;[unknown] 1
441dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];rw_verify_area_[k];security_file_permission_[k];fsnotify_[k] 1
442dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k] 1
443dd;__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];__fdget_pos_[k] 1
444dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];rw_verify_area_[k];security_file_permission_[k] 1
445dd;__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k] 1
446dd;[unknown];__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k];__vfs_write_[k] 1
447dd;__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k];rw_verify_area_[k];apparmor_file_permission_[k] 1
448dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];rw_verify_area_[k];security_file_permission_[k] 1
449dd;__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k];rw_verify_area_[k];security_file_permission_[k];apparmor_file_permission_[k];common_file_perm_[k] 1
450dd;__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k] 1
451dd;__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k] 1
452dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];__fget_light_[k] 1
453dd;[unknown] 1
454dd;[unknown];__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k];fsnotify_[k] 1
455dd;[unknown];__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k];rw_verify_area_[k];security_file_permission_[k];apparmor_file_permission_[k];common_file_perm_[k] 1
456dd;__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k];rw_verify_area_[k] 1
457dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k];iov_iter_zero_[k] 1
458dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];fsnotify_[k] 1
459dd;[unknown];__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k] 1
460dd;__write;-;entry_SYSCALL_64_fastpath_[k];vfs_write_[k] 1
461dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];rw_verify_area_[k] 1
462dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k] 1
463dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];rw_verify_area_[k];security_file_permission_[k];apparmor_file_permission_[k];common_file_perm_[k] 1
464dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k] 1
465dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];rw_verify_area_[k];fsnotify_[k] 1
466dd;[unknown];__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k];rw_verify_area_[k];apparmor_file_permission_[k] 2
467dd;read;-;entry_SYSCALL_64_fastpath_[k];__fdget_pos_[k] 2
468dd;[unknown];[unknown] 2
469dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];__fdget_pos_[k] 2
470dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];rw_verify_area_[k];security_file_permission_[k];apparmor_file_permission_[k];common_file_perm_[k] 2
471dd;[unknown];[unknown] 2
472dd;[unknown];[unknown] 2
473dd;[unknown];[unknown] 2
474dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k] 2
475dd;[unknown];[unknown] 2
476dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k];__clear_user_[k] 2
477dd;__write;-;entry_SYSCALL_64_fastpath_[k];__fdget_pos_[k] 2
478dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k] 2
479dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k] 2
480dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k];iov_iter_zero_[k];__clear_user_[k] 2
481dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k];iov_iter_zero_[k];__clear_user_[k] 2
482dd;[unknown];[unknown] 2
483dd;__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];__fget_light_[k] 2
484dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];rw_verify_area_[k];security_file_permission_[k];fsnotify_[k] 2
485dd;__write;-;sys_write_[k] 2
486dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];fsnotify_[k] 2
487dd;[unknown];[unknown] 2
488dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k] 2
489dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k];iov_iter_zero_[k] 2
490dd;read;-;SyS_read_[k] 2
491dd;[unknown] 2
492dd;__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k];rw_verify_area_[k] 2
493dd;[unknown];__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];__fget_light_[k] 2
494dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k] 2
495dd;__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k];rw_verify_area_[k];security_file_permission_[k];apparmor_file_permission_[k] 2
496dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k];__clear_user_[k] 2
497dd;[unknown];__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];rw_verify_area_[k] 2
498dd;[unknown];[unknown] 3
499dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];rw_verify_area_[k] 3
500dd;[unknown];[unknown] 3
501dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k];iov_iter_zero_[k];__clear_user_[k] 3
502dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k];iov_iter_zero_[k] 3
503dd;[unknown];[unknown] 3
504dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k];iov_iter_zero_[k] 3
505dd;[unknown];[unknown] 3
506dd;[unknown];[unknown] 3
507dd;__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k] 3
508dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k] 3
509dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k];iov_iter_zero_[k];__clear_user_[k] 3
510dd;[unknown] 4
511dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k] 4
512dd;[unknown];[unknown] 4
513dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k] 4
514dd;[unknown] 4
515dd;[unknown];[unknown] 4
516dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k] 4
517dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k];iov_iter_zero_[k];__clear_user_[k] 5
518dd;[unknown];__write;-;entry_SYSCALL_64_fastpath_[k];sys_write_[k];vfs_write_[k] 5
519dd;[unknown];[unknown] 5
520dd;[unknown];[unknown] 5
521dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k];iov_iter_zero_[k] 6
522dd;read 15
523dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k];iov_iter_zero_[k];__clear_user_[k] 19
524dd;[unknown];__write;-;entry_SYSCALL_64_fastpath_[k] 20
525dd;read;-;entry_SYSCALL_64_fastpath_[k] 23
526dd;read;-;entry_SYSCALL_64_fastpath_[k];SyS_read_[k];vfs_read_[k];__vfs_read_[k];read_iter_zero_[k];iov_iter_zero_[k];__clear_user_[k] 24
527dd;__write;-;entry_SYSCALL_64_fastpath_[k] 25
528dd;__write 29
529dd;[unknown];read;-;entry_SYSCALL_64_fastpath_[k] 31
530
531This can be made into a flamegraph. Eg:
532
533# ./profile -adf -p `pgrep -n func_ab` 10 > out.profile
534# git clone https://github.com/brendangregg/FlameGraph
535# ./FlameGraph/flamegraph.pl --color=java < out.profile > out.svg
536
537It will highlight the kernel frames in orange, and user-level in red (and Java
538in green, and C++ in yellow). If you copy-n-paste the above output into a
539out.profile file, you can try it out.
540
541
542You can increase or decrease the sample frequency. Eg, sampling at 9 Hertz:
543
544# ./profile -F 9
545Sampling at 9 Hertz of all threads by user + kernel stack... Hit Ctrl-C to end.
546^C
Brendan Gregg81baae42019-01-26 21:53:11 -0800547[...]
548
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500549 func_b
550 main
551 __libc_start_main
552 [unknown]
Brendan Greggf4bf2752016-07-21 18:13:24 -0700553 - func_ab (2930)
554 1
555
556[...]
557
Brendan Greggf4bf2752016-07-21 18:13:24 -0700558
559You can also restrict profiling to just kernel stacks (-K) or user stacks (-U).
560For example, just user stacks:
561
Nikita V. Shirokove36f9e12018-07-19 11:49:54 -0700562# ./profile -C 7 2
563Sampling at 49 Hertz of all threads by user + kernel stack on CPU#7 for 2 secs.
564
565 PyEval_EvalFrameEx
566 [unknown]
567 [unknown]
568 - python (2827439)
569 1
570
571 PyDict_GetItem
572 [unknown]
573 - python (2827439)
574 1
575
576 [unknown]
577 - python (2827439)
578 1
579
580 PyEval_EvalFrameEx
581 [unknown]
582 [unknown]
583 - python (2827439)
584 1
585
586 PyEval_EvalFrameEx
587 - python (2827439)
588 1
589
590 [unknown]
591 [unknown]
592 - python (2827439)
593
594in this example python application was busylooping on a single core/cpu (#7)
595we were collecting stack traces only from it
596
Brendan Greggf4bf2752016-07-21 18:13:24 -0700597# ./profile -U
598Sampling at 49 Hertz of all threads by user stack... Hit Ctrl-C to end.
599^C
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500600 [unknown]
601 [unknown]
Brendan Greggf4bf2752016-07-21 18:13:24 -0700602 - dd (2931)
603 1
604
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500605 [unknown]
606 [unknown]
Brendan Greggf4bf2752016-07-21 18:13:24 -0700607 - dd (2931)
608 1
609
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500610 [unknown]
611 [unknown]
Brendan Greggf4bf2752016-07-21 18:13:24 -0700612 - dd (2931)
613 1
614
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500615 [unknown]
616 [unknown]
Brendan Greggf4bf2752016-07-21 18:13:24 -0700617 - dd (2931)
618 1
619
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500620 [unknown]
621 [unknown]
Brendan Greggf4bf2752016-07-21 18:13:24 -0700622 - dd (2931)
623 1
624
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500625 func_b
626 main
627 __libc_start_main
628 [unknown]
Brendan Greggf4bf2752016-07-21 18:13:24 -0700629 - func_ab (2930)
630 1
631
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500632 [unknown]
Brendan Greggf4bf2752016-07-21 18:13:24 -0700633 - dd (2931)
634 1
635
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500636 [unknown]
Brendan Greggf4bf2752016-07-21 18:13:24 -0700637 - dd (2931)
638 1
639
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500640 func_a
641 main
642 __libc_start_main
643 [unknown]
Brendan Greggf4bf2752016-07-21 18:13:24 -0700644 - func_ab (2930)
645 3
646
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500647 __write
648 [unknown]
Brendan Greggf4bf2752016-07-21 18:13:24 -0700649 - dd (2931)
650 3
651
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500652 func_a
653 main
654 __libc_start_main
655 [unknown]
Brendan Greggf4bf2752016-07-21 18:13:24 -0700656 - func_ab (2930)
657 4
658
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500659 func_b
660 main
661 __libc_start_main
662 [unknown]
Brendan Greggf4bf2752016-07-21 18:13:24 -0700663 - func_ab (2930)
664 7
665
666 - swapper/6 (0)
667 10
668
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500669 func_b
670 main
671 __libc_start_main
672 [unknown]
Brendan Greggf4bf2752016-07-21 18:13:24 -0700673 - func_ab (2930)
674 10
675
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500676 __write
Brendan Greggf4bf2752016-07-21 18:13:24 -0700677 - dd (2931)
678 10
679
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500680 func_a
681 main
682 __libc_start_main
683 [unknown]
Brendan Greggf4bf2752016-07-21 18:13:24 -0700684 - func_ab (2930)
685 11
686
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500687 read
Brendan Greggf4bf2752016-07-21 18:13:24 -0700688 - dd (2931)
689 12
690
Sasha Goldshtein860823b2017-02-08 23:23:20 -0500691 read
692 [unknown]
Brendan Greggf4bf2752016-07-21 18:13:24 -0700693 - dd (2931)
694 14
695
Brendan Greggf4bf2752016-07-21 18:13:24 -0700696
697If there are too many unique stack traces for the kernel to save, a warning
698will be printed. Eg:
699
700# ./profile
701[...]
702WARNING: 8 stack traces could not be displayed. Consider increasing --stack-storage-size.
703
704Run ./profile -h to see the default.
705
Alban Crequyf82ea452020-03-18 16:15:02 +0100706The --cgroupmap option filters based on a cgroup set. It is meant to be used
707with an externally created map.
708
709# ./profile --cgroupmap /sys/fs/bpf/test01
710
Alban Crequy32ab8582020-03-22 16:06:44 +0100711For more details, see docs/special_filtering.md
Alban Crequyf82ea452020-03-18 16:15:02 +0100712
Brendan Greggf4bf2752016-07-21 18:13:24 -0700713
Brendan Greggf4bf2752016-07-21 18:13:24 -0700714USAGE message:
715
716# ./profile -h
Alban Crequyf82ea452020-03-18 16:15:02 +0100717usage: profile.py [-h] [-p PID | -L TID] [-U | -K] [-F FREQUENCY | -c COUNT]
718 [-d] [-a] [-I] [-f]
719 [--stack-storage-size STACK_STORAGE_SIZE] [-C CPU]
Alban Crequy32ab8582020-03-22 16:06:44 +0100720 [--cgroupmap CGROUPMAP] [--mntnsmap MNTNSMAP]
Brendan Greggf4bf2752016-07-21 18:13:24 -0700721 [duration]
722
723Profile CPU stack traces at a timed interval
724
725positional arguments:
726 duration duration of trace, in seconds
727
728optional arguments:
729 -h, --help show this help message and exit
Xiaozhou Liu6b197902019-04-16 05:41:18 +0800730 -p PID, --pid PID profile process with this PID only
731 -L TID, --tid TID profile thread with this TID only
Brendan Greggf4bf2752016-07-21 18:13:24 -0700732 -U, --user-stacks-only
733 show stacks from user space only (no kernel space
734 stacks)
735 -K, --kernel-stacks-only
736 show stacks from kernel space only (no user space
737 stacks)
738 -F FREQUENCY, --frequency FREQUENCY
Teng Qin86df2b82018-04-23 12:36:51 -0700739 sample frequency, Hertz
740 -c COUNT, --count COUNT
741 sample period, number of events
Brendan Greggf4bf2752016-07-21 18:13:24 -0700742 -d, --delimited insert delimiter between kernel/user stacks
743 -a, --annotations add _[k] annotations to kernel frames
Brendan Gregg81baae42019-01-26 21:53:11 -0800744 -I, --include-idle include CPU idle stacks
Brendan Greggf4bf2752016-07-21 18:13:24 -0700745 -f, --folded output folded format, one line per stack (for flame
746 graphs)
747 --stack-storage-size STACK_STORAGE_SIZE
748 the number of unique stack traces that can be stored
Brendan Gregg81baae42019-01-26 21:53:11 -0800749 and displayed (default 16384)
Nikita V. Shirokove36f9e12018-07-19 11:49:54 -0700750 -C CPU, --cpu CPU cpu number to run profile on
Alban Crequyf82ea452020-03-18 16:15:02 +0100751 --cgroupmap CGROUPMAP
752 trace cgroups in this BPF map only
Alban Crequy32ab8582020-03-22 16:06:44 +0100753 --mntnsmap MNTNSMAP trace mount namespaces in this BPF map only
Brendan Greggf4bf2752016-07-21 18:13:24 -0700754
755examples:
756 ./profile # profile stack traces at 49 Hertz until Ctrl-C
757 ./profile -F 99 # profile stack traces at 99 Hertz
Teng Qin86df2b82018-04-23 12:36:51 -0700758 ./profile -c 1000000 # profile stack traces every 1 in a million events
Brendan Greggf4bf2752016-07-21 18:13:24 -0700759 ./profile 5 # profile at 49 Hertz for 5 seconds only
760 ./profile -f 5 # output in folded format for flame graphs
Xiaozhou Liu6b197902019-04-16 05:41:18 +0800761 ./profile -p 185 # only profile process with PID 185
762 ./profile -L 185 # only profile thread with TID 185
Brendan Greggf4bf2752016-07-21 18:13:24 -0700763 ./profile -U # only show user space stacks (no kernel)
764 ./profile -K # only show kernel space stacks (no user)
Alban Crequy32ab8582020-03-22 16:06:44 +0100765 ./profile --cgroupmap mappath # only trace cgroups in this BPF map
766 ./profile --mntnsmap mappath # only trace mount namespaces in the map