xref: /openbmc/linux/tools/perf/Documentation/perf-config.txt (revision c51d39010a1bccc9c1294e2d7c00005aefeb2b5c)
1perf-config(1)
2==============
3
4NAME
5----
6perf-config - Get and set variables in a configuration file.
7
8SYNOPSIS
9--------
10[verse]
11'perf config' [<file-option>] -l | --list
12
13DESCRIPTION
14-----------
15You can manage variables in a configuration file with this command.
16
17OPTIONS
18-------
19
20-l::
21--list::
22	Show current config variables, name and value, for all sections.
23
24--user::
25	For writing and reading options: write to user
26	'$HOME/.perfconfig' file or read it.
27
28--system::
29	For writing and reading options: write to system-wide
30	'$(sysconfdir)/perfconfig' or read it.
31
32CONFIGURATION FILE
33------------------
34
35The perf configuration file contains many variables to change various
36aspects of each of its tools, including output, disk usage, etc.
37The '$HOME/.perfconfig' file is used to store a per-user configuration.
38The file '$(sysconfdir)/perfconfig' can be used to
39store a system-wide default configuration.
40
41When reading or writing, the values are read from the system and user
42configuration files by default, and options '--system' and '--user'
43can be used to tell the command to read from or write to only that location.
44
45Syntax
46~~~~~~
47
48The file consist of sections. A section starts with its name
49surrounded by square brackets and continues till the next section
50begins. Each variable must be in a section, and have the form
51'name = value', for example:
52
53	[section]
54		name1 = value1
55		name2 = value2
56
57Section names are case sensitive and can contain any characters except
58newline (double quote `"` and backslash have to be escaped as `\"` and `\\`,
59respectively). Section headers can't span multiple lines.
60
61Example
62~~~~~~~
63
64Given a $HOME/.perfconfig like this:
65
66#
67# This is the config file, and
68# a '#' and ';' character indicates a comment
69#
70
71	[colors]
72		# Color variables
73		top = red, default
74		medium = green, default
75		normal = lightgray, default
76		selected = white, lightgray
77		jump_arrows = blue, default
78		addr = magenta, default
79		root = white, blue
80
81	[tui]
82		# Defaults if linked with libslang
83		report = on
84		annotate = on
85		top = on
86
87	[buildid]
88		# Default, disable using /dev/null
89		dir = ~/.debug
90
91	[annotate]
92		# Defaults
93		hide_src_code = false
94		use_offset = true
95		jump_arrows = true
96		show_nr_jumps = false
97
98	[help]
99		# Format can be man, info, web or html
100		format = man
101		autocorrect = 0
102
103	[ui]
104		show-headers = true
105
106	[call-graph]
107		# fp (framepointer), dwarf
108		record-mode = fp
109		print-type = graph
110		order = caller
111		sort-key = function
112
113	[report]
114		# Defaults
115		sort-order = comm,dso,symbol
116		percent-limit = 0
117		queue-size = 0
118		children = true
119		group = true
120
121Variables
122~~~~~~~~~
123
124colors.*::
125	The variables for customizing the colors used in the output for the
126	'report', 'top' and 'annotate' in the TUI. They should specify the
127	foreground and background colors, separated by a comma, for example:
128
129		medium = green, lightgray
130
131	If you want to use the color configured for you terminal, just leave it
132	as 'default', for example:
133
134		medium = default, lightgray
135
136	Available colors:
137	red, yellow, green, cyan, gray, black, blue,
138	white, default, magenta, lightgray
139
140	colors.top::
141		'top' means a overhead percentage which is more than 5%.
142		And values of this variable specify percentage colors.
143		Basic key values are foreground-color 'red' and
144		background-color 'default'.
145	colors.medium::
146		'medium' means a overhead percentage which has more than 0.5%.
147		Default values are 'green' and 'default'.
148	colors.normal::
149		'normal' means the rest of overhead percentages
150		except 'top', 'medium', 'selected'.
151		Default values are 'lightgray' and 'default'.
152	colors.selected::
153		This selects the colors for the current entry in a list of entries
154		from sub-commands (top, report, annotate).
155		Default values are 'black' and 'lightgray'.
156	colors.jump_arrows::
157		Colors for jump arrows on assembly code listings
158		such as 'jns', 'jmp', 'jane', etc.
159		Default values are 'blue', 'default'.
160	colors.addr::
161		This selects colors for addresses from 'annotate'.
162		Default values are 'magenta', 'default'.
163	colors.root::
164		Colors for headers in the output of a sub-commands (top, report).
165		Default values are 'white', 'blue'.
166
167tui.*, gtk.*::
168	Subcommands that can be configured here are 'top', 'report' and 'annotate'.
169	These values are booleans, for example:
170
171	[tui]
172		top = true
173
174	will make the TUI be the default for the 'top' subcommand. Those will be
175	available if the required libs were detected at tool build time.
176
177buildid.*::
178	buildid.dir::
179		Each executable and shared library in modern distributions comes with a
180		content based identifier that, if available, will be inserted in a
181		'perf.data' file header to, at analysis time find what is needed to do
182		symbol resolution, code annotation, etc.
183
184		The recording tools also stores a hard link or copy in a per-user
185		directory, $HOME/.debug/, of binaries, shared libraries, /proc/kallsyms
186		and /proc/kcore files to be used at analysis time.
187
188		The buildid.dir variable can be used to either change this directory
189		cache location, or to disable it altogether. If you want to disable it,
190		set buildid.dir to /dev/null. The default is $HOME/.debug
191
192annotate.*::
193	These options work only for TUI.
194	These are in control of addresses, jump function, source code
195	in lines of assembly code from a specific program.
196
197	annotate.hide_src_code::
198		If a program which is analyzed has source code,
199		this option lets 'annotate' print a list of assembly code with the source code.
200		For example, let's see a part of a program. There're four lines.
201		If this option is 'true', they can be printed
202		without source code from a program as below.
203
204		│        push   %rbp
205		│        mov    %rsp,%rbp
206		│        sub    $0x10,%rsp
207		│        mov    (%rdi),%rdx
208
209		But if this option is 'false', source code of the part
210		can be also printed as below. Default is 'false'.
211
212		│      struct rb_node *rb_next(const struct rb_node *node)
213		│      {
214		│        push   %rbp
215		│        mov    %rsp,%rbp
216		│        sub    $0x10,%rsp
217		│              struct rb_node *parent;
218219		│              if (RB_EMPTY_NODE(node))
220		│        mov    (%rdi),%rdx
221		│              return n;
222
223        annotate.use_offset::
224		Basing on a first address of a loaded function, offset can be used.
225		Instead of using original addresses of assembly code,
226		addresses subtracted from a base address can be printed.
227		Let's illustrate an example.
228		If a base address is 0XFFFFFFFF81624d50 as below,
229
230		ffffffff81624d50 <load0>
231
232		an address on assembly code has a specific absolute address as below
233
234		ffffffff816250b8:│  mov    0x8(%r14),%rdi
235
236		but if use_offset is 'true', an address subtracted from a base address is printed.
237		Default is true. This option is only applied to TUI.
238
239		             368:│  mov    0x8(%r14),%rdi
240
241	annotate.jump_arrows::
242		There can be jump instruction among assembly code.
243		Depending on a boolean value of jump_arrows,
244		arrows can be printed or not which represent
245		where do the instruction jump into as below.
246
247		│     ┌──jmp    1333
248		│     │  xchg   %ax,%ax
249		│1330:│  mov    %r15,%r10
250		│1333:└─→cmp    %r15,%r14
251
252		If jump_arrow is 'false', the arrows isn't printed as below.
253		Default is 'false'.
254
255		│      ↓ jmp    1333
256		│        xchg   %ax,%ax
257		│1330:   mov    %r15,%r10
258		│1333:   cmp    %r15,%r14
259
260        annotate.show_linenr::
261		When showing source code if this option is 'true',
262		line numbers are printed as below.
263
264		│1628         if (type & PERF_SAMPLE_IDENTIFIER) {
265		│     ↓ jne    508
266		│1628                 data->id = *array;
267		│1629                 array++;
268		│1630         }
269
270		However if this option is 'false', they aren't printed as below.
271		Default is 'false'.
272
273		│             if (type & PERF_SAMPLE_IDENTIFIER) {
274		│     ↓ jne    508
275		│                     data->id = *array;
276		│                     array++;
277		│             }
278
279        annotate.show_nr_jumps::
280		Let's see a part of assembly code.
281
282		│1382:   movb   $0x1,-0x270(%rbp)
283
284		If use this, the number of branches jumping to that address can be printed as below.
285		Default is 'false'.
286
287		│1 1382:   movb   $0x1,-0x270(%rbp)
288
289        annotate.show_total_period::
290		To compare two records on an instruction base, with this option
291		provided, display total number of samples that belong to a line
292		in assembly code. If this option is 'true', total periods are printed
293		instead of percent values as below.
294
295		  302 │      mov    %eax,%eax
296
297		But if this option is 'false', percent values for overhead are printed i.e.
298		Default is 'false'.
299
300		99.93 │      mov    %eax,%eax
301
302hist.*::
303	hist.percentage::
304		This option control the way to calculate overhead of filtered entries -
305		that means the value of this option is effective only if there's a
306		filter (by comm, dso or symbol name). Suppose a following example:
307
308		       Overhead  Symbols
309		       ........  .......
310		        33.33%     foo
311		        33.33%     bar
312		        33.33%     baz
313
314	       This is an original overhead and we'll filter out the first 'foo'
315	       entry. The value of 'relative' would increase the overhead of 'bar'
316	       and 'baz' to 50.00% for each, while 'absolute' would show their
317	       current overhead (33.33%).
318
319ui.*::
320	ui.show-headers::
321		This option controls display of column headers (like 'Overhead' and 'Symbol')
322		in 'report' and 'top'. If this option is false, they are hidden.
323		This option is only applied to TUI.
324
325call-graph.*::
326	When sub-commands 'top' and 'report' work with -g/—-children
327	there're options in control of call-graph.
328
329	call-graph.record-mode::
330		The record-mode can be 'fp' (frame pointer), 'dwarf' and 'lbr'.
331		The value of 'dwarf' is effective only if perf detect needed library
332		(libunwind or a recent version of libdw).
333		'lbr' only work for cpus that support it.
334
335	call-graph.dump-size::
336		The size of stack to dump in order to do post-unwinding. Default is 8192 (byte).
337		When using dwarf into record-mode, the default size will be used if omitted.
338
339	call-graph.print-type::
340		The print-types can be graph (graph absolute), fractal (graph relative),
341		flat and folded. This option controls a way to show overhead for each callchain
342		entry. Suppose a following example.
343
344                Overhead  Symbols
345                ........  .......
346                  40.00%  foo
347                          |
348                          ---foo
349                             |
350                             |--50.00%--bar
351                             |          main
352                             |
353                              --50.00%--baz
354                                        main
355
356		This output is a 'fractal' format. The 'foo' came from 'bar' and 'baz' exactly
357		half and half so 'fractal' shows 50.00% for each
358		(meaning that it assumes 100% total overhead of 'foo').
359
360		The 'graph' uses absolute overhead value of 'foo' as total so each of
361		'bar' and 'baz' callchain will have 20.00% of overhead.
362		If 'flat' is used, single column and linear exposure of call chains.
363		'folded' mean call chains are displayed in a line, separated by semicolons.
364
365	call-graph.order::
366		This option controls print order of callchains. The default is
367		'callee' which means callee is printed at top and then followed by its
368		caller and so on. The 'caller' prints it in reverse order.
369
370		If this option is not set and report.children or top.children is
371		set to true (or the equivalent command line option is given),
372		the default value of this option is changed to 'caller' for the
373		execution of 'perf report' or 'perf top'. Other commands will
374		still default to 'callee'.
375
376	call-graph.sort-key::
377		The callchains are merged if they contain same information.
378		The sort-key option determines a way to compare the callchains.
379		A value of 'sort-key' can be 'function' or 'address'.
380		The default is 'function'.
381
382	call-graph.threshold::
383		When there're many callchains it'd print tons of lines. So perf omits
384		small callchains under a certain overhead (threshold) and this option
385		control the threshold. Default is 0.5 (%). The overhead is calculated
386		by value depends on call-graph.print-type.
387
388	call-graph.print-limit::
389		This is a maximum number of lines of callchain printed for a single
390		histogram entry. Default is 0 which means no limitation.
391
392report.*::
393	report.sort_order::
394		Allows changing the default sort order from "comm,dso,symbol" to
395		some other default, for instance "sym,dso" may be more fitting for
396		kernel developers.
397	report.percent-limit::
398		This one is mostly the same as call-graph.threshold but works for
399		histogram entries. Entries having an overhead lower than this
400		percentage will not be printed. Default is '0'. If percent-limit
401		is '10', only entries which have more than 10% of overhead will be
402		printed.
403
404	report.queue-size::
405		This option sets up the maximum allocation size of the internal
406		event queue for ordering events. Default is 0, meaning no limit.
407
408	report.children::
409		'Children' means functions called from another function.
410		If this option is true, 'perf report' cumulates callchains of children
411		and show (accumulated) total overhead as well as 'Self' overhead.
412		Please refer to the 'perf report' manual. The default is 'true'.
413
414	report.group::
415		This option is to show event group information together.
416		Example output with this turned on, notice that there is one column
417		per event in the group, ref-cycles and cycles:
418
419		# group: {ref-cycles,cycles}
420		# ========
421		#
422		# Samples: 7K of event 'anon group { ref-cycles, cycles }'
423		# Event count (approx.): 6876107743
424		#
425		#         Overhead  Command      Shared Object               Symbol
426		# ................  .......  .................  ...................
427		#
428		    99.84%  99.76%  noploop  noploop            [.] main
429		     0.07%   0.00%  noploop  ld-2.15.so         [.] strcmp
430		     0.03%   0.00%  noploop  [kernel.kallsyms]  [k] timerqueue_del
431
432top.*::
433	top.children::
434		Same as 'report.children'. So if it is enabled, the output of 'top'
435		command will have 'Children' overhead column as well as 'Self' overhead
436		column by default.
437		The default is 'true'.
438
439man.*::
440	man.viewer::
441		This option can assign a tool to view manual pages when 'help'
442		subcommand was invoked. Supported tools are 'man', 'woman'
443		(with emacs client) and 'konqueror'. Default is 'man'.
444
445		New man viewer tool can be also added using 'man.<tool>.cmd'
446		or use different path using 'man.<tool>.path' config option.
447
448pager.*::
449	pager.<subcommand>::
450		When the subcommand is run on stdio, determine whether it uses
451		pager or not based on this value. Default is 'unspecified'.
452
453kmem.*::
454	kmem.default::
455		This option decides which allocator is to be analyzed if neither
456		'--slab' nor '--page' option is used. Default is 'slab'.
457
458record.*::
459	record.build-id::
460		This option can be 'cache', 'no-cache' or 'skip'.
461		'cache' is to post-process data and save/update the binaries into
462		the build-id cache (in ~/.debug). This is the default.
463		But if this option is 'no-cache', it will not update the build-id cache.
464		'skip' skips post-processing and does not update the cache.
465
466SEE ALSO
467--------
468linkperf:perf[1]
469