brintos

brintos / linux-shallow public Read only

0
0
Text · 22.8 KiB · 379f9d7 Raw
729 lines · plain
1perf-config(1)2==============3 4NAME5----6perf-config - Get and set variables in a configuration file.7 8SYNOPSIS9--------10[verse]11'perf config' [<file-option>] [section.name[=value] ...]12or13'perf config' [<file-option>] -l | --list14 15DESCRIPTION16-----------17You can manage variables in a configuration file with this command.18 19OPTIONS20-------21 22-l::23--list::24	Show current config variables, name and value, for all sections.25 26--user::27	For writing and reading options: write to user28	'$HOME/.perfconfig' file or read it.29 30--system::31	For writing and reading options: write to system-wide32	'$(sysconfdir)/perfconfig' or read it.33 34CONFIGURATION FILE35------------------36 37The perf configuration file contains many variables to change various38aspects of each of its tools, including output, disk usage, etc.39The '$HOME/.perfconfig' file is used to store a per-user configuration.40The file '$(sysconfdir)/perfconfig' can be used to41store a system-wide default configuration.42 43One an disable reading config files by setting the PERF_CONFIG environment44variable to /dev/null, or provide an alternate config file by setting that45variable.46 47When reading or writing, the values are read from the system and user48configuration files by default, and options '--system' and '--user'49can be used to tell the command to read from or write to only that location.50 51Syntax52~~~~~~53 54The file consist of sections. A section starts with its name55surrounded by square brackets and continues till the next section56begins. Each variable must be in a section, and have the form57'name = value', for example:58 59	[section]60		name1 = value161		name2 = value262 63Section names are case sensitive and can contain any characters except64newline (double quote `"` and backslash have to be escaped as `\"` and `\\`,65respectively). Section headers can't span multiple lines.66 67Example68~~~~~~~69 70Given a $HOME/.perfconfig like this:71 72#73# This is the config file, and74# a '#' and ';' character indicates a comment75#76 77	[colors]78		# Color variables79		top = red, default80		medium = green, default81		normal = lightgray, default82		selected = white, lightgray83		jump_arrows = blue, default84		addr = magenta, default85		root = white, blue86 87	[tui]88		# Defaults if linked with libslang89		report = on90		annotate = on91		top = on92 93	[buildid]94		# Default, disable using /dev/null95		dir = ~/.debug96 97	[annotate]98		# Defaults99		hide_src_code = false100		use_offset = true101		jump_arrows = true102		show_nr_jumps = false103 104	[help]105		# Format can be man, info, web or html106		format = man107		autocorrect = 0108 109	[ui]110		show-headers = true111 112	[call-graph]113		# fp (framepointer), dwarf114		record-mode = fp115		print-type = graph116		order = caller117		sort-key = function118 119	[report]120		# Defaults121		sort_order = comm,dso,symbol122		percent-limit = 0123		queue-size = 0124		children = true125		group = true126		skip-empty = true127 128 129You can hide source code of annotate feature setting the config to false with130 131	% perf config annotate.hide_src_code=true132 133If you want to add or modify several config items, you can do like134 135	% perf config ui.show-headers=false kmem.default=slab136 137To modify the sort order of report functionality in user config file(i.e. `~/.perfconfig`), do138 139	% perf config --user report.sort-order=srcline140 141To change colors of selected line to other foreground and background colors142in system config file (i.e. `$(sysconf)/perfconfig`), do143 144	% perf config --system colors.selected=yellow,green145 146To query the record mode of call graph, do147 148	% perf config call-graph.record-mode149 150If you want to know multiple config key/value pairs, you can do like151 152	% perf config report.queue-size call-graph.order report.children153 154To query the config value of sort order of call graph in user config file (i.e. `~/.perfconfig`), do155 156	% perf config --user call-graph.sort-order157 158To query the config value of buildid directory in system config file (i.e. `$(sysconf)/perfconfig`), do159 160	% perf config --system buildid.dir161 162Variables163~~~~~~~~~164 165colors.*::166	The variables for customizing the colors used in the output for the167	'report', 'top' and 'annotate' in the TUI. They should specify the168	foreground and background colors, separated by a comma, for example:169 170		medium = green, lightgray171 172	If you want to use the color configured for you terminal, just leave it173	as 'default', for example:174 175		medium = default, lightgray176 177	Available colors:178	red, yellow, green, cyan, gray, black, blue,179	white, default, magenta, lightgray180 181	colors.top::182		'top' means a overhead percentage which is more than 5%.183		And values of this variable specify percentage colors.184		Basic key values are foreground-color 'red' and185		background-color 'default'.186	colors.medium::187		'medium' means a overhead percentage which has more than 0.5%.188		Default values are 'green' and 'default'.189	colors.normal::190		'normal' means the rest of overhead percentages191		except 'top', 'medium', 'selected'.192		Default values are 'lightgray' and 'default'.193	colors.selected::194		This selects the colors for the current entry in a list of entries195		from sub-commands (top, report, annotate).196		Default values are 'black' and 'lightgray'.197	colors.jump_arrows::198		Colors for jump arrows on assembly code listings199		such as 'jns', 'jmp', 'jane', etc.200		Default values are 'blue', 'default'.201	colors.addr::202		This selects colors for addresses from 'annotate'.203		Default values are 'magenta', 'default'.204	colors.root::205		Colors for headers in the output of a sub-commands (top, report).206		Default values are 'white', 'blue'.207 208core.*::209	core.proc-map-timeout::210		Sets a timeout (in milliseconds) for parsing /proc/<pid>/maps files.211		Can be overridden by the --proc-map-timeout option on supported212		subcommands. The default timeout is 500ms.213 214tui.*, gtk.*::215	Subcommands that can be configured here are 'top', 'report' and 'annotate'.216	These values are booleans, for example:217 218	[tui]219		top = true220 221	will make the TUI be the default for the 'top' subcommand. Those will be222	available if the required libs were detected at tool build time.223 224buildid.*::225	buildid.dir::226		Each executable and shared library in modern distributions comes with a227		content based identifier that, if available, will be inserted in a228		'perf.data' file header to, at analysis time find what is needed to do229		symbol resolution, code annotation, etc.230 231		The recording tools also stores a hard link or copy in a per-user232		directory, $HOME/.debug/, of binaries, shared libraries, /proc/kallsyms233		and /proc/kcore files to be used at analysis time.234 235		The buildid.dir variable can be used to either change this directory236		cache location, or to disable it altogether. If you want to disable it,237		set buildid.dir to /dev/null. The default is $HOME/.debug238 239buildid-cache.*::240	buildid-cache.debuginfod=URLs241		Specify debuginfod URLs to be used when retrieving perf.data binaries,242		it follows the same syntax as the DEBUGINFOD_URLS variable, like:243 244		  buildid-cache.debuginfod=http://192.168.122.174:8002245 246annotate.*::247	These are in control of addresses, jump function, source code248	in lines of assembly code from a specific program.249 250	annotate.addr2line::251		addr2line binary to use for file names and line numbers.252 253	annotate.objdump::254		objdump binary to use for disassembly and annotations,255		including in the 'perf test' command.256 257	annotate.disassembler_style::258		Use this to change the default disassembler style to some other value259		supported by binutils, such as "intel", see the '-M' option help in the260		'objdump' man page.261 262	annotate.hide_src_code::263		If a program which is analyzed has source code,264		this option lets 'annotate' print a list of assembly code with the source code.265		For example, let's see a part of a program. There're four lines.266		If this option is 'true', they can be printed267		without source code from a program as below.268 269		│        push   %rbp270		│        mov    %rsp,%rbp271		│        sub    $0x10,%rsp272		│        mov    (%rdi),%rdx273 274		But if this option is 'false', source code of the part275		can be also printed as below. Default is 'false'.276 277		│      struct rb_node *rb_next(const struct rb_node *node)278		│      {279		│        push   %rbp280		│        mov    %rsp,%rbp281		│        sub    $0x10,%rsp282		│              struct rb_node *parent;283284		│              if (RB_EMPTY_NODE(node))285		│        mov    (%rdi),%rdx286		│              return n;287 288		This option works with tui, stdio2 browsers.289 290        annotate.use_offset::291		Basing on a first address of a loaded function, offset can be used.292		Instead of using original addresses of assembly code,293		addresses subtracted from a base address can be printed.294		Let's illustrate an example.295		If a base address is 0XFFFFFFFF81624d50 as below,296 297		ffffffff81624d50 <load0>298 299		an address on assembly code has a specific absolute address as below300 301		ffffffff816250b8:│  mov    0x8(%r14),%rdi302 303		but if use_offset is 'true', an address subtracted from a base address is printed.304		Default is true. This option is only applied to TUI.305 306		             368:│  mov    0x8(%r14),%rdi307 308		This option works with tui, stdio2 browsers.309 310	annotate.jump_arrows::311		There can be jump instruction among assembly code.312		Depending on a boolean value of jump_arrows,313		arrows can be printed or not which represent314		where do the instruction jump into as below.315 316		│     ┌──jmp    1333317		│     │  xchg   %ax,%ax318		│1330:│  mov    %r15,%r10319		│1333:└─→cmp    %r15,%r14320 321		If jump_arrow is 'false', the arrows isn't printed as below.322		Default is 'false'.323 324		│      ↓ jmp    1333325		│        xchg   %ax,%ax326		│1330:   mov    %r15,%r10327		│1333:   cmp    %r15,%r14328 329		This option works with tui browser.330 331        annotate.show_linenr::332		When showing source code if this option is 'true',333		line numbers are printed as below.334 335		│1628         if (type & PERF_SAMPLE_IDENTIFIER) {336		│     ↓ jne    508337		│1628                 data->id = *array;338		│1629                 array++;339		│1630         }340 341		However if this option is 'false', they aren't printed as below.342		Default is 'false'.343 344		│             if (type & PERF_SAMPLE_IDENTIFIER) {345		│     ↓ jne    508346		│                     data->id = *array;347		│                     array++;348		│             }349 350		This option works with tui, stdio2 browsers.351 352        annotate.show_nr_jumps::353		Let's see a part of assembly code.354 355		│1382:   movb   $0x1,-0x270(%rbp)356 357		If use this, the number of branches jumping to that address can be printed as below.358		Default is 'false'.359 360		│1 1382:   movb   $0x1,-0x270(%rbp)361 362		This option works with tui, stdio2 browsers.363 364        annotate.show_total_period::365		To compare two records on an instruction base, with this option366		provided, display total number of samples that belong to a line367		in assembly code. If this option is 'true', total periods are printed368		instead of percent values as below.369 370		  302 │      mov    %eax,%eax371 372		But if this option is 'false', percent values for overhead are printed i.e.373		Default is 'false'.374 375		99.93 │      mov    %eax,%eax376 377		This option works with tui, stdio2, stdio browsers.378 379	annotate.show_nr_samples::380		By default perf annotate shows percentage of samples. This option381		can be used to print absolute number of samples. Ex, when set as382		false:383 384		Percent│385		 74.03 │      mov    %fs:0x28,%rax386 387		When set as true:388 389		Samples│390		     6 │      mov    %fs:0x28,%rax391 392		This option works with tui, stdio2, stdio browsers.393 394	annotate.offset_level::395		Default is '1', meaning just jump targets will have offsets show right beside396		the instruction. When set to '2' 'call' instructions will also have its offsets397		shown, 3 or higher will show offsets for all instructions.398 399		This option works with tui, stdio2 browsers.400 401	annotate.demangle::402		Demangle symbol names to human readable form. Default is 'true'.403 404	annotate.demangle_kernel::405		Demangle kernel symbol names to human readable form. Default is 'true'.406 407hist.*::408	hist.percentage::409		This option control the way to calculate overhead of filtered entries -410		that means the value of this option is effective only if there's a411		filter (by comm, dso or symbol name). Suppose a following example:412 413		       Overhead  Symbols414		       ........  .......415		        33.33%     foo416		        33.33%     bar417		        33.33%     baz418 419	       This is an original overhead and we'll filter out the first 'foo'420	       entry. The value of 'relative' would increase the overhead of 'bar'421	       and 'baz' to 50.00% for each, while 'absolute' would show their422	       current overhead (33.33%).423 424ui.*::425	ui.show-headers::426		This option controls display of column headers (like 'Overhead' and 'Symbol')427		in 'report' and 'top'. If this option is false, they are hidden.428		This option is only applied to TUI.429 430call-graph.*::431	The following controls the handling of call-graphs (obtained via the432	-g/--call-graph options).433 434	call-graph.record-mode::435		The mode for user space can be 'fp' (frame pointer), 'dwarf'436		and 'lbr'.  The value 'dwarf' is effective only if libunwind437		(or a recent version of libdw) is present on the system;438		the value 'lbr' only works for certain cpus. The method for439		kernel space is controlled not by this option but by the440		kernel config (CONFIG_UNWINDER_*).441 442	call-graph.dump-size::443		The size of stack to dump in order to do post-unwinding. Default is 8192 (byte).444		When using dwarf into record-mode, the default size will be used if omitted.445 446	call-graph.print-type::447		The print-types can be graph (graph absolute), fractal (graph relative),448		flat and folded. This option controls a way to show overhead for each callchain449		entry. Suppose a following example.450 451                Overhead  Symbols452                ........  .......453                  40.00%  foo454                          |455                          ---foo456                             |457                             |--50.00%--bar458                             |          main459                             |460                              --50.00%--baz461                                        main462 463		This output is a 'fractal' format. The 'foo' came from 'bar' and 'baz' exactly464		half and half so 'fractal' shows 50.00% for each465		(meaning that it assumes 100% total overhead of 'foo').466 467		The 'graph' uses absolute overhead value of 'foo' as total so each of468		'bar' and 'baz' callchain will have 20.00% of overhead.469		If 'flat' is used, single column and linear exposure of call chains.470		'folded' mean call chains are displayed in a line, separated by semicolons.471 472	call-graph.order::473		This option controls print order of callchains. The default is474		'callee' which means callee is printed at top and then followed by its475		caller and so on. The 'caller' prints it in reverse order.476 477		If this option is not set and report.children or top.children is478		set to true (or the equivalent command line option is given),479		the default value of this option is changed to 'caller' for the480		execution of 'perf report' or 'perf top'. Other commands will481		still default to 'callee'.482 483	call-graph.sort-key::484		The callchains are merged if they contain same information.485		The sort-key option determines a way to compare the callchains.486		A value of 'sort-key' can be 'function' or 'address'.487		The default is 'function'.488 489	call-graph.threshold::490		When there're many callchains it'd print tons of lines. So perf omits491		small callchains under a certain overhead (threshold) and this option492		control the threshold. Default is 0.5 (%). The overhead is calculated493		by value depends on call-graph.print-type.494 495	call-graph.print-limit::496		This is a maximum number of lines of callchain printed for a single497		histogram entry. Default is 0 which means no limitation.498 499report.*::500	report.sort_order::501		Allows changing the default sort order from "comm,dso,symbol" to502		some other default, for instance "sym,dso" may be more fitting for503		kernel developers.504	report.percent-limit::505		This one is mostly the same as call-graph.threshold but works for506		histogram entries. Entries having an overhead lower than this507		percentage will not be printed. Default is '0'. If percent-limit508		is '10', only entries which have more than 10% of overhead will be509		printed.510 511	report.queue-size::512		This option sets up the maximum allocation size of the internal513		event queue for ordering events. Default is 0, meaning no limit.514 515	report.children::516		'Children' means functions called from another function.517		If this option is true, 'perf report' cumulates callchains of children518		and show (accumulated) total overhead as well as 'Self' overhead.519		Please refer to the 'perf report' manual. The default is 'true'.520 521	report.group::522		This option is to show event group information together.523		Example output with this turned on, notice that there is one column524		per event in the group, ref-cycles and cycles:525 526		# group: {ref-cycles,cycles}527		# ========528		#529		# Samples: 7K of event 'anon group { ref-cycles, cycles }'530		# Event count (approx.): 6876107743531		#532		#         Overhead  Command      Shared Object               Symbol533		# ................  .......  .................  ...................534		#535		    99.84%  99.76%  noploop  noploop            [.] main536		     0.07%   0.00%  noploop  ld-2.15.so         [.] strcmp537		     0.03%   0.00%  noploop  [kernel.kallsyms]  [k] timerqueue_del538 539	report.skip-empty::540		This option can change default stat behavior with empty results.541		If it's set true, 'perf report --stat' will not show 0 stats.542 543top.*::544	top.children::545		Same as 'report.children'. So if it is enabled, the output of 'top'546		command will have 'Children' overhead column as well as 'Self' overhead547		column by default.548		The default is 'true'.549 550	top.call-graph::551		This is identical to 'call-graph.record-mode', except it is552		applicable only for 'top' subcommand. This option ONLY setup553		the unwind method. To enable 'perf top' to actually use it,554		the command line option -g must be specified.555 556man.*::557	man.viewer::558		This option can assign a tool to view manual pages when 'help'559		subcommand was invoked. Supported tools are 'man', 'woman'560		(with emacs client) and 'konqueror'. Default is 'man'.561 562		New man viewer tool can be also added using 'man.<tool>.cmd'563		or use different path using 'man.<tool>.path' config option.564 565pager.*::566	pager.<subcommand>::567		When the subcommand is run on stdio, determine whether it uses568		pager or not based on this value. Default is 'unspecified'.569 570kmem.*::571	kmem.default::572		This option decides which allocator is to be analyzed if neither573		'--slab' nor '--page' option is used. Default is 'slab'.574 575record.*::576	record.build-id::577		This option can be 'cache', 'no-cache', 'skip' or 'mmap'.578		'cache' is to post-process data and save/update the binaries into579		the build-id cache (in ~/.debug). This is the default.580		But if this option is 'no-cache', it will not update the build-id cache.581		'skip' skips post-processing and does not update the cache.582		'mmap' skips post-processing and reads build-ids from MMAP events.583 584	record.call-graph::585		This is identical to 'call-graph.record-mode', except it is586		applicable only for 'record' subcommand. This option ONLY setup587		the unwind method. To enable 'perf record' to actually use it,588		the command line option -g must be specified.589 590	record.aio::591		Use 'n' control blocks in asynchronous (Posix AIO) trace writing592		mode ('n' default: 1, max: 4).593 594	record.debuginfod::595		Specify debuginfod URL to be used when cacheing perf.data binaries,596		it follows the same syntax as the DEBUGINFOD_URLS variable, like:597 598		  http://192.168.122.174:8002599 600		If the URLs is 'system', the value of DEBUGINFOD_URLS system environment601		variable is used.602 603diff.*::604	diff.order::605		This option sets the number of columns to sort the result.606		The default is 0, which means sorting by baseline.607		Setting it to 1 will sort the result by delta (or other608		compute method selected).609 610	diff.compute::611		This options sets the method for computing the diff result.612		Possible values are 'delta', 'delta-abs', 'ratio' and613		'wdiff'.  Default is 'delta'.614 615trace.*::616	trace.add_events::617		Allows adding a set of events to add to the ones specified618		by the user, or use as a default one if none was specified.619		The initial use case is to add augmented_raw_syscalls.o to620		activate the 'perf trace' logic that looks for syscall621		pointer contents after the normal tracepoint payload.622 623	trace.args_alignment::624		Number of columns to align the argument list, default is 70,625		use 40 for the strace default, zero to no alignment.626 627	trace.no_inherit::628		Do not follow children threads.629 630	trace.show_arg_names::631		Should syscall argument names be printed? If not then trace.show_zeros632		will be set.633 634	trace.show_duration::635		Show syscall duration.636 637	trace.show_prefix::638		If set to 'yes' will show common string prefixes in tables. The default639		is to remove the common prefix in things like "MAP_SHARED", showing just "SHARED".640 641	trace.show_timestamp::642		Show syscall start timestamp.643 644	trace.show_zeros::645		Do not suppress syscall arguments that are equal to zero.646 647	trace.tracepoint_beautifiers::648		Use "libtraceevent" to use that library to augment the tracepoint arguments,649		"libbeauty", the default, to use the same argument beautifiers used in the650		strace-like sys_enter+sys_exit lines.651 652ftrace.*::653	ftrace.tracer::654		Can be used to select the default tracer when neither -G nor655		-F option is not specified. Possible values are 'function' and656		'function_graph'.657 658samples.*::659 660	samples.context::661		Define how many ns worth of time to show662		around samples in perf report sample context browser.663 664scripts.*::665 666	Any option defines a script that is added to the scripts menu667	in the interactive perf browser and whose output is displayed.668	The name of the option is the name, the value is a script command line.669	The script gets the same options passed as a full perf script,670	in particular -i perfdata file, --cpu, --tid671 672convert.*::673 674	convert.queue-size::675		Limit the size of ordered_events queue, so we could control676		allocation size of perf data files without proper finished677		round events.678stat.*::679 680	stat.big-num::681		(boolean) Change the default for "--big-num". To make682		"--no-big-num" the default, set "stat.big-num=false".683 684intel-pt.*::685 686	intel-pt.cache-divisor::687 688	intel-pt.mispred-all::689		If set, Intel PT decoder will set the mispred flag on all690		branches.691 692	intel-pt.max-loops::693		If set and non-zero, the maximum number of unconditional694		branches decoded without consuming any trace packets. If695		the maximum is exceeded there will be a "Never-ending loop"696		error. The default is 100000.697 698auxtrace.*::699 700	auxtrace.dumpdir::701		s390 only. The directory to save the auxiliary trace buffer702		can be changed using this option. Ex, auxtrace.dumpdir=/tmp.703		If the directory does not exist or has the wrong file type,704		the current directory is used.705 706itrace.*::707 708	debug-log-buffer-size::709		Log size in bytes to output when using the option --itrace=d+e710		Refer 'itrace' option of linkperf:perf-script[1] or711		linkperf:perf-report[1]. The default is 16384.712 713daemon.*::714 715	daemon.base::716		Base path for daemon data. All sessions data are stored under717		this path.718 719session-<NAME>.*::720 721	session-<NAME>.run::722 723		Defines new record session for daemon. The value is record's724		command line without the 'record' keyword.725 726SEE ALSO727--------728linkperf:perf[1]729