mbox series

[v4,0/6] Perf tool: Support TSC for Arm64

Message ID 20200914115311.2201-1-leo.yan@linaro.org (mailing list archive)
Headers show
Series Perf tool: Support TSC for Arm64 | expand

Message

Leo Yan Sept. 14, 2020, 11:53 a.m. UTC
This patch set is to refactor TSC implementation and move TSC code from
x86 folder to util/tsc.c, this allows all archs to reuse the code.  And
alse move the TSC testing from x86 folder to tests so can work as a
common testing.

So far, for x86 it needs to support cap_user_time_zero and for Arm64
it needs to support cap_user_time_short.  For architecture specific
code, every arch only needs to implement its own rdtsc() to read out
timer's counter.

This patch set has been rebased on the perf/core branch with latest
commit b1f815c479c1 ("perf vendor events power9: Add hv_24x7 core level
metric events") and tested on Arm64 DB410c.

  $ perf test list
    [...]
    68: Convert perf time to TSC
    [...]

  $ perf test 68 -v
    68: Convert perf time to TSC
    --- start ---
    test child forked, pid 10961
    mmap size 528384B
    1st event perf time 35715036563417 tsc 686221770989
    rdtsc          time 35715036649719 tsc 686221772647
    2nd event perf time 35715036660448 tsc 686221772852
    test child finished with 0
    ---- end ----
    Convert perf time to TSC: Ok

Changes from v3:
* Added comments for Arm64's rdtsc() for short counter (PeterZ);
* Rebased on latest acme/perf/core branch.

Changes from v2:
* Refactored patch set to move TSC common code to util/tsc.c (Wei/Al);
* Moved TSC testing to perf/tests (Wei);
* Dropped Arm SPE timestamp patch so can have clear purpose and easier
  reviewing; will send Arm SPE timestamp as separate patch.


Leo Yan (6):
  perf tsc: Move out common functions from x86
  perf tsc: Add rdtsc() for Arm64
  perf tsc: Calculate timestamp with cap_user_time_short
  perf tsc: Support cap_user_time_short for event TIME_CONV
  perf tests tsc: Make tsc testing as a common testing
  perf tests tsc: Add checking helper is_supported()

 tools/lib/perf/include/perf/event.h           |  4 +
 tools/perf/arch/arm64/util/Build              |  1 +
 tools/perf/arch/arm64/util/tsc.c              | 21 +++++
 tools/perf/arch/x86/include/arch-tests.h      |  1 -
 tools/perf/arch/x86/tests/Build               |  1 -
 tools/perf/arch/x86/tests/arch-tests.c        |  4 -
 tools/perf/arch/x86/util/tsc.c                | 73 +----------------
 tools/perf/tests/Build                        |  1 +
 tools/perf/tests/builtin-test.c               |  5 ++
 .../{arch/x86 => }/tests/perf-time-to-tsc.c   | 13 +++
 tools/perf/tests/tests.h                      |  2 +
 tools/perf/util/jitdump.c                     | 14 ++--
 tools/perf/util/synthetic-events.c            |  8 --
 tools/perf/util/tsc.c                         | 81 +++++++++++++++++++
 tools/perf/util/tsc.h                         |  5 ++
 15 files changed, 143 insertions(+), 91 deletions(-)
 create mode 100644 tools/perf/arch/arm64/util/tsc.c
 rename tools/perf/{arch/x86 => }/tests/perf-time-to-tsc.c (93%)

Comments

Leo Yan Sept. 22, 2020, 12:07 p.m. UTC | #1
Hi Arnaldo,

On Mon, Sep 14, 2020 at 07:53:05PM +0800, Leo Yan wrote:
> This patch set is to refactor TSC implementation and move TSC code from
> x86 folder to util/tsc.c, this allows all archs to reuse the code.  And
> alse move the TSC testing from x86 folder to tests so can work as a
> common testing.
> 
> So far, for x86 it needs to support cap_user_time_zero and for Arm64
> it needs to support cap_user_time_short.  For architecture specific
> code, every arch only needs to implement its own rdtsc() to read out
> timer's counter.
> 
> This patch set has been rebased on the perf/core branch with latest
> commit b1f815c479c1 ("perf vendor events power9: Add hv_24x7 core level
> metric events") and tested on Arm64 DB410c.

Could you pick up this patch set?  Thanks!

Leo

>   $ perf test list
>     [...]
>     68: Convert perf time to TSC
>     [...]
> 
>   $ perf test 68 -v
>     68: Convert perf time to TSC
>     --- start ---
>     test child forked, pid 10961
>     mmap size 528384B
>     1st event perf time 35715036563417 tsc 686221770989
>     rdtsc          time 35715036649719 tsc 686221772647
>     2nd event perf time 35715036660448 tsc 686221772852
>     test child finished with 0
>     ---- end ----
>     Convert perf time to TSC: Ok
> 
> Changes from v3:
> * Added comments for Arm64's rdtsc() for short counter (PeterZ);
> * Rebased on latest acme/perf/core branch.
> 
> Changes from v2:
> * Refactored patch set to move TSC common code to util/tsc.c (Wei/Al);
> * Moved TSC testing to perf/tests (Wei);
> * Dropped Arm SPE timestamp patch so can have clear purpose and easier
>   reviewing; will send Arm SPE timestamp as separate patch.
> 
> 
> Leo Yan (6):
>   perf tsc: Move out common functions from x86
>   perf tsc: Add rdtsc() for Arm64
>   perf tsc: Calculate timestamp with cap_user_time_short
>   perf tsc: Support cap_user_time_short for event TIME_CONV
>   perf tests tsc: Make tsc testing as a common testing
>   perf tests tsc: Add checking helper is_supported()
> 
>  tools/lib/perf/include/perf/event.h           |  4 +
>  tools/perf/arch/arm64/util/Build              |  1 +
>  tools/perf/arch/arm64/util/tsc.c              | 21 +++++
>  tools/perf/arch/x86/include/arch-tests.h      |  1 -
>  tools/perf/arch/x86/tests/Build               |  1 -
>  tools/perf/arch/x86/tests/arch-tests.c        |  4 -
>  tools/perf/arch/x86/util/tsc.c                | 73 +----------------
>  tools/perf/tests/Build                        |  1 +
>  tools/perf/tests/builtin-test.c               |  5 ++
>  .../{arch/x86 => }/tests/perf-time-to-tsc.c   | 13 +++
>  tools/perf/tests/tests.h                      |  2 +
>  tools/perf/util/jitdump.c                     | 14 ++--
>  tools/perf/util/synthetic-events.c            |  8 --
>  tools/perf/util/tsc.c                         | 81 +++++++++++++++++++
>  tools/perf/util/tsc.h                         |  5 ++
>  15 files changed, 143 insertions(+), 91 deletions(-)
>  create mode 100644 tools/perf/arch/arm64/util/tsc.c
>  rename tools/perf/{arch/x86 => }/tests/perf-time-to-tsc.c (93%)
> 
> -- 
> 2.17.1
>
Arnaldo Carvalho de Melo Sept. 22, 2020, 4:49 p.m. UTC | #2
Em Tue, Sep 22, 2020 at 08:07:32PM +0800, Leo Yan escreveu:
> Hi Arnaldo,
> 
> On Mon, Sep 14, 2020 at 07:53:05PM +0800, Leo Yan wrote:
> > This patch set is to refactor TSC implementation and move TSC code from
> > x86 folder to util/tsc.c, this allows all archs to reuse the code.  And
> > alse move the TSC testing from x86 folder to tests so can work as a
> > common testing.
> > 
> > So far, for x86 it needs to support cap_user_time_zero and for Arm64
> > it needs to support cap_user_time_short.  For architecture specific
> > code, every arch only needs to implement its own rdtsc() to read out
> > timer's counter.
> > 
> > This patch set has been rebased on the perf/core branch with latest
> > commit b1f815c479c1 ("perf vendor events power9: Add hv_24x7 core level
> > metric events") and tested on Arm64 DB410c.
> 
> Could you pick up this patch set?  Thanks!

Yeah, I picked it up now, its a pity nobody provided Acks :-\

Or have a missed them somehow?

- Arnaldo
 
> Leo
> 
> >   $ perf test list
> >     [...]
> >     68: Convert perf time to TSC
> >     [...]
> > 
> >   $ perf test 68 -v
> >     68: Convert perf time to TSC
> >     --- start ---
> >     test child forked, pid 10961
> >     mmap size 528384B
> >     1st event perf time 35715036563417 tsc 686221770989
> >     rdtsc          time 35715036649719 tsc 686221772647
> >     2nd event perf time 35715036660448 tsc 686221772852
> >     test child finished with 0
> >     ---- end ----
> >     Convert perf time to TSC: Ok
> > 
> > Changes from v3:
> > * Added comments for Arm64's rdtsc() for short counter (PeterZ);
> > * Rebased on latest acme/perf/core branch.
> > 
> > Changes from v2:
> > * Refactored patch set to move TSC common code to util/tsc.c (Wei/Al);
> > * Moved TSC testing to perf/tests (Wei);
> > * Dropped Arm SPE timestamp patch so can have clear purpose and easier
> >   reviewing; will send Arm SPE timestamp as separate patch.
> > 
> > 
> > Leo Yan (6):
> >   perf tsc: Move out common functions from x86
> >   perf tsc: Add rdtsc() for Arm64
> >   perf tsc: Calculate timestamp with cap_user_time_short
> >   perf tsc: Support cap_user_time_short for event TIME_CONV
> >   perf tests tsc: Make tsc testing as a common testing
> >   perf tests tsc: Add checking helper is_supported()
> > 
> >  tools/lib/perf/include/perf/event.h           |  4 +
> >  tools/perf/arch/arm64/util/Build              |  1 +
> >  tools/perf/arch/arm64/util/tsc.c              | 21 +++++
> >  tools/perf/arch/x86/include/arch-tests.h      |  1 -
> >  tools/perf/arch/x86/tests/Build               |  1 -
> >  tools/perf/arch/x86/tests/arch-tests.c        |  4 -
> >  tools/perf/arch/x86/util/tsc.c                | 73 +----------------
> >  tools/perf/tests/Build                        |  1 +
> >  tools/perf/tests/builtin-test.c               |  5 ++
> >  .../{arch/x86 => }/tests/perf-time-to-tsc.c   | 13 +++
> >  tools/perf/tests/tests.h                      |  2 +
> >  tools/perf/util/jitdump.c                     | 14 ++--
> >  tools/perf/util/synthetic-events.c            |  8 --
> >  tools/perf/util/tsc.c                         | 81 +++++++++++++++++++
> >  tools/perf/util/tsc.h                         |  5 ++
> >  15 files changed, 143 insertions(+), 91 deletions(-)
> >  create mode 100644 tools/perf/arch/arm64/util/tsc.c
> >  rename tools/perf/{arch/x86 => }/tests/perf-time-to-tsc.c (93%)
> > 
> > -- 
> > 2.17.1
> >
Leo Yan Sept. 23, 2020, 8:12 a.m. UTC | #3
On Tue, Sep 22, 2020 at 01:49:06PM -0300, Arnaldo Carvalho de Melo wrote:
> Em Tue, Sep 22, 2020 at 08:07:32PM +0800, Leo Yan escreveu:
> > Hi Arnaldo,
> > 
> > On Mon, Sep 14, 2020 at 07:53:05PM +0800, Leo Yan wrote:
> > > This patch set is to refactor TSC implementation and move TSC code from
> > > x86 folder to util/tsc.c, this allows all archs to reuse the code.  And
> > > alse move the TSC testing from x86 folder to tests so can work as a
> > > common testing.
> > > 
> > > So far, for x86 it needs to support cap_user_time_zero and for Arm64
> > > it needs to support cap_user_time_short.  For architecture specific
> > > code, every arch only needs to implement its own rdtsc() to read out
> > > timer's counter.
> > > 
> > > This patch set has been rebased on the perf/core branch with latest
> > > commit b1f815c479c1 ("perf vendor events power9: Add hv_24x7 core level
> > > metric events") and tested on Arm64 DB410c.
> > 
> > Could you pick up this patch set?  Thanks!
> 
> Yeah, I picked it up now, its a pity nobody provided Acks :-\

Thanks, Arnaldo!

> Or have a missed them somehow?

No, you didn't miss anything.  I should actively chase Ack tags (e.g.
Peter or Will's acknowledge) before ask merging.  Will note for this
later.

Thanks,
Leo
Arnaldo Carvalho de Melo Sept. 23, 2020, 3:27 p.m. UTC | #4
Em Tue, Sep 22, 2020 at 01:49:06PM -0300, Arnaldo Carvalho de Melo escreveu:
> Em Tue, Sep 22, 2020 at 08:07:32PM +0800, Leo Yan escreveu:
> > Hi Arnaldo,
> > 
> > On Mon, Sep 14, 2020 at 07:53:05PM +0800, Leo Yan wrote:
> > > This patch set is to refactor TSC implementation and move TSC code from
> > > x86 folder to util/tsc.c, this allows all archs to reuse the code.  And
> > > alse move the TSC testing from x86 folder to tests so can work as a
> > > common testing.
> > > 
> > > So far, for x86 it needs to support cap_user_time_zero and for Arm64
> > > it needs to support cap_user_time_short.  For architecture specific
> > > code, every arch only needs to implement its own rdtsc() to read out
> > > timer's counter.
> > > 
> > > This patch set has been rebased on the perf/core branch with latest
> > > commit b1f815c479c1 ("perf vendor events power9: Add hv_24x7 core level
> > > metric events") and tested on Arm64 DB410c.
> > 
> > Could you pick up this patch set?  Thanks!
> 
> Yeah, I picked it up now, its a pity nobody provided Acks :-\
> 
> Or have a missed them somehow?

Also:

$ cat dm.log/debian:experimental-x-mips64

  CC       /tmp/build/perf/tests/llvm-src-prologue.o
  CC       /tmp/build/perf/tests/llvm-src-relocation.o
tests/perf-time-to-tsc.c:24:10: fatal error: arch-tests.h: No such file or directory
   24 | #include "arch-tests.h"
      |          ^~~~~~~~~~~~~~
compilation terminated.
make[4]: *** [/git/linux/tools/build/Makefile.build:96: /tmp/build/perf/tests/perf-time-to-tsc.o] Error 1
make[4]: *** Waiting for unfinished jobs....

[perfbuilder@five ~]$ cat dm.log/debian:experimental-x-mipsel | grep "fatal error" -A5
tests/perf-time-to-tsc.c:24:10: fatal error: arch-tests.h: No such file or directory
   24 | #include "arch-tests.h"
      |          ^~~~~~~~~~~~~~
compilation terminated.
make[4]: *** [/git/linux/tools/build/Makefile.build:96: /tmp/build/perf/tests/perf-time-to-tsc.o] Error 1
make[4]: *** Waiting for unfinished jobs....
[perfbuilder@five ~]$ 

[perfbuilder@five ~]$ cat dm.log/fedora:30-x-ARC-uClibc | grep "fatal error" -A5
tests/perf-time-to-tsc.c:24:10: fatal error: arch-tests.h: No such file or directory
 #include "arch-tests.h"
          ^~~~~~~~~~~~~~
compilation terminated.
make[4]: *** [/git/linux/tools/build/Makefile.build:97: /tmp/build/perf/tests/perf-time-to-tsc.o] Error 1
make[4]: *** Waiting for unfinished jobs....
[perfbuilder@five ~]$

[perfbuilder@five ~]$ cat dm.log/ubuntu:18.04-x-s390 | grep "fatal error" -A5
tests/perf-time-to-tsc.c:24:10: fatal error: arch-tests.h: No such file or directory
 #include "arch-tests.h"
          ^~~~~~~~~~~~~~
compilation terminated.
/git/linux/tools/build/Makefile.build:96: recipe for target '/tmp/build/perf/tests/perf-time-to-tsc.o' failed
make[4]: *** [/tmp/build/perf/tests/perf-time-to-tsc.o] Error 1
[perfbuilder@five ~]$


Oh, it works for arm64 and powerpc

  69    25.93 ubuntu:18.04-x-arm            : Ok   arm-linux-gnueabihf-gcc (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04) 7.5.0
  70    25.69 ubuntu:18.04-x-arm64          : Ok   aarch64-linux-gnu-gcc (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04) 7.5.0


  68    79.84 ubuntu:18.04                  : Ok   gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0, clang version 6.0.0-1ubuntu2 (tags/RELEASE_600/final)
  69    25.93 ubuntu:18.04-x-arm            : Ok   arm-linux-gnueabihf-gcc (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04) 7.5.0
  70    25.69 ubuntu:18.04-x-arm64          : Ok   aarch64-linux-gnu-gcc (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04) 7.5.0
  71    11.75 ubuntu:18.04-x-m68k           : FAIL m68k-linux-gnu-gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
  72    25.72 ubuntu:18.04-x-powerpc        : Ok   powerpc-linux-gnu-gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
  73    28.10 ubuntu:18.04-x-powerpc64      : Ok   powerpc64-linux-gnu-gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
  74    27.84 ubuntu:18.04-x-powerpc64el    : Ok   powerpc64le-linux-gnu-gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
  75    12.11 ubuntu:18.04-x-riscv64        : FAIL riscv64-linux-gnu-gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
  76    11.85 ubuntu:18.04-x-s390           : FAIL s390x-linux-gnu-gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
  77    12.55 ubuntu:18.04-x-sh4            : FAIL sh4-linux-gnu-gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
  78    11.42 ubuntu:18.04-x-sparc64        : FAIL sparc64-linux-gnu-gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0


[perfbuilder@five ~]$ grep tsc dm.log/ubuntu\:18.04-x-powerpc64
  CC       /tmp/build/perf/tests/perf-time-to-tsc.o
  CC       /tmp/build/perf/util/tsc.o
  CC       /tmp/build/perf/tests/perf-time-to-tsc.o
  CC       /tmp/build/perf/util/tsc.o
  CC       /tmp/build/perf/tests/perf-time-to-tsc.o
  CC       /tmp/build/perf/util/tsc.o
[perfbuilder@five ~]$

Can you please take a look and resubmit? I'm removing the series from my
local branch.

- Arnaldo
Arnaldo Carvalho de Melo Sept. 23, 2020, 3:55 p.m. UTC | #5
Em Wed, Sep 23, 2020 at 12:27:53PM -0300, Arnaldo Carvalho de Melo escreveu:
> Em Tue, Sep 22, 2020 at 01:49:06PM -0300, Arnaldo Carvalho de Melo escreveu:
> > Em Tue, Sep 22, 2020 at 08:07:32PM +0800, Leo Yan escreveu:
> > > Hi Arnaldo,
> > > 
> > > On Mon, Sep 14, 2020 at 07:53:05PM +0800, Leo Yan wrote:
> > > > This patch set is to refactor TSC implementation and move TSC code from
> > > > x86 folder to util/tsc.c, this allows all archs to reuse the code.  And
> > > > alse move the TSC testing from x86 folder to tests so can work as a
> > > > common testing.
> > > > 
> > > > So far, for x86 it needs to support cap_user_time_zero and for Arm64
> > > > it needs to support cap_user_time_short.  For architecture specific
> > > > code, every arch only needs to implement its own rdtsc() to read out
> > > > timer's counter.
> > > > 
> > > > This patch set has been rebased on the perf/core branch with latest
> > > > commit b1f815c479c1 ("perf vendor events power9: Add hv_24x7 core level
> > > > metric events") and tested on Arm64 DB410c.
> > > 
> > > Could you pick up this patch set?  Thanks!
> > 
> > Yeah, I picked it up now, its a pity nobody provided Acks :-\
> > 
> > Or have a missed them somehow?
> 
> Also:

So, this is the first:

commit 0ab58c405dd7c143a1482cb9414eb0eb9b31d42a (HEAD)
Author: Leo Yan <leo.yan@linaro.org>
Date:   Mon Sep 14 19:53:10 2020 +0800

    perf tests tsc: Make tsc testing as a common testing

I'll remove it and the ones after that, so the main feature is kept.

I'll retest, and then push to perf/core you can then continue from
there.

Thanks,

- Arnaldo
Leo Yan Sept. 23, 2020, 11:48 p.m. UTC | #6
Hi Arnaldo,

On Wed, Sep 23, 2020 at 12:55:57PM -0300, Arnaldo Carvalho de Melo wrote:
> Em Wed, Sep 23, 2020 at 12:27:53PM -0300, Arnaldo Carvalho de Melo escreveu:
> > Em Tue, Sep 22, 2020 at 01:49:06PM -0300, Arnaldo Carvalho de Melo escreveu:
> > > Em Tue, Sep 22, 2020 at 08:07:32PM +0800, Leo Yan escreveu:
> > > > Hi Arnaldo,
> > > > 
> > > > On Mon, Sep 14, 2020 at 07:53:05PM +0800, Leo Yan wrote:
> > > > > This patch set is to refactor TSC implementation and move TSC code from
> > > > > x86 folder to util/tsc.c, this allows all archs to reuse the code.  And
> > > > > alse move the TSC testing from x86 folder to tests so can work as a
> > > > > common testing.
> > > > > 
> > > > > So far, for x86 it needs to support cap_user_time_zero and for Arm64
> > > > > it needs to support cap_user_time_short.  For architecture specific
> > > > > code, every arch only needs to implement its own rdtsc() to read out
> > > > > timer's counter.
> > > > > 
> > > > > This patch set has been rebased on the perf/core branch with latest
> > > > > commit b1f815c479c1 ("perf vendor events power9: Add hv_24x7 core level
> > > > > metric events") and tested on Arm64 DB410c.
> > > > 
> > > > Could you pick up this patch set?  Thanks!
> > > 
> > > Yeah, I picked it up now, its a pity nobody provided Acks :-\
> > > 
> > > Or have a missed them somehow?
> > 
> > Also:
> 
> So, this is the first:
> 
> commit 0ab58c405dd7c143a1482cb9414eb0eb9b31d42a (HEAD)
> Author: Leo Yan <leo.yan@linaro.org>
> Date:   Mon Sep 14 19:53:10 2020 +0800
> 
>     perf tests tsc: Make tsc testing as a common testing
> 
> I'll remove it and the ones after that, so the main feature is kept.
> 
> I'll retest, and then push to perf/core you can then continue from
> there.

Will monitor perf/core branch and after you push onto it, I will fix
the issue ASAP.   Sorry for inconvenience.

Thanks,
Leo