Re: [PATCH] perf report: calculate the average cycles of iterations

2017-08-30 Thread Arnaldo Carvalho de Melo
Em Wed, Aug 30, 2017 at 04:41:13PM +0800, Jin, Yao escreveu:
> Hi Arnaldo,
> 
> Andi has reviewed this patch yet.
> 
> https://patchwork.kernel.org/patch/9884399/
> 
> Is this patch OK for merging or any other comments?

Thanks, applied together with Andi's reviewed-by tag,

- Arnaldo
 
> Thanks
> 
> Jin Yao
> 
> On 8/15/2017 11:19 AM, Andi Kleen wrote:
> > On Mon, Aug 14, 2017 at 01:30:29AM +, Jin, Yao wrote:
> > > Hi Andi,
> > > 
> > > Do you have any comments for this patch?
> > Patch looks good to me.
> > 
> > Reviewed-by: Andi Kleen 
> > 
> > -Andi


Re: [PATCH] perf report: calculate the average cycles of iterations

2017-08-30 Thread Jin, Yao

Hi Arnaldo,

Andi has reviewed this patch yet.

https://patchwork.kernel.org/patch/9884399/

Is this patch OK for merging or any other comments?

Thanks

Jin Yao

On 8/15/2017 11:19 AM, Andi Kleen wrote:

On Mon, Aug 14, 2017 at 01:30:29AM +, Jin, Yao wrote:

Hi Andi,

Do you have any comments for this patch?

Patch looks good to me.

Reviewed-by: Andi Kleen 

-Andi




Re: [PATCH] perf report: calculate the average cycles of iterations

2017-08-14 Thread Andi Kleen
On Mon, Aug 14, 2017 at 01:30:29AM +, Jin, Yao wrote:
> Hi Andi, 
> 
> Do you have any comments for this patch?

Patch looks good to me. 

Reviewed-by: Andi Kleen 

-Andi


RE: [PATCH] perf report: calculate the average cycles of iterations

2017-08-13 Thread Jin, Yao
Hi Andi, 

Do you have any comments for this patch?

Thanks
Jin Yao

-Original Message-
From: Jin Yao [mailto:yao@linux.intel.com] 
Sent: Monday, August 7, 2017 9:05 PM
To: a...@kernel.org; jo...@kernel.org; pet...@infradead.org; mi...@redhat.com; 
alexander.shish...@linux.intel.com
Cc: Linux-kernel@vger.kernel.org; a...@linux.intel.com; Liang, Kan 
; Jin, Yao ; Jin Yao 

Subject: [PATCH] perf report: calculate the average cycles of iterations

The branch history code has a loop detection function. With this, we can get 
the number of iterations by calculating the removed loops.

While it would be nice for knowing the average cycles of iterations. This patch 
adds up the cycles in branch entries of removed loops and save the result to 
the next branch entry (e.g. branch entry A).

Finally it will display the iteration number and average cycles at the "from" 
of branch entry A.

For example:
perf record -g -j any,save_type ./div
perf report --branch-history --no-children --stdio

--22.63%--main div.c:42 (RET CROSS_2M)
  compute_flag div.c:28 (cycles:2 iter:173115 avg_cycles:2)
  |
   --10.73%--compute_flag div.c:27 (RET CROSS_2M)
 rand rand.c:28 (cycles:1)
 rand rand.c:28 (RET CROSS_2M)
 __random random.c:298 (cycles:1)
 __random random.c:297 (COND_BWD CROSS_2M)
 __random random.c:295 (cycles:1)
 __random random.c:295 (COND_BWD CROSS_2M)
 __random random.c:295 (cycles:1)
 __random random.c:295 (RET CROSS_2M)

Signed-off-by: Jin Yao 
---
 tools/perf/ui/browsers/hists.c |  8 +---
 tools/perf/ui/stdio/hist.c | 10 ++---
 tools/perf/util/callchain.c| 49 +++
 tools/perf/util/callchain.h|  9 ++---
 tools/perf/util/machine.c  | 88 +-
 5 files changed, 85 insertions(+), 79 deletions(-)

diff --git a/tools/perf/ui/browsers/hists.c b/tools/perf/ui/browsers/hists.c 
index f4bc246..13dfb0a 100644
--- a/tools/perf/ui/browsers/hists.c
+++ b/tools/perf/ui/browsers/hists.c
@@ -931,12 +931,8 @@ static int hist_browser__show_callchain_list(struct 
hist_browser *browser,
   browser->show_dso);
 
if (symbol_conf.show_branchflag_count) {
-   if (need_percent)
-   callchain_list_counts__printf_value(node, chain, NULL,
-   buf, sizeof(buf));
-   else
-   callchain_list_counts__printf_value(NULL, chain, NULL,
-   buf, sizeof(buf));
+   callchain_list_counts__printf_value(chain, NULL,
+   buf, sizeof(buf));
 
if (asprintf(&alloc_str2, "%s%s", str, buf) < 0)
str = "Not enough memory!";
diff --git a/tools/perf/ui/stdio/hist.c b/tools/perf/ui/stdio/hist.c index 
5c95b83..8bdb7a5 100644
--- a/tools/perf/ui/stdio/hist.c
+++ b/tools/perf/ui/stdio/hist.c
@@ -124,12 +124,8 @@ static size_t ipchain__fprintf_graph(FILE *fp, struct 
callchain_node *node,
str = callchain_list__sym_name(chain, bf, sizeof(bf), false);
 
if (symbol_conf.show_branchflag_count) {
-   if (!period)
-   callchain_list_counts__printf_value(node, chain, NULL,
-   buf, sizeof(buf));
-   else
-   callchain_list_counts__printf_value(NULL, chain, NULL,
-   buf, sizeof(buf));
+   callchain_list_counts__printf_value(chain, NULL,
+   buf, sizeof(buf));
 
if (asprintf(&alloc_str, "%s%s", str, buf) < 0)
str = "Not enough memory!";
@@ -313,7 +309,7 @@ static size_t callchain__fprintf_graph(FILE *fp, struct 
rb_root *root,
 
if (symbol_conf.show_branchflag_count)
ret += callchain_list_counts__printf_value(
-   NULL, chain, fp, NULL, 0);
+   chain, fp, NULL, 0);
ret += fprintf(fp, "\n");
 
if (++entries_printed == callchain_param.print_limit) 
diff --git a/tools/perf/util/callchain.c b/tools/perf/util/callchain.c index 
f320b07..510b513 100644
--- a/tools/perf/util/callchain.c
+++ b/tools/perf/util/callchain.c
@@ -588,7 +588,7 @@ fill_node(struct callchain_node *node, struct 
callchain_cursor *cursor)
call->cycles_count =
cursor_node->branch_flags.c

[PATCH] perf report: calculate the average cycles of iterations

2017-08-06 Thread Jin Yao
The branch history code has a loop detection function. With
this, we can get the number of iterations by calculating the
removed loops.

While it would be nice for knowing the average cycles of
iterations. This patch adds up the cycles in branch entries
of removed loops and save the result to the next branch entry
(e.g. branch entry A).

Finally it will display the iteration number and average
cycles at the "from" of branch entry A.

For example:
perf record -g -j any,save_type ./div
perf report --branch-history --no-children --stdio

--22.63%--main div.c:42 (RET CROSS_2M)
  compute_flag div.c:28 (cycles:2 iter:173115 avg_cycles:2)
  |
   --10.73%--compute_flag div.c:27 (RET CROSS_2M)
 rand rand.c:28 (cycles:1)
 rand rand.c:28 (RET CROSS_2M)
 __random random.c:298 (cycles:1)
 __random random.c:297 (COND_BWD CROSS_2M)
 __random random.c:295 (cycles:1)
 __random random.c:295 (COND_BWD CROSS_2M)
 __random random.c:295 (cycles:1)
 __random random.c:295 (RET CROSS_2M)

Signed-off-by: Jin Yao 
---
 tools/perf/ui/browsers/hists.c |  8 +---
 tools/perf/ui/stdio/hist.c | 10 ++---
 tools/perf/util/callchain.c| 49 +++
 tools/perf/util/callchain.h|  9 ++---
 tools/perf/util/machine.c  | 88 +-
 5 files changed, 85 insertions(+), 79 deletions(-)

diff --git a/tools/perf/ui/browsers/hists.c b/tools/perf/ui/browsers/hists.c
index f4bc246..13dfb0a 100644
--- a/tools/perf/ui/browsers/hists.c
+++ b/tools/perf/ui/browsers/hists.c
@@ -931,12 +931,8 @@ static int hist_browser__show_callchain_list(struct 
hist_browser *browser,
   browser->show_dso);
 
if (symbol_conf.show_branchflag_count) {
-   if (need_percent)
-   callchain_list_counts__printf_value(node, chain, NULL,
-   buf, sizeof(buf));
-   else
-   callchain_list_counts__printf_value(NULL, chain, NULL,
-   buf, sizeof(buf));
+   callchain_list_counts__printf_value(chain, NULL,
+   buf, sizeof(buf));
 
if (asprintf(&alloc_str2, "%s%s", str, buf) < 0)
str = "Not enough memory!";
diff --git a/tools/perf/ui/stdio/hist.c b/tools/perf/ui/stdio/hist.c
index 5c95b83..8bdb7a5 100644
--- a/tools/perf/ui/stdio/hist.c
+++ b/tools/perf/ui/stdio/hist.c
@@ -124,12 +124,8 @@ static size_t ipchain__fprintf_graph(FILE *fp, struct 
callchain_node *node,
str = callchain_list__sym_name(chain, bf, sizeof(bf), false);
 
if (symbol_conf.show_branchflag_count) {
-   if (!period)
-   callchain_list_counts__printf_value(node, chain, NULL,
-   buf, sizeof(buf));
-   else
-   callchain_list_counts__printf_value(NULL, chain, NULL,
-   buf, sizeof(buf));
+   callchain_list_counts__printf_value(chain, NULL,
+   buf, sizeof(buf));
 
if (asprintf(&alloc_str, "%s%s", str, buf) < 0)
str = "Not enough memory!";
@@ -313,7 +309,7 @@ static size_t callchain__fprintf_graph(FILE *fp, struct 
rb_root *root,
 
if (symbol_conf.show_branchflag_count)
ret += callchain_list_counts__printf_value(
-   NULL, chain, fp, NULL, 0);
+   chain, fp, NULL, 0);
ret += fprintf(fp, "\n");
 
if (++entries_printed == callchain_param.print_limit)
diff --git a/tools/perf/util/callchain.c b/tools/perf/util/callchain.c
index f320b07..510b513 100644
--- a/tools/perf/util/callchain.c
+++ b/tools/perf/util/callchain.c
@@ -588,7 +588,7 @@ fill_node(struct callchain_node *node, struct 
callchain_cursor *cursor)
call->cycles_count =
cursor_node->branch_flags.cycles;
call->iter_count = cursor_node->nr_loop_iter;
-   call->samples_count = cursor_node->samples;
+   call->iter_cycles = cursor_node->iter_cycles;
}
}
 
@@ -722,7 +722,7 @@ static enum match_result match_chain(struct 
callchain_cursor_node *node,
cnode->cycles_count +=
node->branch_flags.cycles;
cnode->iter_count += node->nr_loop_iter;
-