lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Wed, 22 Apr 2015 01:16:29 +0900
From:	Namhyung Kim <namhyung@...nel.org>
To:	Arnaldo Carvalho de Melo <acme@...nel.org>
Cc:	Ingo Molnar <mingo@...nel.org>,
	Peter Zijlstra <a.p.zijlstra@...llo.nl>,
	Jiri Olsa <jolsa@...hat.com>,
	LKML <linux-kernel@...r.kernel.org>,
	David Ahern <dsahern@...il.com>,
	Taeung Song <treeze.taeung@...il.com>
Subject: Re: [PATCH v3] perf tools: Document --children option in more detail

Hi Arnaldo,

On Tue, Apr 21, 2015 at 12:41:33PM -0300, Arnaldo Carvalho de Melo wrote:
> Em Tue, Apr 21, 2015 at 09:28:31PM +0900, Namhyung Kim escreveu:
> > As the --children option changes the output of perf report (and perf
> > top) it sometimes confuses users.  Add more words and examples to help
> > understanding of the option's behavior - and how to disable it ;-).
> > 
> > Reviewed-by: Ingo Molnar <mingo@...nel.org>
> > Cc: Taeung Song <treeze.taeung@...il.com>
> > Signed-off-by: Namhyung Kim <namhyung@...nel.org>
> > ---
> >  tools/perf/Documentation/overhead-calculation.txt | 97 +++++++++++++++++++++++
> >  tools/perf/Documentation/perf-report.txt          |  4 +
> >  tools/perf/Documentation/perf-top.txt             |  3 +-
> >  3 files changed, 103 insertions(+), 1 deletion(-)
> >  create mode 100644 tools/perf/Documentation/overhead-calculation.txt
> > 
> > diff --git a/tools/perf/Documentation/overhead-calculation.txt b/tools/perf/Documentation/overhead-calculation.txt
> > new file mode 100644
> > index 000000000000..d7095f77154c
> > --- /dev/null
> > +++ b/tools/perf/Documentation/overhead-calculation.txt
> 
> I think Ingo suggested that you renamed this file to include the word
> "callchain" in it, no? looking at "overhead-calculation" I feel like I
> first have to open it to figure out what kind of overhead is this,
> perhaps it would be better named:
> 
> 	tools/perf/Documentation/callchain-overhead.txt
> 
> ?

Please see my reply to the Ingo's post.  I think he agreed on this name.

> 
> - Arnaldo
> 
> > @@ -0,0 +1,97 @@
> > +Overhead calculation
> > +--------------------
> > +The overhead can be shown in two columns as 'Children' and 'Self' when
> > +perf collects callchains.  The self overhead is simply calculated by
> > +adding all period values of the entry - usually a function (symbol).
> > +This is the value that perf shows traditionally and sum of all the
> > +self overhead values should be 100%.
> 
> For consistency sake, please use always 'self' instead of it without
> quotes, like you do in the next paragraph for 'children'.

OK.

> 
> > +The 'children' overhead is calculated by adding all period values of
> > +the child functions so that it can show the total overhead of the
> > +higher level functions even if they don't directly execute much.
> > +'Children' here means functions that are called from another (parent)
> > +function.
> > +
> > +It might be confusing that the sum of all the 'children' overhead
> > +values exceeds 100% since each of them is already an accumulation of
> 
> Just like you do in the next line:
> 
> > +'self' overhead of its child functions.  But with this enabled, users
> 
> > +can find which function has the most overhead even if samples are
> > +spread over the children.
> > +
> > +Consider the following example; there’re three functions like below.
> 
> Humm, "there are", no? Else I'm learning something new here...
> 
> Googled, some controversy,
> http://grammar.about.com/od/words/a/EnglishContractions.htm doesn't list
> it as a "common contraction", to name just one of the sites, anyway,
> found it unfamiliar:
> 
> In the kernel sources:
> 
> [acme@zoo linux]$ find . -type f | xargs grep -i "there're" | wc -l
> 15
> [acme@zoo linux]$ find . -type f | xargs grep -i "there are" | wc -l
> 5343
> [acme@zoo linux]$

Will change.

> 
> > +
> > +-----------------------
> > +void foo(void) {
> > +    /* something */
> > +}
> > +
> > +void bar(void) {
> > +    /* do something */
> > +    foo();
> > +}
> > +
> > +int main(void) {
> > +    bar()
> > +    return 0;
> > +}
> > +-----------------------
> > +
> > +In this case 'foo' is a child of 'bar', and 'bar' is an immediate
> > +child of 'main' so 'foo' also is a child of 'main'.  In other words,
> > +'main' is a parent of 'foo' and 'bar', and 'bar' is a parent of 'foo'.
> > +
> > +Suppose all samples are recorded in 'foo' and 'bar' only.  When it's
> > +recorded with callchains the output will be shown something like below
> 
>                                        will show something like

OK

> > +in the usual (self-overhead-only) output of perf report:
> > +
> > +----------------------------------
> > +Overhead  Symbol
> > +........  .....................
> > +  60.00%  foo
> > +          |
> > +          --- foo
> > +              bar
> > +              main
> > +              __libc_start_main
> > +
> > +  40.00%  bar
> > +          |
> > +          --- bar
> > +              main
> > +              __libc_start_main
> > +----------------------------------
> > +
> > +When the --children option is enabled, the (self) overhead of children (in
> > +this case foo and bar) are added to the parent to calculate the
>                           is

Hmm.. shouldn't it be "the 'self' overhead values of child functions are ..."?


> > +children overhead.  In this case the report could be displayed as:
> > +
> > +-------------------------------------------
> > +Children      Self  Symbol
> > +........  ........  ....................
> > + 100.00%     0.00%  __libc_start_main
> > +          |
> > +          --- __libc_start_main
> > +
> > + 100.00%     0.00%  main
> > +          |
> > +          --- main
> > +              __libc_start_main
> > +
> > + 100.00%    40.00%  bar
> > +          |
> > +          --- bar
> > +              main
> > +              __libc_start_main
> > +
> > +  60.00%    60.00%  foo
> > +          |
> > +          --- foo
> > +              bar
> > +              main
> > +              __libc_start_main
> > +-------------------------------------------
> > +
> > +Since v3.16 the children overhead is shown by default and the output
> > +is sorted by the values. Children overhead is disabled by specifying
>               'the values'? Which ones, maybe rephrase as 'its
> values', i.e. the "parent + children total overhead" value?

OK.  I thought 'the values' means the children overhead values as we
mentioned it right before.  Anyway, it'd be better to have clear words
in the manpage.


> > +--no-children option on the command line or by adding 'report.children
> > += false' or 'top.children = false' in the perf config file.
> 
> One can as well use the OPTION_FOO shortening mechanism and instead use:
> 
>      perf report --no-ch
> 
> Which is enough to disambiguate it from "--no-column-widths" and "--no-cpu".

Are you saying that you want to add the short form instead of the full
--no-chlidren name?  I think we need to verbose in the manpage at
least and it might not work in the future if some --chxxx option is
added.

> 
> > diff --git a/tools/perf/Documentation/perf-report.txt b/tools/perf/Documentation/perf-report.txt
> > index 4879cf638824..b7bb298deee3 100644
> > --- a/tools/perf/Documentation/perf-report.txt
> > +++ b/tools/perf/Documentation/perf-report.txt
> > @@ -193,6 +193,7 @@ OPTIONS
> >  	Accumulate callchain of children to parent entry so that then can
> >  	show up in the output.  The output will have a new "Children" column
> >  	and will be sorted on the data.  It requires callchains are recorded.
> > +	See the `overhead calculation' section for more details.
> 
>                 `callchain overhead'

Do you prefer this name to 'overhead calculation'?  For me, it looks
like saying about how much overhead will be added if we enabled
callchains at perf record time or processing them at perf report time.

Thanks,
Namhyung


>  
> >  
> >  --max-stack::
> >  	Set the stack depth limit when parsing the callchain, anything
> > @@ -323,6 +324,9 @@ OPTIONS
> >  --header-only::
> >  	Show only perf.data header (forces --stdio).
> >  
> > +
> > +include::overhead-calculation.txt[]
> 
>   +include::callchain-overhead.txt
>  
> > +
> >  SEE ALSO
> >  --------
> >  linkperf:perf-stat[1], linkperf:perf-annotate[1]
> > diff --git a/tools/perf/Documentation/perf-top.txt b/tools/perf/Documentation/perf-top.txt
> > index 3265b1070518..6e8fea6fd179 100644
> > --- a/tools/perf/Documentation/perf-top.txt
> > +++ b/tools/perf/Documentation/perf-top.txt
> > @@ -168,7 +168,7 @@ Default is to monitor all CPUS.
> >  	Accumulate callchain of children to parent entry so that then can
> >  	show up in the output.  The output will have a new "Children" column
> >  	and will be sorted on the data.  It requires -g/--call-graph option
> > -	enabled.
> > +	enabled.  See the `overhead calculation' section for more details.
> 
> ditto.
> 
> >  
> >  --max-stack::
> >  	Set the stack depth limit when parsing the callchain, anything
> > @@ -234,6 +234,7 @@ INTERACTIVE PROMPTING KEYS
> >  
> >  Pressing any unmapped key displays a menu, and prompts for input.
> >  
> > +include::overhead-calculation.txt[]
> 
> Ditto.
> 
> >  
> >  SEE ALSO
> >  --------
> > -- 
> > 2.3.5
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ