Re: [PATCH v2 0/5] perf report: Show inline stack

2016-12-07 Thread Jin, Yao

Got it, thanks so much!

I will use the new version rather than just using the "RESEND" prefix in 
the future.


For this time, since the "RESEND PATCH v2" has been sent out, I will not 
resend the v3 to avoid sending duplicate content to the mailing list. I 
will take care next time.


Jin Yao

On 12/7/2016 10:30 PM, Arnaldo Carvalho de Melo wrote:

Em Wed, Dec 07, 2016 at 01:38:29PM +0800, Jin, Yao escreveu:

So sorry, please ignore this v2 patch series.

I missed the Arnaldo other comments which were added in the code.

I will RESEND v2 patch series later.

No problem, but in the future just bump the version, i.e. ask for me to
disregard v2 and wait for v3 :-)

And thanks a lot for taking the time to address my requests and
suggestions, really appreciated!

- Arnaldo
  

On 12/7/2016 9:30 PM, Jin Yao wrote:

v2: Thanks so much for Arnaldo's comments!
  The modifications are:

  1. Divide v1 patch "perf report: Find the inline stack for a
 given address" into 2 patches:
 a. perf report: Refactor common code in srcline.c
 b. perf report: Find the inline stack for a given address

 Some function names are changed:
 dso_name_get -> dso__name
 ilist_apend -> inline_list__append
 get_inline_node -> inline__node
 free_inline_node -> inline_node__free

  2. Since the function name are changed, update following patches
 accordingly.
 a. perf report: Show inline stack in stdio mode
 b. perf report: Show inline stack in browser mode

  3. Rebase to latest perf/core branch. This patch is impacted.
 a. perf report: Create a new option "--inline"

v1: Initial post

It would be useful for perf to support a mode to query the
inline stack for callgraph addresses. This would simplify
finding the right code in code that does a lot of inlining.

For example, the c code:

static inline void f3(void)
{
  int i;
  for (i = 0; i < 1000;) {

  if(i%2)
  i++;
  else
  i++;
  }
  printf("hello f3\n");   /* D */
}

/* < CALLCHAIN: f2 <- f1 > */
static inline void f2(void)
{
  int i;
  for (i = 0; i < 100; i++) {
  f3();   /* C */
  }
}

/* < CALLCHAIN: f1 <- main > */
static inline void f1(void)
{
  int i;
  for (i = 0; i < 100; i++) {
  f2();   /* B */
  }
}

/* < CALLCHAIN: main <- TOP > */
int main()
{
  struct timeval tv;
  time_t start, end;

  gettimeofday(, NULL);
  start = end = tv.tv_sec;
  while((end - start) < 5) {
  f1();   /* A */
  gettimeofday(, NULL);
  end = tv.tv_sec;
  }
  return 0;
}

The printed inline stack is:

0.05%  test2test2  [.] main
 |
 ---/home/perf-dev/lck-2867/test/test2.c:27 (inline)
/home/perf-dev/lck-2867/test/test2.c:35 (inline)
/home/perf-dev/lck-2867/test/test2.c:45 (inline)
/home/perf-dev/lck-2867/test/test2.c:61 (inline)

I tag A/B/C/D in above c code to indicate the source line,
actually the inline stack is equal to:

0.05%  test2test2  [.] main
 |
 ---D
C
B
A

Jin Yao (5):
perf report: Refactor common code in srcline.c
perf report: Find the inline stack for a given address
perf report: Create a new option "--inline"
perf report: Show inline stack in stdio mode
perf report: Show inline stack in browser mode

   tools/perf/Documentation/perf-report.txt |   4 +
   tools/perf/builtin-report.c  |   2 +
   tools/perf/ui/browsers/hists.c   |  98 ++-
   tools/perf/ui/stdio/hist.c   |  56 -
   tools/perf/util/hist.c   |   5 +
   tools/perf/util/sort.h   |   1 +
   tools/perf/util/srcline.c| 207 
++-
   tools/perf/util/symbol.h |   3 +-
   tools/perf/util/util.h   |  14 +++
   9 files changed, 356 insertions(+), 34 deletions(-)





Re: [PATCH v2 0/5] perf report: Show inline stack

2016-12-07 Thread Jin, Yao

Got it, thanks so much!

I will use the new version rather than just using the "RESEND" prefix in 
the future.


For this time, since the "RESEND PATCH v2" has been sent out, I will not 
resend the v3 to avoid sending duplicate content to the mailing list. I 
will take care next time.


Jin Yao

On 12/7/2016 10:30 PM, Arnaldo Carvalho de Melo wrote:

Em Wed, Dec 07, 2016 at 01:38:29PM +0800, Jin, Yao escreveu:

So sorry, please ignore this v2 patch series.

I missed the Arnaldo other comments which were added in the code.

I will RESEND v2 patch series later.

No problem, but in the future just bump the version, i.e. ask for me to
disregard v2 and wait for v3 :-)

And thanks a lot for taking the time to address my requests and
suggestions, really appreciated!

- Arnaldo
  

On 12/7/2016 9:30 PM, Jin Yao wrote:

v2: Thanks so much for Arnaldo's comments!
  The modifications are:

  1. Divide v1 patch "perf report: Find the inline stack for a
 given address" into 2 patches:
 a. perf report: Refactor common code in srcline.c
 b. perf report: Find the inline stack for a given address

 Some function names are changed:
 dso_name_get -> dso__name
 ilist_apend -> inline_list__append
 get_inline_node -> inline__node
 free_inline_node -> inline_node__free

  2. Since the function name are changed, update following patches
 accordingly.
 a. perf report: Show inline stack in stdio mode
 b. perf report: Show inline stack in browser mode

  3. Rebase to latest perf/core branch. This patch is impacted.
 a. perf report: Create a new option "--inline"

v1: Initial post

It would be useful for perf to support a mode to query the
inline stack for callgraph addresses. This would simplify
finding the right code in code that does a lot of inlining.

For example, the c code:

static inline void f3(void)
{
  int i;
  for (i = 0; i < 1000;) {

  if(i%2)
  i++;
  else
  i++;
  }
  printf("hello f3\n");   /* D */
}

/* < CALLCHAIN: f2 <- f1 > */
static inline void f2(void)
{
  int i;
  for (i = 0; i < 100; i++) {
  f3();   /* C */
  }
}

/* < CALLCHAIN: f1 <- main > */
static inline void f1(void)
{
  int i;
  for (i = 0; i < 100; i++) {
  f2();   /* B */
  }
}

/* < CALLCHAIN: main <- TOP > */
int main()
{
  struct timeval tv;
  time_t start, end;

  gettimeofday(, NULL);
  start = end = tv.tv_sec;
  while((end - start) < 5) {
  f1();   /* A */
  gettimeofday(, NULL);
  end = tv.tv_sec;
  }
  return 0;
}

The printed inline stack is:

0.05%  test2test2  [.] main
 |
 ---/home/perf-dev/lck-2867/test/test2.c:27 (inline)
/home/perf-dev/lck-2867/test/test2.c:35 (inline)
/home/perf-dev/lck-2867/test/test2.c:45 (inline)
/home/perf-dev/lck-2867/test/test2.c:61 (inline)

I tag A/B/C/D in above c code to indicate the source line,
actually the inline stack is equal to:

0.05%  test2test2  [.] main
 |
 ---D
C
B
A

Jin Yao (5):
perf report: Refactor common code in srcline.c
perf report: Find the inline stack for a given address
perf report: Create a new option "--inline"
perf report: Show inline stack in stdio mode
perf report: Show inline stack in browser mode

   tools/perf/Documentation/perf-report.txt |   4 +
   tools/perf/builtin-report.c  |   2 +
   tools/perf/ui/browsers/hists.c   |  98 ++-
   tools/perf/ui/stdio/hist.c   |  56 -
   tools/perf/util/hist.c   |   5 +
   tools/perf/util/sort.h   |   1 +
   tools/perf/util/srcline.c| 207 
++-
   tools/perf/util/symbol.h |   3 +-
   tools/perf/util/util.h   |  14 +++
   9 files changed, 356 insertions(+), 34 deletions(-)





Re: [PATCH v2 0/5] perf report: Show inline stack

2016-12-07 Thread Arnaldo Carvalho de Melo
Em Wed, Dec 07, 2016 at 01:38:29PM +0800, Jin, Yao escreveu:
> So sorry, please ignore this v2 patch series.
> 
> I missed the Arnaldo other comments which were added in the code.
> 
> I will RESEND v2 patch series later.

No problem, but in the future just bump the version, i.e. ask for me to
disregard v2 and wait for v3 :-)

And thanks a lot for taking the time to address my requests and
suggestions, really appreciated!

- Arnaldo
 
> 
> On 12/7/2016 9:30 PM, Jin Yao wrote:
> > v2: Thanks so much for Arnaldo's comments!
> >  The modifications are:
> > 
> >  1. Divide v1 patch "perf report: Find the inline stack for a
> > given address" into 2 patches:
> > a. perf report: Refactor common code in srcline.c
> > b. perf report: Find the inline stack for a given address
> > 
> > Some function names are changed:
> > dso_name_get -> dso__name
> > ilist_apend -> inline_list__append
> > get_inline_node -> inline__node
> > free_inline_node -> inline_node__free
> > 
> >  2. Since the function name are changed, update following patches
> > accordingly.
> > a. perf report: Show inline stack in stdio mode
> > b. perf report: Show inline stack in browser mode
> > 
> >  3. Rebase to latest perf/core branch. This patch is impacted.
> > a. perf report: Create a new option "--inline"
> > 
> > v1: Initial post
> > 
> > It would be useful for perf to support a mode to query the
> > inline stack for callgraph addresses. This would simplify
> > finding the right code in code that does a lot of inlining.
> > 
> > For example, the c code:
> > 
> > static inline void f3(void)
> > {
> >  int i;
> >  for (i = 0; i < 1000;) {
> > 
> >  if(i%2)
> >  i++;
> >  else
> >  i++;
> >  }
> >  printf("hello f3\n");   /* D */
> > }
> > 
> > /* < CALLCHAIN: f2 <- f1 > */
> > static inline void f2(void)
> > {
> >  int i;
> >  for (i = 0; i < 100; i++) {
> >  f3();   /* C */
> >  }
> > }
> > 
> > /* < CALLCHAIN: f1 <- main > */
> > static inline void f1(void)
> > {
> >  int i;
> >  for (i = 0; i < 100; i++) {
> >  f2();   /* B */
> >  }
> > }
> > 
> > /* < CALLCHAIN: main <- TOP > */
> > int main()
> > {
> >  struct timeval tv;
> >  time_t start, end;
> > 
> >  gettimeofday(, NULL);
> >  start = end = tv.tv_sec;
> >  while((end - start) < 5) {
> >  f1();   /* A */
> >  gettimeofday(, NULL);
> >  end = tv.tv_sec;
> >  }
> >  return 0;
> > }
> > 
> > The printed inline stack is:
> > 
> > 0.05%  test2test2  [.] main
> > |
> > ---/home/perf-dev/lck-2867/test/test2.c:27 (inline)
> >/home/perf-dev/lck-2867/test/test2.c:35 (inline)
> >/home/perf-dev/lck-2867/test/test2.c:45 (inline)
> >/home/perf-dev/lck-2867/test/test2.c:61 (inline)
> > 
> > I tag A/B/C/D in above c code to indicate the source line,
> > actually the inline stack is equal to:
> > 
> > 0.05%  test2test2  [.] main
> > |
> > ---D
> >C
> >B
> >A
> > 
> > Jin Yao (5):
> >perf report: Refactor common code in srcline.c
> >perf report: Find the inline stack for a given address
> >perf report: Create a new option "--inline"
> >perf report: Show inline stack in stdio mode
> >perf report: Show inline stack in browser mode
> > 
> >   tools/perf/Documentation/perf-report.txt |   4 +
> >   tools/perf/builtin-report.c  |   2 +
> >   tools/perf/ui/browsers/hists.c   |  98 ++-
> >   tools/perf/ui/stdio/hist.c   |  56 -
> >   tools/perf/util/hist.c   |   5 +
> >   tools/perf/util/sort.h   |   1 +
> >   tools/perf/util/srcline.c| 207 
> > ++-
> >   tools/perf/util/symbol.h |   3 +-
> >   tools/perf/util/util.h   |  14 +++
> >   9 files changed, 356 insertions(+), 34 deletions(-)
> > 


Re: [PATCH v2 0/5] perf report: Show inline stack

2016-12-07 Thread Arnaldo Carvalho de Melo
Em Wed, Dec 07, 2016 at 01:38:29PM +0800, Jin, Yao escreveu:
> So sorry, please ignore this v2 patch series.
> 
> I missed the Arnaldo other comments which were added in the code.
> 
> I will RESEND v2 patch series later.

No problem, but in the future just bump the version, i.e. ask for me to
disregard v2 and wait for v3 :-)

And thanks a lot for taking the time to address my requests and
suggestions, really appreciated!

- Arnaldo
 
> 
> On 12/7/2016 9:30 PM, Jin Yao wrote:
> > v2: Thanks so much for Arnaldo's comments!
> >  The modifications are:
> > 
> >  1. Divide v1 patch "perf report: Find the inline stack for a
> > given address" into 2 patches:
> > a. perf report: Refactor common code in srcline.c
> > b. perf report: Find the inline stack for a given address
> > 
> > Some function names are changed:
> > dso_name_get -> dso__name
> > ilist_apend -> inline_list__append
> > get_inline_node -> inline__node
> > free_inline_node -> inline_node__free
> > 
> >  2. Since the function name are changed, update following patches
> > accordingly.
> > a. perf report: Show inline stack in stdio mode
> > b. perf report: Show inline stack in browser mode
> > 
> >  3. Rebase to latest perf/core branch. This patch is impacted.
> > a. perf report: Create a new option "--inline"
> > 
> > v1: Initial post
> > 
> > It would be useful for perf to support a mode to query the
> > inline stack for callgraph addresses. This would simplify
> > finding the right code in code that does a lot of inlining.
> > 
> > For example, the c code:
> > 
> > static inline void f3(void)
> > {
> >  int i;
> >  for (i = 0; i < 1000;) {
> > 
> >  if(i%2)
> >  i++;
> >  else
> >  i++;
> >  }
> >  printf("hello f3\n");   /* D */
> > }
> > 
> > /* < CALLCHAIN: f2 <- f1 > */
> > static inline void f2(void)
> > {
> >  int i;
> >  for (i = 0; i < 100; i++) {
> >  f3();   /* C */
> >  }
> > }
> > 
> > /* < CALLCHAIN: f1 <- main > */
> > static inline void f1(void)
> > {
> >  int i;
> >  for (i = 0; i < 100; i++) {
> >  f2();   /* B */
> >  }
> > }
> > 
> > /* < CALLCHAIN: main <- TOP > */
> > int main()
> > {
> >  struct timeval tv;
> >  time_t start, end;
> > 
> >  gettimeofday(, NULL);
> >  start = end = tv.tv_sec;
> >  while((end - start) < 5) {
> >  f1();   /* A */
> >  gettimeofday(, NULL);
> >  end = tv.tv_sec;
> >  }
> >  return 0;
> > }
> > 
> > The printed inline stack is:
> > 
> > 0.05%  test2test2  [.] main
> > |
> > ---/home/perf-dev/lck-2867/test/test2.c:27 (inline)
> >/home/perf-dev/lck-2867/test/test2.c:35 (inline)
> >/home/perf-dev/lck-2867/test/test2.c:45 (inline)
> >/home/perf-dev/lck-2867/test/test2.c:61 (inline)
> > 
> > I tag A/B/C/D in above c code to indicate the source line,
> > actually the inline stack is equal to:
> > 
> > 0.05%  test2test2  [.] main
> > |
> > ---D
> >C
> >B
> >A
> > 
> > Jin Yao (5):
> >perf report: Refactor common code in srcline.c
> >perf report: Find the inline stack for a given address
> >perf report: Create a new option "--inline"
> >perf report: Show inline stack in stdio mode
> >perf report: Show inline stack in browser mode
> > 
> >   tools/perf/Documentation/perf-report.txt |   4 +
> >   tools/perf/builtin-report.c  |   2 +
> >   tools/perf/ui/browsers/hists.c   |  98 ++-
> >   tools/perf/ui/stdio/hist.c   |  56 -
> >   tools/perf/util/hist.c   |   5 +
> >   tools/perf/util/sort.h   |   1 +
> >   tools/perf/util/srcline.c| 207 
> > ++-
> >   tools/perf/util/symbol.h |   3 +-
> >   tools/perf/util/util.h   |  14 +++
> >   9 files changed, 356 insertions(+), 34 deletions(-)
> > 


Re: [PATCH v2 0/5] perf report: Show inline stack

2016-12-06 Thread Jin, Yao

So sorry, please ignore this v2 patch series.

I missed the Arnaldo other comments which were added in the code.

I will RESEND v2 patch series later.


On 12/7/2016 9:30 PM, Jin Yao wrote:

v2: Thanks so much for Arnaldo's comments!
 The modifications are:

 1. Divide v1 patch "perf report: Find the inline stack for a
given address" into 2 patches:
a. perf report: Refactor common code in srcline.c
b. perf report: Find the inline stack for a given address

Some function names are changed:
dso_name_get -> dso__name
ilist_apend -> inline_list__append
get_inline_node -> inline__node
free_inline_node -> inline_node__free

 2. Since the function name are changed, update following patches
accordingly.
a. perf report: Show inline stack in stdio mode
b. perf report: Show inline stack in browser mode

 3. Rebase to latest perf/core branch. This patch is impacted.
a. perf report: Create a new option "--inline"

v1: Initial post

It would be useful for perf to support a mode to query the
inline stack for callgraph addresses. This would simplify
finding the right code in code that does a lot of inlining.

For example, the c code:

static inline void f3(void)
{
 int i;
 for (i = 0; i < 1000;) {

 if(i%2)
 i++;
 else
 i++;
 }
 printf("hello f3\n");   /* D */
}

/* < CALLCHAIN: f2 <- f1 > */
static inline void f2(void)
{
 int i;
 for (i = 0; i < 100; i++) {
 f3();   /* C */
 }
}

/* < CALLCHAIN: f1 <- main > */
static inline void f1(void)
{
 int i;
 for (i = 0; i < 100; i++) {
 f2();   /* B */
 }
}

/* < CALLCHAIN: main <- TOP > */
int main()
{
 struct timeval tv;
 time_t start, end;

 gettimeofday(, NULL);
 start = end = tv.tv_sec;
 while((end - start) < 5) {
 f1();   /* A */
 gettimeofday(, NULL);
 end = tv.tv_sec;
 }
 return 0;
}

The printed inline stack is:

0.05%  test2test2  [.] main
|
---/home/perf-dev/lck-2867/test/test2.c:27 (inline)
   /home/perf-dev/lck-2867/test/test2.c:35 (inline)
   /home/perf-dev/lck-2867/test/test2.c:45 (inline)
   /home/perf-dev/lck-2867/test/test2.c:61 (inline)

I tag A/B/C/D in above c code to indicate the source line,
actually the inline stack is equal to:

0.05%  test2test2  [.] main
|
---D
   C
   B
   A

Jin Yao (5):
   perf report: Refactor common code in srcline.c
   perf report: Find the inline stack for a given address
   perf report: Create a new option "--inline"
   perf report: Show inline stack in stdio mode
   perf report: Show inline stack in browser mode

  tools/perf/Documentation/perf-report.txt |   4 +
  tools/perf/builtin-report.c  |   2 +
  tools/perf/ui/browsers/hists.c   |  98 ++-
  tools/perf/ui/stdio/hist.c   |  56 -
  tools/perf/util/hist.c   |   5 +
  tools/perf/util/sort.h   |   1 +
  tools/perf/util/srcline.c| 207 ++-
  tools/perf/util/symbol.h |   3 +-
  tools/perf/util/util.h   |  14 +++
  9 files changed, 356 insertions(+), 34 deletions(-)





Re: [PATCH v2 0/5] perf report: Show inline stack

2016-12-06 Thread Jin, Yao

So sorry, please ignore this v2 patch series.

I missed the Arnaldo other comments which were added in the code.

I will RESEND v2 patch series later.


On 12/7/2016 9:30 PM, Jin Yao wrote:

v2: Thanks so much for Arnaldo's comments!
 The modifications are:

 1. Divide v1 patch "perf report: Find the inline stack for a
given address" into 2 patches:
a. perf report: Refactor common code in srcline.c
b. perf report: Find the inline stack for a given address

Some function names are changed:
dso_name_get -> dso__name
ilist_apend -> inline_list__append
get_inline_node -> inline__node
free_inline_node -> inline_node__free

 2. Since the function name are changed, update following patches
accordingly.
a. perf report: Show inline stack in stdio mode
b. perf report: Show inline stack in browser mode

 3. Rebase to latest perf/core branch. This patch is impacted.
a. perf report: Create a new option "--inline"

v1: Initial post

It would be useful for perf to support a mode to query the
inline stack for callgraph addresses. This would simplify
finding the right code in code that does a lot of inlining.

For example, the c code:

static inline void f3(void)
{
 int i;
 for (i = 0; i < 1000;) {

 if(i%2)
 i++;
 else
 i++;
 }
 printf("hello f3\n");   /* D */
}

/* < CALLCHAIN: f2 <- f1 > */
static inline void f2(void)
{
 int i;
 for (i = 0; i < 100; i++) {
 f3();   /* C */
 }
}

/* < CALLCHAIN: f1 <- main > */
static inline void f1(void)
{
 int i;
 for (i = 0; i < 100; i++) {
 f2();   /* B */
 }
}

/* < CALLCHAIN: main <- TOP > */
int main()
{
 struct timeval tv;
 time_t start, end;

 gettimeofday(, NULL);
 start = end = tv.tv_sec;
 while((end - start) < 5) {
 f1();   /* A */
 gettimeofday(, NULL);
 end = tv.tv_sec;
 }
 return 0;
}

The printed inline stack is:

0.05%  test2test2  [.] main
|
---/home/perf-dev/lck-2867/test/test2.c:27 (inline)
   /home/perf-dev/lck-2867/test/test2.c:35 (inline)
   /home/perf-dev/lck-2867/test/test2.c:45 (inline)
   /home/perf-dev/lck-2867/test/test2.c:61 (inline)

I tag A/B/C/D in above c code to indicate the source line,
actually the inline stack is equal to:

0.05%  test2test2  [.] main
|
---D
   C
   B
   A

Jin Yao (5):
   perf report: Refactor common code in srcline.c
   perf report: Find the inline stack for a given address
   perf report: Create a new option "--inline"
   perf report: Show inline stack in stdio mode
   perf report: Show inline stack in browser mode

  tools/perf/Documentation/perf-report.txt |   4 +
  tools/perf/builtin-report.c  |   2 +
  tools/perf/ui/browsers/hists.c   |  98 ++-
  tools/perf/ui/stdio/hist.c   |  56 -
  tools/perf/util/hist.c   |   5 +
  tools/perf/util/sort.h   |   1 +
  tools/perf/util/srcline.c| 207 ++-
  tools/perf/util/symbol.h |   3 +-
  tools/perf/util/util.h   |  14 +++
  9 files changed, 356 insertions(+), 34 deletions(-)