|  | perf-config(1) | 
|  | ============== | 
|  |  | 
|  | NAME | 
|  | ---- | 
|  | perf-config - Get and set variables in a configuration file. | 
|  |  | 
|  | SYNOPSIS | 
|  | -------- | 
|  | [verse] | 
|  | 'perf config' [<file-option>] [section.name[=value] ...] | 
|  | or | 
|  | 'perf config' [<file-option>] -l | --list | 
|  |  | 
|  | DESCRIPTION | 
|  | ----------- | 
|  | You can manage variables in a configuration file with this command. | 
|  |  | 
|  | OPTIONS | 
|  | ------- | 
|  |  | 
|  | -l:: | 
|  | --list:: | 
|  | Show current config variables, name and value, for all sections. | 
|  |  | 
|  | --user:: | 
|  | For writing and reading options: write to user | 
|  | '$HOME/.perfconfig' file or read it. | 
|  |  | 
|  | --system:: | 
|  | For writing and reading options: write to system-wide | 
|  | '$(sysconfdir)/perfconfig' or read it. | 
|  |  | 
|  | CONFIGURATION FILE | 
|  | ------------------ | 
|  |  | 
|  | The perf configuration file contains many variables to change various | 
|  | aspects of each of its tools, including output, disk usage, etc. | 
|  | The '$HOME/.perfconfig' file is used to store a per-user configuration. | 
|  | The file '$(sysconfdir)/perfconfig' can be used to | 
|  | store a system-wide default configuration. | 
|  |  | 
|  | When reading or writing, the values are read from the system and user | 
|  | configuration files by default, and options '--system' and '--user' | 
|  | can be used to tell the command to read from or write to only that location. | 
|  |  | 
|  | Syntax | 
|  | ~~~~~~ | 
|  |  | 
|  | The file consist of sections. A section starts with its name | 
|  | surrounded by square brackets and continues till the next section | 
|  | begins. Each variable must be in a section, and have the form | 
|  | 'name = value', for example: | 
|  |  | 
|  | [section] | 
|  | name1 = value1 | 
|  | name2 = value2 | 
|  |  | 
|  | Section names are case sensitive and can contain any characters except | 
|  | newline (double quote `"` and backslash have to be escaped as `\"` and `\\`, | 
|  | respectively). Section headers can't span multiple lines. | 
|  |  | 
|  | Example | 
|  | ~~~~~~~ | 
|  |  | 
|  | Given a $HOME/.perfconfig like this: | 
|  |  | 
|  | # | 
|  | # This is the config file, and | 
|  | # a '#' and ';' character indicates a comment | 
|  | # | 
|  |  | 
|  | [colors] | 
|  | # Color variables | 
|  | top = red, default | 
|  | medium = green, default | 
|  | normal = lightgray, default | 
|  | selected = white, lightgray | 
|  | jump_arrows = blue, default | 
|  | addr = magenta, default | 
|  | root = white, blue | 
|  |  | 
|  | [tui] | 
|  | # Defaults if linked with libslang | 
|  | report = on | 
|  | annotate = on | 
|  | top = on | 
|  |  | 
|  | [buildid] | 
|  | # Default, disable using /dev/null | 
|  | dir = ~/.debug | 
|  |  | 
|  | [annotate] | 
|  | # Defaults | 
|  | hide_src_code = false | 
|  | use_offset = true | 
|  | jump_arrows = true | 
|  | show_nr_jumps = false | 
|  |  | 
|  | [help] | 
|  | # Format can be man, info, web or html | 
|  | format = man | 
|  | autocorrect = 0 | 
|  |  | 
|  | [ui] | 
|  | show-headers = true | 
|  |  | 
|  | [call-graph] | 
|  | # fp (framepointer), dwarf | 
|  | record-mode = fp | 
|  | print-type = graph | 
|  | order = caller | 
|  | sort-key = function | 
|  |  | 
|  | [report] | 
|  | # Defaults | 
|  | sort-order = comm,dso,symbol | 
|  | percent-limit = 0 | 
|  | queue-size = 0 | 
|  | children = true | 
|  | group = true | 
|  |  | 
|  | You can hide source code of annotate feature setting the config to false with | 
|  |  | 
|  | % perf config annotate.hide_src_code=true | 
|  |  | 
|  | If you want to add or modify several config items, you can do like | 
|  |  | 
|  | % perf config ui.show-headers=false kmem.default=slab | 
|  |  | 
|  | To modify the sort order of report functionality in user config file(i.e. `~/.perfconfig`), do | 
|  |  | 
|  | % perf config --user report sort-order=srcline | 
|  |  | 
|  | To change colors of selected line to other foreground and background colors | 
|  | in system config file (i.e. `$(sysconf)/perfconfig`), do | 
|  |  | 
|  | % perf config --system colors.selected=yellow,green | 
|  |  | 
|  | To query the record mode of call graph, do | 
|  |  | 
|  | % perf config call-graph.record-mode | 
|  |  | 
|  | If you want to know multiple config key/value pairs, you can do like | 
|  |  | 
|  | % perf config report.queue-size call-graph.order report.children | 
|  |  | 
|  | To query the config value of sort order of call graph in user config file (i.e. `~/.perfconfig`), do | 
|  |  | 
|  | % perf config --user call-graph.sort-order | 
|  |  | 
|  | To query the config value of buildid directory in system config file (i.e. `$(sysconf)/perfconfig`), do | 
|  |  | 
|  | % perf config --system buildid.dir | 
|  |  | 
|  | Variables | 
|  | ~~~~~~~~~ | 
|  |  | 
|  | colors.*:: | 
|  | The variables for customizing the colors used in the output for the | 
|  | 'report', 'top' and 'annotate' in the TUI. They should specify the | 
|  | foreground and background colors, separated by a comma, for example: | 
|  |  | 
|  | medium = green, lightgray | 
|  |  | 
|  | If you want to use the color configured for you terminal, just leave it | 
|  | as 'default', for example: | 
|  |  | 
|  | medium = default, lightgray | 
|  |  | 
|  | Available colors: | 
|  | red, yellow, green, cyan, gray, black, blue, | 
|  | white, default, magenta, lightgray | 
|  |  | 
|  | colors.top:: | 
|  | 'top' means a overhead percentage which is more than 5%. | 
|  | And values of this variable specify percentage colors. | 
|  | Basic key values are foreground-color 'red' and | 
|  | background-color 'default'. | 
|  | colors.medium:: | 
|  | 'medium' means a overhead percentage which has more than 0.5%. | 
|  | Default values are 'green' and 'default'. | 
|  | colors.normal:: | 
|  | 'normal' means the rest of overhead percentages | 
|  | except 'top', 'medium', 'selected'. | 
|  | Default values are 'lightgray' and 'default'. | 
|  | colors.selected:: | 
|  | This selects the colors for the current entry in a list of entries | 
|  | from sub-commands (top, report, annotate). | 
|  | Default values are 'black' and 'lightgray'. | 
|  | colors.jump_arrows:: | 
|  | Colors for jump arrows on assembly code listings | 
|  | such as 'jns', 'jmp', 'jane', etc. | 
|  | Default values are 'blue', 'default'. | 
|  | colors.addr:: | 
|  | This selects colors for addresses from 'annotate'. | 
|  | Default values are 'magenta', 'default'. | 
|  | colors.root:: | 
|  | Colors for headers in the output of a sub-commands (top, report). | 
|  | Default values are 'white', 'blue'. | 
|  |  | 
|  | tui.*, gtk.*:: | 
|  | Subcommands that can be configured here are 'top', 'report' and 'annotate'. | 
|  | These values are booleans, for example: | 
|  |  | 
|  | [tui] | 
|  | top = true | 
|  |  | 
|  | will make the TUI be the default for the 'top' subcommand. Those will be | 
|  | available if the required libs were detected at tool build time. | 
|  |  | 
|  | buildid.*:: | 
|  | buildid.dir:: | 
|  | Each executable and shared library in modern distributions comes with a | 
|  | content based identifier that, if available, will be inserted in a | 
|  | 'perf.data' file header to, at analysis time find what is needed to do | 
|  | symbol resolution, code annotation, etc. | 
|  |  | 
|  | The recording tools also stores a hard link or copy in a per-user | 
|  | directory, $HOME/.debug/, of binaries, shared libraries, /proc/kallsyms | 
|  | and /proc/kcore files to be used at analysis time. | 
|  |  | 
|  | The buildid.dir variable can be used to either change this directory | 
|  | cache location, or to disable it altogether. If you want to disable it, | 
|  | set buildid.dir to /dev/null. The default is $HOME/.debug | 
|  |  | 
|  | annotate.*:: | 
|  | These options work only for TUI. | 
|  | These are in control of addresses, jump function, source code | 
|  | in lines of assembly code from a specific program. | 
|  |  | 
|  | annotate.hide_src_code:: | 
|  | If a program which is analyzed has source code, | 
|  | this option lets 'annotate' print a list of assembly code with the source code. | 
|  | For example, let's see a part of a program. There're four lines. | 
|  | If this option is 'true', they can be printed | 
|  | without source code from a program as below. | 
|  |  | 
|  | │        push   %rbp | 
|  | │        mov    %rsp,%rbp | 
|  | │        sub    $0x10,%rsp | 
|  | │        mov    (%rdi),%rdx | 
|  |  | 
|  | But if this option is 'false', source code of the part | 
|  | can be also printed as below. Default is 'false'. | 
|  |  | 
|  | │      struct rb_node *rb_next(const struct rb_node *node) | 
|  | │      { | 
|  | │        push   %rbp | 
|  | │        mov    %rsp,%rbp | 
|  | │        sub    $0x10,%rsp | 
|  | │              struct rb_node *parent; | 
|  | │ | 
|  | │              if (RB_EMPTY_NODE(node)) | 
|  | │        mov    (%rdi),%rdx | 
|  | │              return n; | 
|  |  | 
|  | annotate.use_offset:: | 
|  | Basing on a first address of a loaded function, offset can be used. | 
|  | Instead of using original addresses of assembly code, | 
|  | addresses subtracted from a base address can be printed. | 
|  | Let's illustrate an example. | 
|  | If a base address is 0XFFFFFFFF81624d50 as below, | 
|  |  | 
|  | ffffffff81624d50 <load0> | 
|  |  | 
|  | an address on assembly code has a specific absolute address as below | 
|  |  | 
|  | ffffffff816250b8:│  mov    0x8(%r14),%rdi | 
|  |  | 
|  | but if use_offset is 'true', an address subtracted from a base address is printed. | 
|  | Default is true. This option is only applied to TUI. | 
|  |  | 
|  | 368:│  mov    0x8(%r14),%rdi | 
|  |  | 
|  | annotate.jump_arrows:: | 
|  | There can be jump instruction among assembly code. | 
|  | Depending on a boolean value of jump_arrows, | 
|  | arrows can be printed or not which represent | 
|  | where do the instruction jump into as below. | 
|  |  | 
|  | │     ┌──jmp    1333 | 
|  | │     │  xchg   %ax,%ax | 
|  | │1330:│  mov    %r15,%r10 | 
|  | │1333:└─→cmp    %r15,%r14 | 
|  |  | 
|  | If jump_arrow is 'false', the arrows isn't printed as below. | 
|  | Default is 'false'. | 
|  |  | 
|  | │      ↓ jmp    1333 | 
|  | │        xchg   %ax,%ax | 
|  | │1330:   mov    %r15,%r10 | 
|  | │1333:   cmp    %r15,%r14 | 
|  |  | 
|  | annotate.show_linenr:: | 
|  | When showing source code if this option is 'true', | 
|  | line numbers are printed as below. | 
|  |  | 
|  | │1628         if (type & PERF_SAMPLE_IDENTIFIER) { | 
|  | │     ↓ jne    508 | 
|  | │1628                 data->id = *array; | 
|  | │1629                 array++; | 
|  | │1630         } | 
|  |  | 
|  | However if this option is 'false', they aren't printed as below. | 
|  | Default is 'false'. | 
|  |  | 
|  | │             if (type & PERF_SAMPLE_IDENTIFIER) { | 
|  | │     ↓ jne    508 | 
|  | │                     data->id = *array; | 
|  | │                     array++; | 
|  | │             } | 
|  |  | 
|  | annotate.show_nr_jumps:: | 
|  | Let's see a part of assembly code. | 
|  |  | 
|  | │1382:   movb   $0x1,-0x270(%rbp) | 
|  |  | 
|  | If use this, the number of branches jumping to that address can be printed as below. | 
|  | Default is 'false'. | 
|  |  | 
|  | │1 1382:   movb   $0x1,-0x270(%rbp) | 
|  |  | 
|  | annotate.show_total_period:: | 
|  | To compare two records on an instruction base, with this option | 
|  | provided, display total number of samples that belong to a line | 
|  | in assembly code. If this option is 'true', total periods are printed | 
|  | instead of percent values as below. | 
|  |  | 
|  | 302 │      mov    %eax,%eax | 
|  |  | 
|  | But if this option is 'false', percent values for overhead are printed i.e. | 
|  | Default is 'false'. | 
|  |  | 
|  | 99.93 │      mov    %eax,%eax | 
|  |  | 
|  | hist.*:: | 
|  | hist.percentage:: | 
|  | This option control the way to calculate overhead of filtered entries - | 
|  | that means the value of this option is effective only if there's a | 
|  | filter (by comm, dso or symbol name). Suppose a following example: | 
|  |  | 
|  | Overhead  Symbols | 
|  | ........  ....... | 
|  | 33.33%     foo | 
|  | 33.33%     bar | 
|  | 33.33%     baz | 
|  |  | 
|  | This is an original overhead and we'll filter out the first 'foo' | 
|  | entry. The value of 'relative' would increase the overhead of 'bar' | 
|  | and 'baz' to 50.00% for each, while 'absolute' would show their | 
|  | current overhead (33.33%). | 
|  |  | 
|  | ui.*:: | 
|  | ui.show-headers:: | 
|  | This option controls display of column headers (like 'Overhead' and 'Symbol') | 
|  | in 'report' and 'top'. If this option is false, they are hidden. | 
|  | This option is only applied to TUI. | 
|  |  | 
|  | call-graph.*:: | 
|  | When sub-commands 'top' and 'report' work with -g/—-children | 
|  | there're options in control of call-graph. | 
|  |  | 
|  | call-graph.record-mode:: | 
|  | The record-mode can be 'fp' (frame pointer), 'dwarf' and 'lbr'. | 
|  | The value of 'dwarf' is effective only if perf detect needed library | 
|  | (libunwind or a recent version of libdw). | 
|  | 'lbr' only work for cpus that support it. | 
|  |  | 
|  | call-graph.dump-size:: | 
|  | The size of stack to dump in order to do post-unwinding. Default is 8192 (byte). | 
|  | When using dwarf into record-mode, the default size will be used if omitted. | 
|  |  | 
|  | call-graph.print-type:: | 
|  | The print-types can be graph (graph absolute), fractal (graph relative), | 
|  | flat and folded. This option controls a way to show overhead for each callchain | 
|  | entry. Suppose a following example. | 
|  |  | 
|  | Overhead  Symbols | 
|  | ........  ....... | 
|  | 40.00%  foo | 
|  | | | 
|  | ---foo | 
|  | | | 
|  | |--50.00%--bar | 
|  | |          main | 
|  | | | 
|  | --50.00%--baz | 
|  | main | 
|  |  | 
|  | This output is a 'fractal' format. The 'foo' came from 'bar' and 'baz' exactly | 
|  | half and half so 'fractal' shows 50.00% for each | 
|  | (meaning that it assumes 100% total overhead of 'foo'). | 
|  |  | 
|  | The 'graph' uses absolute overhead value of 'foo' as total so each of | 
|  | 'bar' and 'baz' callchain will have 20.00% of overhead. | 
|  | If 'flat' is used, single column and linear exposure of call chains. | 
|  | 'folded' mean call chains are displayed in a line, separated by semicolons. | 
|  |  | 
|  | call-graph.order:: | 
|  | This option controls print order of callchains. The default is | 
|  | 'callee' which means callee is printed at top and then followed by its | 
|  | caller and so on. The 'caller' prints it in reverse order. | 
|  |  | 
|  | If this option is not set and report.children or top.children is | 
|  | set to true (or the equivalent command line option is given), | 
|  | the default value of this option is changed to 'caller' for the | 
|  | execution of 'perf report' or 'perf top'. Other commands will | 
|  | still default to 'callee'. | 
|  |  | 
|  | call-graph.sort-key:: | 
|  | The callchains are merged if they contain same information. | 
|  | The sort-key option determines a way to compare the callchains. | 
|  | A value of 'sort-key' can be 'function' or 'address'. | 
|  | The default is 'function'. | 
|  |  | 
|  | call-graph.threshold:: | 
|  | When there're many callchains it'd print tons of lines. So perf omits | 
|  | small callchains under a certain overhead (threshold) and this option | 
|  | control the threshold. Default is 0.5 (%). The overhead is calculated | 
|  | by value depends on call-graph.print-type. | 
|  |  | 
|  | call-graph.print-limit:: | 
|  | This is a maximum number of lines of callchain printed for a single | 
|  | histogram entry. Default is 0 which means no limitation. | 
|  |  | 
|  | report.*:: | 
|  | report.sort_order:: | 
|  | Allows changing the default sort order from "comm,dso,symbol" to | 
|  | some other default, for instance "sym,dso" may be more fitting for | 
|  | kernel developers. | 
|  | report.percent-limit:: | 
|  | This one is mostly the same as call-graph.threshold but works for | 
|  | histogram entries. Entries having an overhead lower than this | 
|  | percentage will not be printed. Default is '0'. If percent-limit | 
|  | is '10', only entries which have more than 10% of overhead will be | 
|  | printed. | 
|  |  | 
|  | report.queue-size:: | 
|  | This option sets up the maximum allocation size of the internal | 
|  | event queue for ordering events. Default is 0, meaning no limit. | 
|  |  | 
|  | report.children:: | 
|  | 'Children' means functions called from another function. | 
|  | If this option is true, 'perf report' cumulates callchains of children | 
|  | and show (accumulated) total overhead as well as 'Self' overhead. | 
|  | Please refer to the 'perf report' manual. The default is 'true'. | 
|  |  | 
|  | report.group:: | 
|  | This option is to show event group information together. | 
|  | Example output with this turned on, notice that there is one column | 
|  | per event in the group, ref-cycles and cycles: | 
|  |  | 
|  | # group: {ref-cycles,cycles} | 
|  | # ======== | 
|  | # | 
|  | # Samples: 7K of event 'anon group { ref-cycles, cycles }' | 
|  | # Event count (approx.): 6876107743 | 
|  | # | 
|  | #         Overhead  Command      Shared Object               Symbol | 
|  | # ................  .......  .................  ................... | 
|  | # | 
|  | 99.84%  99.76%  noploop  noploop            [.] main | 
|  | 0.07%   0.00%  noploop  ld-2.15.so         [.] strcmp | 
|  | 0.03%   0.00%  noploop  [kernel.kallsyms]  [k] timerqueue_del | 
|  |  | 
|  | top.*:: | 
|  | top.children:: | 
|  | Same as 'report.children'. So if it is enabled, the output of 'top' | 
|  | command will have 'Children' overhead column as well as 'Self' overhead | 
|  | column by default. | 
|  | The default is 'true'. | 
|  |  | 
|  | man.*:: | 
|  | man.viewer:: | 
|  | This option can assign a tool to view manual pages when 'help' | 
|  | subcommand was invoked. Supported tools are 'man', 'woman' | 
|  | (with emacs client) and 'konqueror'. Default is 'man'. | 
|  |  | 
|  | New man viewer tool can be also added using 'man.<tool>.cmd' | 
|  | or use different path using 'man.<tool>.path' config option. | 
|  |  | 
|  | pager.*:: | 
|  | pager.<subcommand>:: | 
|  | When the subcommand is run on stdio, determine whether it uses | 
|  | pager or not based on this value. Default is 'unspecified'. | 
|  |  | 
|  | kmem.*:: | 
|  | kmem.default:: | 
|  | This option decides which allocator is to be analyzed if neither | 
|  | '--slab' nor '--page' option is used. Default is 'slab'. | 
|  |  | 
|  | record.*:: | 
|  | record.build-id:: | 
|  | This option can be 'cache', 'no-cache' or 'skip'. | 
|  | 'cache' is to post-process data and save/update the binaries into | 
|  | the build-id cache (in ~/.debug). This is the default. | 
|  | But if this option is 'no-cache', it will not update the build-id cache. | 
|  | 'skip' skips post-processing and does not update the cache. | 
|  |  | 
|  | diff.*:: | 
|  | diff.order:: | 
|  | This option sets the number of columns to sort the result. | 
|  | The default is 0, which means sorting by baseline. | 
|  | Setting it to 1 will sort the result by delta (or other | 
|  | compute method selected). | 
|  |  | 
|  | diff.compute:: | 
|  | This options sets the method for computing the diff result. | 
|  | Possible values are 'delta', 'delta-abs', 'ratio' and | 
|  | 'wdiff'.  Default is 'delta'. | 
|  |  | 
|  | SEE ALSO | 
|  | -------- | 
|  | linkperf:perf[1] |