Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1306326 > unrolled thread
| Started by | Taeung Song <treeze.taeung@gmail.com> |
|---|---|
| First post | 2016-01-11 15:40 +0100 |
| Last post | 2016-01-11 15:50 +0100 |
| Articles | 15 — 1 participant |
Back to article view | Back to linux.kernel
[PATCH v14 00/23] perf config: Add functionalities into perf-config and document config info Taeung Song <treeze.taeung@gmail.com> - 2016-01-11 15:40 +0100
[PATCH v14 21/23] perf config: Add 'set' feature Taeung Song <treeze.taeung@gmail.com> - 2016-01-11 15:40 +0100
[PATCH v14 01/23] perf config: Document variables for 'colors' section in man page Taeung Song <treeze.taeung@gmail.com> - 2016-01-11 15:40 +0100
[PATCH v14 04/23] perf config: Document variables for 'annotate' section in man page Taeung Song <treeze.taeung@gmail.com> - 2016-01-11 15:40 +0100
[PATCH v14 23/23] perf config: Add a option 'remove' to perf-config Taeung Song <treeze.taeung@gmail.com> - 2016-01-11 15:40 +0100
[PATCH v14 06/23] perf config: Document 'hist.percentage' variable in man page Taeung Song <treeze.taeung@gmail.com> - 2016-01-11 15:50 +0100
[PATCH v14 14/23] perf config: Document 'record.build-id' variable in man page Taeung Song <treeze.taeung@gmail.com> - 2016-01-11 15:50 +0100
[PATCH v14 10/23] perf config: Document 'top.children' variable in man page Taeung Song <treeze.taeung@gmail.com> - 2016-01-11 15:50 +0100
[PATCH v14 17/23] perf config: Add 'list-all' option to perf-config Taeung Song <treeze.taeung@gmail.com> - 2016-01-11 15:50 +0100
[PATCH v14 11/23] perf config: Document 'man.viewer' variable in man page Taeung Song <treeze.taeung@gmail.com> - 2016-01-11 15:50 +0100
[PATCH v14 08/23] perf config: Document variables for 'call-graph' section in man page Taeung Song <treeze.taeung@gmail.com> - 2016-01-11 15:50 +0100
[PATCH v14 07/23] perf config: Document 'ui.show-headers' variable in man page Taeung Song <treeze.taeung@gmail.com> - 2016-01-11 15:50 +0100
[PATCH v14 12/23] perf config: Document 'pager.<subcommand>' variables in man page Taeung Song <treeze.taeung@gmail.com> - 2016-01-11 15:50 +0100
[PATCH v14 09/23] perf config: Document variables for 'report' section in man page Taeung Song <treeze.taeung@gmail.com> - 2016-01-11 15:50 +0100
[PATCH v14 02/23] perf config: Document variables for 'tui' and 'gtk' sections in man page Taeung Song <treeze.taeung@gmail.com> - 2016-01-11 15:50 +0100
| From | Taeung Song <treeze.taeung@gmail.com> |
|---|---|
| Date | 2016-01-11 15:40 +0100 |
| Subject | [PATCH v14 00/23] perf config: Add functionalities into perf-config and document config info |
| Message-ID | <qPLNv-3Dk-3@gated-at.bofh.it> |
Add options (user, system, list-all, skel, verbose, remove) and
getting and setting features into perf-config subcommand to more useful.
And document perf config informations for each section.
Changes in v14:
- Change default value for report.group config [Namhyung]
- Make a distinction between user and system config file name
in error message when nothing configured
- Bug fix, segmentation fault of '--skel' option
of which reason is that a variable wasn't initialized
- Rename colors.code to colors.jump_arrows among config variables
Changes in v13:
- Add record.build-id config info to perf-config doc [Namhyung]
- Fill missing options info ('verbose', 'skel') on perf-config doc
Changes in v12:
- Modify perf-config documentation for each section to be more proper
and correct small typing errors [Namhyung]
- Add missing config variables that are group, show_linenr and
show_total_period [Namhyung]
Changes in v11:
- Add --skel option to produce an skeleton with the possible config
variables [Arnaldo]
- Add exception handling to --list option when nothing configured [Arnaldo]
- Default action without option is to show an usage message [Arnaldo]
Changes in v10:
- Split perf-config.txt into several patches for each section and replace some
paragraphes with better proper things [Arnaldo, Namhyung]
- Correct wrong default values for each variable [Namhyung]
- Remove the compare name function
Changes in v9:
- Add the compare name functionality treating '-' and '-' as being
the same thing for usability
Changes in v8:
- Correct small typing errors in a perf-config documention
- Split the collecting configs part into a separate patch
- Use new enum and struct for default configs instead of
hard-coded value [Namhyung]
Changes in v7:
- Modify explanations of syntax and options(color, gtk, tui, buildid, annotate)
to be better proper descriptions [Arnaldo]
Changes in v6:
- Split a 'set' feature patch into two patch to separate normalize_value() from it
- Bug fix : 'remove' and 'set' malfunctions when without a specific file-option
(If file-option isn't used, 'remove' feature had to use both user and system
config file and 'set' feature had to only handle user config file.)
Changes in v5:
- Simplify the switch statement in cmd_config()
- Set a config file path with '--system' or '--user'
instead of '--global' or '--system' [Namhyung]
- The patch about 'get' and 'set 'split into two patchs [Namhyung]
Changes in v4:
- If some config value is default value, notice it is '(default)' [Jirka]
- If there wasn't any perfconfig file, perf-config malfunctioned
So add exception routine with '--global' and '--system'
option which can select perf config file path [Jirka]
Changes in v3:
- Add a config variable 'kmem.default' with a default value [Namhyung]
Changes in v2:
- Change option name of listing all configs as '--list-all'
instead of '--all' [Namhyung]
- Correct small infelicities or typing errors in a perf-config documention [Arnaldo]
- Declaration a global variable 'static struct default_configsets' has config
variables with default values instead of using a 'util/PERFCONFIG-DEFAULT' file.
- Add a function to normalize a value and check data type of it.
- Simplify parsing arguments as arguments is just divided by '=' and then
in front of '.' is a section, between '.' and '=' is a name,
and behind '=' is a value.
- If run perf-config command without any option, perf-config work as '--list'.
Taeung Song (23):
perf config: Document variables for 'colors' section in man page
perf config: Document variables for 'tui' and 'gtk' sections in man
page
perf config: Document 'buildid.dir' variable in man page
perf config: Document variables for 'annotate' section in man page
perf config: Document variables for 'help' section in man page
perf config: Document 'hist.percentage' variable in man page
perf config: Document 'ui.show-headers' variable in man page
perf config: Document variables for 'call-graph' section in man page
perf config: Document variables for 'report' section in man page
perf config: Document 'top.children' variable in man page
perf config: Document 'man.viewer' variable in man page
perf config: Document 'pager.<subcommand>' variables in man page
perf config: Document 'kmem.default' variable in man page
perf config: Document 'record.build-id' variable in man page
perf config: Add '--system' and '--user' options to select which
config file is used
perf config: Collect configs to handle config variables
perf config: Add 'list-all' option to perf-config
perf config: Add a option 'skel' to perf-config
perf config: Add --verbose option for showing config description
perf config: Add 'get' functionality
perf config: Add 'set' feature
perf config: normalize a value depending on default type of it
perf config: Add a option 'remove' to perf-config
tools/perf/Documentation/perf-config.txt | 380 +++++++++++++++-
tools/perf/builtin-config.c | 717 ++++++++++++++++++++++++++++++-
tools/perf/util/cache.h | 20 +
tools/perf/util/config.c | 31 +-
4 files changed, 1132 insertions(+), 16 deletions(-)
--
2.5.0
[toc] | [next] | [standalone]
| From | Taeung Song <treeze.taeung@gmail.com> |
|---|---|
| Date | 2016-01-11 15:40 +0100 |
| Subject | [PATCH v14 21/23] perf config: Add 'set' feature |
| Message-ID | <qPLNx-3Dk-41@gated-at.bofh.it> |
| In reply to | #1306326 |
This patch consists of functions
which can set specific config variables.
For the syntax examples,
perf config [<file-option>] [options] [section.name[=value] ...]
set specific config variables
# perf config report.queue-size=100M report.children=true
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Signed-off-by: Taeung Song <treeze.taeung@gmail.com>
---
tools/perf/Documentation/perf-config.txt | 2 +-
tools/perf/builtin-config.c | 122 +++++++++++++++++++++++++------
tools/perf/util/cache.h | 5 +-
tools/perf/util/config.c | 27 ++++++-
4 files changed, 131 insertions(+), 25 deletions(-)
diff --git a/tools/perf/Documentation/perf-config.txt b/tools/perf/Documentation/perf-config.txt
index 14535fc..367a73b 100644
--- a/tools/perf/Documentation/perf-config.txt
+++ b/tools/perf/Documentation/perf-config.txt
@@ -8,7 +8,7 @@ perf-config - Get and set variables in a configuration file.
SYNOPSIS
--------
[verse]
-'perf config' [<file-option>] [section.name ...]
+'perf config' [<file-option>] [section.name[=value] ...]
or
'perf config' [<file-option>] -l | --list
or
diff --git a/tools/perf/builtin-config.c b/tools/perf/builtin-config.c
index a0a6078..51a9e4c 100644
--- a/tools/perf/builtin-config.c
+++ b/tools/perf/builtin-config.c
@@ -16,7 +16,7 @@
static bool use_system_config, use_user_config;
static const char * const config_usage[] = {
- "perf config [<file-option>] [options] [section.name ...]",
+ "perf config [<file-option>] [options] [section.name[=value] ...]",
NULL
};
@@ -397,7 +397,9 @@ static int show_all_config(struct list_head *sections)
}
static int show_spec_config(struct list_head *sections,
- const char *section_name, const char *name)
+ const char *config_file_name __maybe_unused,
+ const char *section_name, const char *name,
+ char *value)
{
int i;
struct config_section *section = NULL;
@@ -416,7 +418,7 @@ static int show_spec_config(struct list_head *sections,
if (!strcmp(config->section, section_name) &&
!strcmp(config->name, name)) {
- char *value = get_value(config);
+ value = get_value(config);
if (verbose)
printf("# %s\n", config->desc);
@@ -430,6 +432,39 @@ static int show_spec_config(struct list_head *sections,
return -1;
}
+static int set_config(struct list_head *sections, const char *config_file_name,
+ const char *section_name, const char *name, char *value)
+{
+ struct config_section *section = NULL;
+ struct config_element *element = NULL;
+
+ find_config(sections, §ion, &element, section_name, name);
+ if (value != NULL) {
+ value = strdup(value);
+ if (!value) {
+ pr_err("%s: strdup failed\n", __func__);
+ return -1;
+ }
+
+ /* if there isn't existent section, add a new section */
+ if (!section) {
+ section = init_section(section_name);
+ if (!section)
+ return -1;
+ list_add_tail(§ion->list, sections);
+ }
+ /* if nothing to replace, add a new element which contains key-value pair. */
+ if (!element) {
+ add_element(§ion->element_head, name, value);
+ } else {
+ free(element->value);
+ element->value = value;
+ }
+ }
+
+ return perf_configset_write_in_full(sections, config_file_name);
+}
+
static int collect_current_config(const char *var, const char *value,
void *spec_sections)
{
@@ -479,8 +514,10 @@ out_err:
return ret;
}
-static int perf_configset_with_option(configset_fn_t fn, struct list_head *sections,
- const char *var)
+static int perf_configset_with_option(configset_fn_t fn,
+ struct list_head *sections,
+ const char *config_file_name,
+ const char *var, char *value)
{
int ret = -1;
char *ptr, *key;
@@ -507,10 +544,24 @@ static int perf_configset_with_option(configset_fn_t fn, struct list_head *secti
}
section_name = strsep(&ptr, ".");
- name = ptr;
- fn(sections, section_name, name);
- ret = 0;
+ name = strsep(&ptr, "=");
+ if (!value) {
+ /* do nothing */
+ } else if (!strcmp(value, "=")) {
+ pr_err("The config variable does not contain a value: %s.%s\n",
+ section_name, name);
+ goto out_err;
+ } else {
+ value++;
+ name = strsep(&name, "=");
+ if (name[0] == '\0') {
+ pr_err("invalid key: %s\n", var);
+ goto out_err;
+ }
+ }
+ fn(sections, config_file_name, section_name, name, value);
+ ret = 0;
out_err:
free(key);
return ret;
@@ -536,7 +587,9 @@ static int show_config(struct list_head *sections)
int cmd_config(int argc, const char **argv, const char *prefix __maybe_unused)
{
int i, ret = 0;
- struct list_head sections;
+ struct list_head *sections;
+ struct list_head all_sections, user_sections, system_sections;
+ const char *system_config = perf_etc_perfconfig();
char *user_config = mkpath("%s/.perfconfig", getenv("HOME"));
set_option_flag(config_options, 'l', "list", PARSE_OPT_EXCLUSIVE);
@@ -552,14 +605,22 @@ int cmd_config(int argc, const char **argv, const char *prefix __maybe_unused)
return -1;
}
- INIT_LIST_HEAD(§ions);
+ INIT_LIST_HEAD(&user_sections);
+ INIT_LIST_HEAD(&system_sections);
+ perf_config_from_file(collect_current_config, user_config, &user_sections);
+ perf_config_from_file(collect_current_config, system_config, &system_sections);
- if (use_system_config)
- config_exclusive_filename = perf_etc_perfconfig();
- else if (use_user_config)
+ if (use_system_config) {
+ sections = &system_sections;
+ config_exclusive_filename = system_config;
+ } else if (use_user_config) {
+ sections = &user_sections;
config_exclusive_filename = user_config;
-
- perf_config(collect_current_config, §ions);
+ } else {
+ sections = &all_sections;
+ INIT_LIST_HEAD(&all_sections);
+ perf_config(collect_current_config, &all_sections);
+ }
switch (actions) {
case ACTION_SKEL:
@@ -570,7 +631,7 @@ int cmd_config(int argc, const char **argv, const char *prefix __maybe_unused)
break;
case ACTION_LIST_ALL:
if (argc == 0) {
- ret = show_all_config(§ions);
+ ret = show_all_config(sections);
break;
}
case ACTION_LIST:
@@ -581,7 +642,7 @@ int cmd_config(int argc, const char **argv, const char *prefix __maybe_unused)
else
parse_options_usage(config_usage, config_options, "l", 1);
} else {
- ret = show_config(§ions);
+ ret = show_config(sections);
if (ret < 0) {
const char * config_filename = config_exclusive_filename;
if (!config_exclusive_filename)
@@ -592,11 +653,28 @@ int cmd_config(int argc, const char **argv, const char *prefix __maybe_unused)
}
break;
default:
- if (argc)
- for (i = 0; argv[i]; i++)
- ret = perf_configset_with_option(show_spec_config, §ions,
- argv[i]);
- else
+ if (argc) {
+ for (i = 0; argv[i]; i++) {
+ char *value = strchr(argv[i], '=');
+
+ if (value == NULL)
+ ret = perf_configset_with_option(show_spec_config,
+ sections, NULL,
+ argv[i], value);
+ else {
+ if (!use_system_config && !use_user_config)
+ ret = perf_configset_with_option(set_config,
+ &user_sections,
+ user_config,
+ argv[i], value);
+ else
+ ret = perf_configset_with_option(set_config,
+ sections,
+ config_exclusive_filename,
+ argv[i], value);
+ }
+ }
+ } else
usage_with_options(config_usage, config_options);
}
diff --git a/tools/perf/util/cache.h b/tools/perf/util/cache.h
index d5dcc85..9614afd 100644
--- a/tools/perf/util/cache.h
+++ b/tools/perf/util/cache.h
@@ -39,9 +39,12 @@ struct config_section {
extern const char *config_exclusive_filename;
typedef int (*config_fn_t)(const char *, const char *, void *);
-typedef int (*configset_fn_t)(struct list_head *, const char *, const char *);
+typedef int (*configset_fn_t)(struct list_head *, const char *,
+ const char *, const char *, char *);
+extern int perf_configset_write_in_full(struct list_head *sections, const char *file_name);
extern int perf_default_config(const char *, const char *, void *);
extern int perf_config(config_fn_t fn, void *);
+extern int perf_config_from_file(config_fn_t fn, const char *filename, void *data);
extern int perf_config_int(const char *, const char *);
extern u64 perf_config_u64(const char *, const char *);
extern int perf_config_bool(const char *, const char *);
diff --git a/tools/perf/util/config.c b/tools/perf/util/config.c
index 4e72763..34eff22 100644
--- a/tools/perf/util/config.c
+++ b/tools/perf/util/config.c
@@ -416,7 +416,7 @@ int perf_default_config(const char *var, const char *value,
return 0;
}
-static int perf_config_from_file(config_fn_t fn, const char *filename, void *data)
+int perf_config_from_file(config_fn_t fn, const char *filename, void *data)
{
int ret;
FILE *f = fopen(filename, "r");
@@ -506,6 +506,31 @@ out:
return ret;
}
+int perf_configset_write_in_full(struct list_head *sections, const char *file_name)
+{
+ struct config_section *section;
+ struct config_element *element;
+ const char *first_line = "# this file is auto-generated.";
+ FILE *fp = fopen(file_name, "w");
+
+ if (!fp)
+ return -1;
+
+ fprintf(fp, "%s\n", first_line);
+ /* overwrite configvariables */
+ list_for_each_entry(section, sections, list) {
+ fprintf(fp, "[%s]\n", section->name);
+ list_for_each_entry(element, §ion->element_head, list) {
+ if (element->value)
+ fprintf(fp, "\t%s = %s\n",
+ element->name, element->value);
+ }
+ }
+ fclose(fp);
+
+ return 0;
+}
+
/*
* Call this to report error for your variable that should not
* get a boolean value (i.e. "[my] var" means "true").
--
2.5.0
[toc] | [prev] | [next] | [standalone]
| From | Taeung Song <treeze.taeung@gmail.com> |
|---|---|
| Date | 2016-01-11 15:40 +0100 |
| Subject | [PATCH v14 01/23] perf config: Document variables for 'colors' section in man page |
| Message-ID | <qPLNx-3Dk-47@gated-at.bofh.it> |
| In reply to | #1306326 |
Explain 'colors' section and its variables. 'top', 'medium', 'normal', 'selected', 'jump_arrows', 'addr' and 'root'. Cc: Namhyung Kim <namhyung@kernel.org> Cc: Jiri Olsa <jolsa@kernel.org> Signed-off-by: Taeung Song <treeze.taeung@gmail.com> --- tools/perf/Documentation/perf-config.txt | 46 ++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/tools/perf/Documentation/perf-config.txt b/tools/perf/Documentation/perf-config.txt index b9ca1e3..e77dcd1 100644 --- a/tools/perf/Documentation/perf-config.txt +++ b/tools/perf/Documentation/perf-config.txt @@ -98,6 +98,52 @@ Given a $HOME/.perfconfig like this: order = caller sort-key = function +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'. + SEE ALSO -------- linkperf:perf[1] -- 2.5.0
[toc] | [prev] | [next] | [standalone]
| From | Taeung Song <treeze.taeung@gmail.com> |
|---|---|
| Date | 2016-01-11 15:40 +0100 |
| Subject | [PATCH v14 04/23] perf config: Document variables for 'annotate' section in man page |
| Message-ID | <qPLNx-3Dk-49@gated-at.bofh.it> |
| In reply to | #1306326 |
Explain 'annotate' section and its variables.
'hide_src_code', 'use_offset', 'jump_arrows',
'show_linenr', 'show_nr_jump' and 'show_total_period'.
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Signed-off-by: Taeung Song <treeze.taeung@gmail.com>
---
tools/perf/Documentation/perf-config.txt | 110 +++++++++++++++++++++++++++++++
1 file changed, 110 insertions(+)
diff --git a/tools/perf/Documentation/perf-config.txt b/tools/perf/Documentation/perf-config.txt
index 8835215..85b811f 100644
--- a/tools/perf/Documentation/perf-config.txt
+++ b/tools/perf/Documentation/perf-config.txt
@@ -168,6 +168,116 @@ buildid.*::
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
+
SEE ALSO
--------
linkperf:perf[1]
--
2.5.0
[toc] | [prev] | [next] | [standalone]
| From | Taeung Song <treeze.taeung@gmail.com> |
|---|---|
| Date | 2016-01-11 15:40 +0100 |
| Subject | [PATCH v14 23/23] perf config: Add a option 'remove' to perf-config |
| Message-ID | <qPLNx-3Dk-51@gated-at.bofh.it> |
| In reply to | #1306326 |
A option 'remove' is to remove specific config variables.
For the syntax examples,
# perf config [<file-option>] -r | --remove [section.name ...]
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Signed-off-by: Taeung Song <treeze.taeung@gmail.com>
---
tools/perf/Documentation/perf-config.txt | 6 ++++++
tools/perf/builtin-config.c | 37 ++++++++++++++++++++++++++++++--
2 files changed, 41 insertions(+), 2 deletions(-)
diff --git a/tools/perf/Documentation/perf-config.txt b/tools/perf/Documentation/perf-config.txt
index 367a73b..98314c2 100644
--- a/tools/perf/Documentation/perf-config.txt
+++ b/tools/perf/Documentation/perf-config.txt
@@ -15,6 +15,8 @@ or
'perf config' [<file-option>] -a | --list-all
or
'perf config' [<file-option>] -k | --skel
+or
+'perf config' [<file-option>] -r | --remove [section.name ...]
DESCRIPTION
-----------
@@ -47,6 +49,10 @@ OPTIONS
--verbose::
Be more verbose. (show config description)
+-r::
+--remove::
+ Remove specific config variables.
+
CONFIGURATION FILE
------------------
diff --git a/tools/perf/builtin-config.c b/tools/perf/builtin-config.c
index 0e736f5..7dc6930 100644
--- a/tools/perf/builtin-config.c
+++ b/tools/perf/builtin-config.c
@@ -23,7 +23,8 @@ static const char * const config_usage[] = {
enum actions {
ACTION_LIST = 1,
ACTION_LIST_ALL,
- ACTION_SKEL
+ ACTION_SKEL,
+ ACTION_REMOVE
} actions;
static struct option config_options[] = {
@@ -35,6 +36,8 @@ static struct option config_options[] = {
OPT_SET_UINT('k', "skel", &actions,
"produce an skeleton with the possible"
" config variables", ACTION_SKEL),
+ OPT_SET_UINT('r', "remove", &actions,
+ "remove specific variables: [section.name ...]", ACTION_REMOVE),
OPT_INCR('v', "verbose", &verbose, "Be more verbose"
" (show config description)"),
OPT_BOOLEAN(0, "system", &use_system_config, "use system config file"),
@@ -487,7 +490,13 @@ static int set_config(struct list_head *sections, const char *config_file_name,
struct config_element *element = NULL;
find_config(sections, §ion, &element, section_name, name);
- if (value != NULL) {
+ if (!value) {
+ /* value == NULL means remove the variable */
+ if (section && element) {
+ free(element->value);
+ element->value = NULL;
+ }
+ } else {
value = normalize_value(section_name, name, value);
/* if there isn't existent section, add a new section */
@@ -638,6 +647,7 @@ int cmd_config(int argc, const char **argv, const char *prefix __maybe_unused)
set_option_flag(config_options, 'l', "list", PARSE_OPT_EXCLUSIVE);
set_option_flag(config_options, 'a', "list-all", PARSE_OPT_EXCLUSIVE);
+ set_option_flag(config_options, 'r', "remove", PARSE_OPT_EXCLUSIVE);
argc = parse_options(argc, argv, config_options, config_usage,
PARSE_OPT_STOP_AT_NON_OPTION);
@@ -667,6 +677,29 @@ int cmd_config(int argc, const char **argv, const char *prefix __maybe_unused)
}
switch (actions) {
+ case ACTION_REMOVE:
+ if (argc) {
+ for (i = 0; argv[i]; i++) {
+ if (!use_system_config && !use_user_config) {
+ ret = perf_configset_with_option(set_config,
+ &system_sections,
+ system_config,
+ argv[i], NULL);
+ ret = perf_configset_with_option(set_config,
+ &user_sections,
+ user_config,
+ argv[i], NULL);
+ } else
+ ret = perf_configset_with_option(set_config, sections,
+ config_exclusive_filename,
+ argv[i], NULL);
+ }
+ } else {
+ pr_err("Error: Missing arguments\n");
+ parse_options_usage(config_usage, config_options, "r", 1);
+ return -1;
+ }
+ break;
case ACTION_SKEL:
if (argc)
parse_options_usage(config_usage, config_options, "k", 1);
--
2.5.0
[toc] | [prev] | [next] | [standalone]
| From | Taeung Song <treeze.taeung@gmail.com> |
|---|---|
| Date | 2016-01-11 15:50 +0100 |
| Subject | [PATCH v14 06/23] perf config: Document 'hist.percentage' variable in man page |
| Message-ID | <qPLXb-3He-1@gated-at.bofh.it> |
| In reply to | #1306326 |
Explain 'hist.percentage' variable. Cc: Namhyung Kim <namhyung@kernel.org> Cc: Jiri Olsa <jolsa@kernel.org> Signed-off-by: Taeung Song <treeze.taeung@gmail.com> --- tools/perf/Documentation/perf-config.txt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tools/perf/Documentation/perf-config.txt b/tools/perf/Documentation/perf-config.txt index aaf1791..b9892e5 100644 --- a/tools/perf/Documentation/perf-config.txt +++ b/tools/perf/Documentation/perf-config.txt @@ -282,6 +282,23 @@ help.*:: help.format:: A format of manual page can be 'man' that is default. +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%). + SEE ALSO -------- linkperf:perf[1] -- 2.5.0
[toc] | [prev] | [next] | [standalone]
| From | Taeung Song <treeze.taeung@gmail.com> |
|---|---|
| Date | 2016-01-11 15:50 +0100 |
| Subject | [PATCH v14 14/23] perf config: Document 'record.build-id' variable in man page |
| Message-ID | <qPLXc-3He-5@gated-at.bofh.it> |
| In reply to | #1306326 |
Explain 'record.build-id' variable. Cc: Namhyung Kim <namhyung@kernel.org> Cc: Jiri Olsa <jolsa@kernel.org> Signed-off-by: Taeung Song <treeze.taeung@gmail.com> --- tools/perf/Documentation/perf-config.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tools/perf/Documentation/perf-config.txt b/tools/perf/Documentation/perf-config.txt index 060f160..7056c3f 100644 --- a/tools/perf/Documentation/perf-config.txt +++ b/tools/perf/Documentation/perf-config.txt @@ -432,6 +432,14 @@ kmem.*:: 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', not update the build-id cache. + 'skip' mean that skip post-processing and do not update the cache. + SEE ALSO -------- linkperf:perf[1] -- 2.5.0
[toc] | [prev] | [next] | [standalone]
| From | Taeung Song <treeze.taeung@gmail.com> |
|---|---|
| Date | 2016-01-11 15:50 +0100 |
| Subject | [PATCH v14 10/23] perf config: Document 'top.children' variable in man page |
| Message-ID | <qPLXc-3He-7@gated-at.bofh.it> |
| In reply to | #1306326 |
Explain 'top.children' variable. Cc: Namhyung Kim <namhyung@kernel.org> Cc: Jiri Olsa <jolsa@kernel.org> Signed-off-by: Taeung Song <treeze.taeung@gmail.com> --- tools/perf/Documentation/perf-config.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tools/perf/Documentation/perf-config.txt b/tools/perf/Documentation/perf-config.txt index ef4d68f..882f591 100644 --- a/tools/perf/Documentation/perf-config.txt +++ b/tools/perf/Documentation/perf-config.txt @@ -406,6 +406,13 @@ report.*:: 0.07% 0.00% noploop ld-2.15.so [.] strcmp 0.03% 0.00% noploop [kernel.kallsyms] [k] timerqueue_del +top.*:: + top.children:: + This option means same as report.children. So if it is true, + the output of 'top' command will have 'Children' overhead column + as well as 'Self' overhead column by default. + The default is true. + SEE ALSO -------- linkperf:perf[1] -- 2.5.0
[toc] | [prev] | [next] | [standalone]
| From | Taeung Song <treeze.taeung@gmail.com> |
|---|---|
| Date | 2016-01-11 15:50 +0100 |
| Subject | [PATCH v14 17/23] perf config: Add 'list-all' option to perf-config |
| Message-ID | <qPLXc-3He-9@gated-at.bofh.it> |
| In reply to | #1306326 |
'list-all' option is to display both current config variables
and all possible config variables with default values.
The syntax examples are like below
perf config [<file-option>] [options]
display all perf config with default values.
# perf config -a | --list-all
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Signed-off-by: Taeung Song <treeze.taeung@gmail.com>
---
tools/perf/Documentation/perf-config.txt | 6 +
tools/perf/builtin-config.c | 228 ++++++++++++++++++++++++++++++-
2 files changed, 232 insertions(+), 2 deletions(-)
diff --git a/tools/perf/Documentation/perf-config.txt b/tools/perf/Documentation/perf-config.txt
index 697ecff..dfb0d44 100644
--- a/tools/perf/Documentation/perf-config.txt
+++ b/tools/perf/Documentation/perf-config.txt
@@ -9,6 +9,8 @@ SYNOPSIS
--------
[verse]
'perf config' [<file-option>] -l | --list
+or
+'perf config' [<file-option>] -a | --list-all
DESCRIPTION
-----------
@@ -29,6 +31,10 @@ OPTIONS
For writing and reading options: write to system-wide
'$(sysconfdir)/perfconfig' or read it.
+-a::
+--list-all::
+ Show current and all possible config variables with default values.
+
CONFIGURATION FILE
------------------
diff --git a/tools/perf/builtin-config.c b/tools/perf/builtin-config.c
index c43234e..96f53dc 100644
--- a/tools/perf/builtin-config.c
+++ b/tools/perf/builtin-config.c
@@ -21,17 +21,160 @@ static const char * const config_usage[] = {
};
enum actions {
- ACTION_LIST = 1
+ ACTION_LIST = 1,
+ ACTION_LIST_ALL
} actions;
static struct option config_options[] = {
OPT_SET_UINT('l', "list", &actions,
"show current config variables", ACTION_LIST),
+ OPT_SET_UINT('a', "list-all", &actions,
+ "show current and all possible config"
+ " variables with default values", ACTION_LIST_ALL),
OPT_BOOLEAN(0, "system", &use_system_config, "use system config file"),
OPT_BOOLEAN(0, "user", &use_user_config, "use user config file"),
OPT_END()
};
+enum config_idx {
+ CONFIG_COLORS_TOP,
+ CONFIG_COLORS_MEDIUM,
+ CONFIG_COLORS_NORMAL,
+ CONFIG_COLORS_SELECTED,
+ CONFIG_COLORS_JUMP_ARROWS,
+ CONFIG_COLORS_ADDR,
+ CONFIG_COLORS_ROOT,
+ CONFIG_TUI_REPORT,
+ CONFIG_TUI_ANNOTATE,
+ CONFIG_TUI_TOP,
+ CONFIG_BUILDID_DIR,
+ CONFIG_ANNOTATE_HIDE_SRC_CODE,
+ CONFIG_ANNOTATE_USE_OFFSET,
+ CONFIG_ANNOTATE_JUMP_ARROWS,
+ CONFIG_ANNOTATE_SHOW_NR_JUMPS,
+ CONFIG_ANNOTATE_SHOW_LINENR,
+ CONFIG_ANNOTATE_SHOW_TOTAL_PERIOD,
+ CONFIG_GTK_ANNOTATE,
+ CONFIG_GTK_REPORT,
+ CONFIG_GTK_TOP,
+ CONFIG_PAGER_CMD,
+ CONFIG_PAGER_REPORT,
+ CONFIG_PAGER_ANNOTATE,
+ CONFIG_PAGER_TOP,
+ CONFIG_PAGER_DIFF,
+ CONFIG_HELP_FORMAT,
+ CONFIG_HELP_AUTOCORRECT,
+ CONFIG_HIST_PERCENTAGE,
+ CONFIG_UI_SHOW_HEADERS,
+ CONFIG_CALL_GRAPH_RECORD_MODE,
+ CONFIG_CALL_GRAPH_DUMP_SIZE,
+ CONFIG_CALL_GRAPH_PRINT_TYPE,
+ CONFIG_CALL_GRAPH_ORDER,
+ CONFIG_CALL_GRAPH_SORT_KEY,
+ CONFIG_CALL_GRAPH_THRESHOLD,
+ CONFIG_CALL_GRAPH_PRINT_LIMIT,
+ CONFIG_REPORT_GROUP,
+ CONFIG_REPORT_CHILDREN,
+ CONFIG_REPORT_PERCENT_LIMIT,
+ CONFIG_REPORT_QUEUE_SIZE,
+ CONFIG_TOP_CHILDREN,
+ CONFIG_MAN_VIEWER,
+ CONFIG_KMEM_DEFAULT,
+};
+
+enum config_type {
+ CONFIG_TYPE_BOOL,
+ CONFIG_TYPE_INT,
+ CONFIG_TYPE_LONG,
+ CONFIG_TYPE_U64,
+ CONFIG_TYPE_FLOAT,
+ CONFIG_TYPE_DOUBLE,
+ CONFIG_TYPE_STRING,
+ /* special type */
+ CONFIG_END
+};
+
+struct config_item {
+ const char *section;
+ const char *name;
+ union {
+ bool b;
+ int i;
+ u32 l;
+ u64 ll;
+ float f;
+ double d;
+ const char *s;
+ } value;
+ enum config_type type;
+};
+
+#define CONF_VAR(_sec, _name, _field, _val, _type) \
+ { .section = _sec, .name = _name, .value._field = _val, .type = _type }
+
+#define CONF_BOOL_VAR(_idx, _sec, _name, _val) \
+ [CONFIG_##_idx] = CONF_VAR(_sec, _name, b, _val, CONFIG_TYPE_BOOL)
+#define CONF_INT_VAR(_idx, _sec, _name, _val) \
+ [CONFIG_##_idx] = CONF_VAR(_sec, _name, i, _val, CONFIG_TYPE_INT)
+#define CONF_LONG_VAR(_idx, _sec, _name, _val) \
+ [CONFIG_##_idx] = CONF_VAR(_sec, _name, l, _val, CONFIG_TYPE_LONG)
+#define CONF_U64_VAR(_idx, _sec, _name, _val) \
+ [CONFIG_##_idx] = CONF_VAR(_sec, _name, ll, _val, CONFIG_TYPE_U64)
+#define CONF_FLOAT_VAR(_idx, _sec, _name, _val) \
+ [CONFIG_##_idx] = CONF_VAR(_sec, _name, f, _val, CONFIG_TYPE_FLOAT)
+#define CONF_DOUBLE_VAR(_idx, _sec, _name, _val) \
+ [CONFIG_##_idx] = CONF_VAR(_sec, _name, d, _val, CONFIG_TYPE_DOUBLE)
+#define CONF_STR_VAR(_idx, _sec, _name, _val) \
+ [CONFIG_##_idx] = CONF_VAR(_sec, _name, s, _val, CONFIG_TYPE_STRING)
+#define CONF_END() { .type = CONFIG_END }
+
+struct config_item default_configs[] = {
+ CONF_STR_VAR(COLORS_TOP, "colors", "top", "red, default"),
+ CONF_STR_VAR(COLORS_MEDIUM, "colors", "medium", "green, default"),
+ CONF_STR_VAR(COLORS_NORMAL, "colors", "normal", "lightgray, default"),
+ CONF_STR_VAR(COLORS_SELECTED, "colors", "selected", "white, lightgray"),
+ CONF_STR_VAR(COLORS_JUMP_ARROWS, "colors", "jump_arrows", "blue, default"),
+ CONF_STR_VAR(COLORS_ADDR, "colors", "addr", "magenta, default"),
+ CONF_STR_VAR(COLORS_ROOT, "colors", "root", "white, blue"),
+ CONF_BOOL_VAR(TUI_REPORT, "tui", "report", true),
+ CONF_BOOL_VAR(TUI_ANNOTATE, "tui", "annotate", true),
+ CONF_BOOL_VAR(TUI_TOP, "tui", "top", true),
+ CONF_STR_VAR(BUILDID_DIR, "buildid", "dir", "~/.debug"),
+ CONF_BOOL_VAR(ANNOTATE_HIDE_SRC_CODE, "annotate", "hide_src_code", false),
+ CONF_BOOL_VAR(ANNOTATE_USE_OFFSET, "annotate", "use_offset", true),
+ CONF_BOOL_VAR(ANNOTATE_JUMP_ARROWS, "annotate", "jump_arrows", true),
+ CONF_BOOL_VAR(ANNOTATE_SHOW_NR_JUMPS, "annotate", "show_nr_jumps", false),
+ CONF_BOOL_VAR(ANNOTATE_SHOW_LINENR, "annotate", "show_linenr", false),
+ CONF_BOOL_VAR(ANNOTATE_SHOW_TOTAL_PERIOD, "annotate", "show_total_period", false),
+ CONF_BOOL_VAR(GTK_ANNOTATE, "gtk", "annotate", false),
+ CONF_BOOL_VAR(GTK_REPORT, "gtk", "report", false),
+ CONF_BOOL_VAR(GTK_TOP, "gtk", "top", false),
+ CONF_BOOL_VAR(PAGER_CMD, "pager", "cmd", true),
+ CONF_BOOL_VAR(PAGER_REPORT, "pager", "report", true),
+ CONF_BOOL_VAR(PAGER_ANNOTATE, "pager", "annotate", true),
+ CONF_BOOL_VAR(PAGER_TOP, "pager", "top", true),
+ CONF_BOOL_VAR(PAGER_DIFF, "pager", "diff", true),
+ CONF_STR_VAR(HELP_FORMAT, "help", "format", "man"),
+ CONF_INT_VAR(HELP_AUTOCORRECT, "help", "autocorrect", 0),
+ CONF_STR_VAR(HIST_PERCENTAGE, "hist", "percentage", "absolute"),
+ CONF_BOOL_VAR(UI_SHOW_HEADERS, "ui", "show-headers", true),
+ CONF_STR_VAR(CALL_GRAPH_RECORD_MODE, "call-graph", "record-mode", "fp"),
+ CONF_LONG_VAR(CALL_GRAPH_DUMP_SIZE, "call-graph", "dump-size", 8192),
+ CONF_STR_VAR(CALL_GRAPH_PRINT_TYPE, "call-graph", "print-type", "graph"),
+ CONF_STR_VAR(CALL_GRAPH_ORDER, "call-graph", "order", "callee"),
+ CONF_STR_VAR(CALL_GRAPH_SORT_KEY, "call-graph", "sort-key", "function"),
+ CONF_DOUBLE_VAR(CALL_GRAPH_THRESHOLD, "call-graph", "threshold", 0.5),
+ CONF_LONG_VAR(CALL_GRAPH_PRINT_LIMIT, "call-graph", "print-limit", 0),
+ CONF_BOOL_VAR(REPORT_GROUP, "report", "group", true),
+ CONF_BOOL_VAR(REPORT_CHILDREN, "report", "children", true),
+ CONF_FLOAT_VAR(REPORT_PERCENT_LIMIT, "report", "percent-limit", 0),
+ CONF_U64_VAR(REPORT_QUEUE_SIZE, "report", "queue-size", 0),
+ CONF_BOOL_VAR(TOP_CHILDREN, "top", "children", true),
+ CONF_STR_VAR(MAN_VIEWER, "man", "viewer", "man"),
+ CONF_STR_VAR(KMEM_DEFAULT, "kmem", "default", "slab"),
+ CONF_END()
+};
+
static struct config_section *find_section(struct list_head *sections,
const char *section_name)
{
@@ -112,6 +255,75 @@ static int add_element(struct list_head *head,
return 0;
}
+static char *get_value(struct config_item *config)
+{
+ int ret = 0;
+ char *value;
+
+ if (config->type == CONFIG_TYPE_BOOL)
+ ret = asprintf(&value, "%s",
+ config->value.b ? "true" : "false");
+ else if (config->type == CONFIG_TYPE_INT)
+ ret = asprintf(&value, "%d", config->value.i);
+ else if (config->type == CONFIG_TYPE_LONG)
+ ret = asprintf(&value, "%u", config->value.l);
+ else if (config->type == CONFIG_TYPE_U64)
+ ret = asprintf(&value, "%"PRId64, config->value.ll);
+ else if (config->type == CONFIG_TYPE_FLOAT)
+ ret = asprintf(&value, "%f", config->value.f);
+ else if (config->type == CONFIG_TYPE_DOUBLE)
+ ret = asprintf(&value, "%f", config->value.d);
+ else
+ ret = asprintf(&value, "%s", config->value.s);
+
+ if (ret < 0)
+ return NULL;
+
+ return value;
+}
+
+static int show_all_config(struct list_head *sections)
+{
+ int i;
+ bool has_config;
+ struct config_section *section;
+ struct config_element *element;
+
+ for (i = 0; default_configs[i].type != CONFIG_END; i++) {
+ struct config_item *config = &default_configs[i];
+ find_config(sections, §ion, &element,
+ config->section, config->name);
+
+ if (!element) {
+ char *value = get_value(config);
+
+ printf("%s.%s=%s\n", config->section, config->name, value);
+ free(value);
+ } else
+ printf("%s.%s=%s\n", section->name,
+ element->name, element->value);
+ }
+
+ /* Print config variables the default configsets haven't */
+ list_for_each_entry(section, sections, list) {
+ list_for_each_entry(element, §ion->element_head, list) {
+ has_config = false;
+ for (i = 0; default_configs[i].type != CONFIG_END; i++) {
+ if (!strcmp(default_configs[i].section, section->name) &&
+ !strcmp(default_configs[i].name, element->name)) {
+ has_config = true;
+ break;
+ }
+ }
+ if (!has_config)
+ printf("%s.%s=%s\n", section->name,
+ element->name, element->value);
+ }
+ }
+
+ return 0;
+}
+
static int collect_current_config(const char *var, const char *value,
void *spec_sections)
{
@@ -184,6 +396,9 @@ int cmd_config(int argc, const char **argv, const char *prefix __maybe_unused)
struct list_head sections;
char *user_config = mkpath("%s/.perfconfig", getenv("HOME"));
+ set_option_flag(config_options, 'l', "list", PARSE_OPT_EXCLUSIVE);
+ set_option_flag(config_options, 'a', "list-all", PARSE_OPT_EXCLUSIVE);
+
argc = parse_options(argc, argv, config_options, config_usage,
PARSE_OPT_STOP_AT_NON_OPTION);
@@ -204,10 +419,19 @@ int cmd_config(int argc, const char **argv, const char *prefix __maybe_unused)
perf_config(collect_current_config, §ions);
switch (actions) {
+ case ACTION_LIST_ALL:
+ if (argc == 0) {
+ ret = show_all_config(§ions);
+ break;
+ }
+ /* fall through */
case ACTION_LIST:
if (argc) {
pr_err("Error: takes no arguments\n");
- parse_options_usage(config_usage, config_options, "l", 1);
+ if (actions == ACTION_LIST_ALL)
+ parse_options_usage(config_usage, config_options, "a", 1);
+ else
+ parse_options_usage(config_usage, config_options, "l", 1);
} else {
ret = show_config(§ions);
if (ret < 0) {
--
2.5.0
[toc] | [prev] | [next] | [standalone]
| From | Taeung Song <treeze.taeung@gmail.com> |
|---|---|
| Date | 2016-01-11 15:50 +0100 |
| Subject | [PATCH v14 11/23] perf config: Document 'man.viewer' variable in man page |
| Message-ID | <qPLXc-3He-11@gated-at.bofh.it> |
| In reply to | #1306326 |
Explain 'man.viewer' variable and how to add new man viewer tools. Cc: Namhyung Kim <namhyung@kernel.org> Cc: Jiri Olsa <jolsa@kernel.org> Signed-off-by: Taeung Song <treeze.taeung@gmail.com> --- tools/perf/Documentation/perf-config.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tools/perf/Documentation/perf-config.txt b/tools/perf/Documentation/perf-config.txt index 882f591..b7172b2 100644 --- a/tools/perf/Documentation/perf-config.txt +++ b/tools/perf/Documentation/perf-config.txt @@ -413,6 +413,15 @@ top.*:: 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. + SEE ALSO -------- linkperf:perf[1] -- 2.5.0
[toc] | [prev] | [next] | [standalone]
| From | Taeung Song <treeze.taeung@gmail.com> |
|---|---|
| Date | 2016-01-11 15:50 +0100 |
| Subject | [PATCH v14 08/23] perf config: Document variables for 'call-graph' section in man page |
| Message-ID | <qPLXc-3He-13@gated-at.bofh.it> |
| In reply to | #1306326 |
Explain 'call-graph' section and its variables. 'record-mode', 'dump-size', 'print-type', 'order', 'sort-key', 'threshold' and 'print-limit'. Cc: Namhyung Kim <namhyung@kernel.org> Cc: Jiri Olsa <jolsa@kernel.org> Signed-off-by: Taeung Song <treeze.taeung@gmail.com> --- tools/perf/Documentation/perf-config.txt | 67 ++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/tools/perf/Documentation/perf-config.txt b/tools/perf/Documentation/perf-config.txt index fe50bd1..2f965e0 100644 --- a/tools/perf/Documentation/perf-config.txt +++ b/tools/perf/Documentation/perf-config.txt @@ -305,6 +305,73 @@ ui.*:: 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. + SEE ALSO -------- linkperf:perf[1] -- 2.5.0
[toc] | [prev] | [next] | [standalone]
| From | Taeung Song <treeze.taeung@gmail.com> |
|---|---|
| Date | 2016-01-11 15:50 +0100 |
| Subject | [PATCH v14 07/23] perf config: Document 'ui.show-headers' variable in man page |
| Message-ID | <qPLXc-3He-25@gated-at.bofh.it> |
| In reply to | #1306326 |
Explain 'ui.show-headers' variable. Cc: Namhyung Kim <namhyung@kernel.org> Cc: Jiri Olsa <jolsa@kernel.org> Signed-off-by: Taeung Song <treeze.taeung@gmail.com> --- tools/perf/Documentation/perf-config.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tools/perf/Documentation/perf-config.txt b/tools/perf/Documentation/perf-config.txt index b9892e5..fe50bd1 100644 --- a/tools/perf/Documentation/perf-config.txt +++ b/tools/perf/Documentation/perf-config.txt @@ -299,6 +299,12 @@ hist.*:: 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. + SEE ALSO -------- linkperf:perf[1] -- 2.5.0
[toc] | [prev] | [next] | [standalone]
| From | Taeung Song <treeze.taeung@gmail.com> |
|---|---|
| Date | 2016-01-11 15:50 +0100 |
| Subject | [PATCH v14 12/23] perf config: Document 'pager.<subcommand>' variables in man page |
| Message-ID | <qPLXc-3He-29@gated-at.bofh.it> |
| In reply to | #1306326 |
Explain 'pager.<subcommand>' variables. Cc: Namhyung Kim <namhyung@kernel.org> Cc: Jiri Olsa <jolsa@kernel.org> Signed-off-by: Taeung Song <treeze.taeung@gmail.com> --- tools/perf/Documentation/perf-config.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tools/perf/Documentation/perf-config.txt b/tools/perf/Documentation/perf-config.txt index b7172b2..e7754f9 100644 --- a/tools/perf/Documentation/perf-config.txt +++ b/tools/perf/Documentation/perf-config.txt @@ -422,6 +422,11 @@ 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'. + SEE ALSO -------- linkperf:perf[1] -- 2.5.0
[toc] | [prev] | [next] | [standalone]
| From | Taeung Song <treeze.taeung@gmail.com> |
|---|---|
| Date | 2016-01-11 15:50 +0100 |
| Subject | [PATCH v14 09/23] perf config: Document variables for 'report' section in man page |
| Message-ID | <qPLXd-3He-31@gated-at.bofh.it> |
| In reply to | #1306326 |
Explain 'report' section's variables.
'percent-limit', 'queue-size' and 'children'.
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Signed-off-by: Taeung Song <treeze.taeung@gmail.com>
---
tools/perf/Documentation/perf-config.txt | 34 ++++++++++++++++++++++++++++++++
1 file changed, 34 insertions(+)
diff --git a/tools/perf/Documentation/perf-config.txt b/tools/perf/Documentation/perf-config.txt
index 2f965e0..ef4d68f 100644
--- a/tools/perf/Documentation/perf-config.txt
+++ b/tools/perf/Documentation/perf-config.txt
@@ -372,6 +372,40 @@ call-graph.*::
This is a maximum number of lines of callchain printed for a single
histogram entry. Default is 0 which means no limitation.
+report.*::
+ report.percent-limit::
+ This one is mostly same as call-graph.threshold but works for
+ histogram entries. Entries have overhead lower than this percentage
+ will not be printed. Default is 0. If percent-limit is 10,
+ entries which have more than 10% of overhead will be printed only.
+
+ report.queue-size::
+ This option is to setup the maximum allocation size of internal
+ event queue for ordering events. Default is 0, meaning no limit.
+
+ report.children::
+ The children means that 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.
+ If it is 'true', event group view can be enabled by default i.e.
+
+ # 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
+
SEE ALSO
--------
linkperf:perf[1]
--
2.5.0
[toc] | [prev] | [next] | [standalone]
| From | Taeung Song <treeze.taeung@gmail.com> |
|---|---|
| Date | 2016-01-11 15:50 +0100 |
| Subject | [PATCH v14 02/23] perf config: Document variables for 'tui' and 'gtk' sections in man page |
| Message-ID | <qPLXd-3He-49@gated-at.bofh.it> |
| In reply to | #1306326 |
Explain 'tui' and 'gtk' sections and these variables. 'top', 'report' and 'annotate' Cc: Namhyung Kim <namhyung@kernel.org> Cc: Jiri Olsa <jolsa@kernel.org> Signed-off-by: Taeung Song <treeze.taeung@gmail.com> --- tools/perf/Documentation/perf-config.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tools/perf/Documentation/perf-config.txt b/tools/perf/Documentation/perf-config.txt index e77dcd1..9d752ca 100644 --- a/tools/perf/Documentation/perf-config.txt +++ b/tools/perf/Documentation/perf-config.txt @@ -144,6 +144,15 @@ colors.*:: Colors for headers in the output of a sub-commands (top, report). Default values are 'white', 'blue'. +tui.*, gtk.*:: + Available subcommands are 'top', 'report' and 'annotate'. + These values are a boolean type, for example: + + top = true + + By setting value, TUI or GTK can be enabled or not. But it is needed + that perf detects the required library for them during build. + SEE ALSO -------- linkperf:perf[1] -- 2.5.0
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web