mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Ingo Molnar <mingo@kernel.org>
To: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: linux-kernel@vger.kernel.org, Linux Weekly News <lwn@lwn.net>,
	Andi Kleen <andi@firstfloor.org>, David Ahern <dsahern@gmail.com>,
	Don Zickus <dzickus@redhat.com>, Jiri Olsa <jolsa@kernel.org>,
	Joe Mario <jmario@redhat.com>, Namhyung Kim <namhyung@kernel.org>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Arnaldo Carvalho de Melo <acme@redhat.com>
Subject: Re: [GIT PULL 00/52] New Tool: perf c2c
Date: Sat, 22 Oct 2016 10:28:06 +0200	[thread overview]
Message-ID: <20161022082806.GA4526@gmail.com> (raw)
In-Reply-To: <1476975876-2522-1-git-send-email-acme@kernel.org>


* Arnaldo Carvalho de Melo <acme@kernel.org> wrote:

> Hi Ingo,
> 
> 	Please consider pulling into tip/perf/core,
> 
> Thanks,
> 
> - Arnaldo
> 
> The following changes since commit 10b37cb59fa1e61fec1386f324615e0e8202cd87:
> 
>   Merge tag 'perf-vendor_events-for-mingo-20161018' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2016-10-19 15:22:26 +0200)
> 
> are available in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-c2c-for-mingo-20161020
> 
> for you to fetch changes up to 535bbde62701b2bb298063e9dfa007e8a1ff95d1:
> 
>   perf c2c report: Add --show-all option (2016-10-19 13:18:31 -0300)
> 
> ----------------------------------------------------------------
> - The 'perf c2c' tool provides means for Shared Data C2C/HITM analysis.
> 
>   It allows you to track down cacheline contention. The tool is based
>   on x86's load latency and precise store facility events provided by
>   Intel CPUs.
> 
>   It was tested by Joe Mario and has proven to be useful, finding some
>   cacheline contentions. Joe also wrote a blog about c2c tool with
>   examples:
> 
>     https://joemario.github.io/blog/2016/09/01/c2c-blog/
> 
>   Excerpt of the content on this site:
> 
>   ---
>     At a high level, “perf c2c” will show you:
> 
>     * The cachelines where false sharing was detected.
>     * The readers and writers to those cachelines, and the offsets where those accesses occurred.
>     * The pid, tid, instruction addr, function name, binary object name for those readers and writers.
>     * The source file and line number for each reader and writer.
>     * The average load latency for the loads to those cachelines.
>     * Which numa nodes the samples a cacheline came from and which CPUs were involved.
> 
>     Using perf c2c is similar to using the Linux perf tool today.
>     First collect data with “perf c2c record” Then generate a report output with “perf c2c report”
>   ---
> 
>   There one finds extensive details on using the tool, with tips on
>   reducing the volume of samples while still capturing enough to do
>   its job. (Dick Fowles, Joe Mario, Don Zickus, Jiri Olsa)
> 
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> 
> ----------------------------------------------------------------
> Jiri Olsa (52):
>       perf c2c: Introduce c2c_decode_stats function
>       perf c2c: Introduce c2c_add_stats function
>       perf c2c: Add c2c command
>       perf c2c: Add record subcommand
>       perf c2c: Add report subcommand
>       perf c2c report: Add dimension support
>       perf c2c report: Add sort_entry dimension support
>       perf c2c report: Fallback to standard dimensions
>       perf c2c report: Add sample processing
>       perf c2c report: Add cacheline hists processing
>       perf c2c report: Decode c2c_stats for hist entries
>       perf c2c report: Add header macros
>       perf c2c report: Add 'dcacheline' dimension key
>       perf c2c report: Add 'offset' dimension key
>       perf c2c report: Add 'iaddr' dimension key
>       perf c2c report: Add hitm related dimension keys
>       perf c2c report: Add stores related dimension keys
>       perf c2c report: Add loads related dimension keys
>       perf c2c report: Add llc and remote loads related dimension keys
>       perf c2c report: Add llc load miss dimension key
>       perf c2c report: Add total record sort key
>       perf c2c report: Add total loads sort key
>       perf c2c report: Add hitm percent sort key
>       perf c2c report: Add hitm/store percent related sort keys
>       perf c2c report: Add dram related sort keys
>       perf c2c report: Add 'pid' sort key
>       perf c2c report: Add 'tid' sort key
>       perf c2c report: Add 'symbol' and 'dso' sort keys
>       perf c2c report: Add 'node' sort key
>       perf c2c report: Add stats related sort keys
>       perf c2c report: Add 'cpucnt' sort key
>       perf c2c report: Add src line sort key
>       perf c2c report: Setup number of header lines for hists
>       perf c2c report: Set final resort fields
>       perf c2c report: Add stdio output support
>       perf c2c report: Add main TUI browser
>       perf c2c report: Add TUI cacheline browser
>       perf c2c report: Add global stats stdio output
>       perf c2c report: Add shared cachelines stats stdio output
>       perf c2c report: Add c2c related stats stdio output
>       perf c2c report: Allow to report callchains
>       perf c2c report: Limit the cachelines table entries
>       perf c2c report: Add support to choose local HITMs
>       perf c2c report: Allow to set cacheline sort fields
>       perf c2c report: Recalc width of global sort entries
>       perf c2c report: Add cacheline index entry
>       perf c2c report: Add support to manage symbol name length
>       perf c2c report: Iterate node display in browser
>       perf c2c report: Add help windows
>       perf c2c: Add man page and credits
>       perf c2c report: Add --no-source option
>       perf c2c report: Add --show-all option
> 
>  tools/perf/Build                      |    1 +
>  tools/perf/Documentation/perf-c2c.txt |  282 ++++
>  tools/perf/builtin-c2c.c              | 2754 +++++++++++++++++++++++++++++++++
>  tools/perf/builtin.h                  |    1 +
>  tools/perf/perf.c                     |    1 +
>  tools/perf/ui/browsers/hists.c        |    2 +-
>  tools/perf/ui/browsers/hists.h        |    1 +
>  tools/perf/util/hist.c                |    1 +
>  tools/perf/util/hist.h                |    1 +
>  tools/perf/util/mem-events.c          |  128 ++
>  tools/perf/util/mem-events.h          |   37 +
>  tools/perf/util/sort.c                |    2 +-
>  tools/perf/util/sort.h                |    1 +
>  13 files changed, 3210 insertions(+), 2 deletions(-)
>  create mode 100644 tools/perf/Documentation/perf-c2c.txt
>  create mode 100644 tools/perf/builtin-c2c.c

Pulled the perf-c2c-for-mingo-20161021 tag, thanks a lot Arnaldo!

I can see some teething problems. For example if I run it on an older kernel (v4.4 
distro kernel), I get this:

 triton:~/tip> perf c2c record perf bench sched pipe
 # Running 'sched/pipe' benchmark:
 # Executed 1000000 pipe operations between two processes

     Total time: 12.001 [sec]

      12.001919 usecs/op
          83320 ops/sec
 [ perf record: Woken up 18 times to write data ]
 [ perf record: Captured and wrote 5.356 MB perf.data (69804 samples) ]

but there's no 'perf c2c report' TUI output at all:

 Shared Data Cache Line Table     (0 entries, sorted on remote HITMs)                                                                                                                  
                              Total      Rmt  ----- LLC Load Hitm -----  ---- Store Reference ----  --- Load Dram ----      LLC    Total  ----- Core Load Hit -----  -- LLC Load Hit -
 Index           Cacheline  records     Hitm    Total      Lcl      Rmt    Total    L1Hit   L1Miss       Lcl       Rmt  Ld Miss    Loads       FB       L1       L2       Llc       Rm
                                                                                                                                                                                     
and just an empty screen.

If I do 'perf report' I get two events:

 Available samples
 24K cpu/mem-loads,ldlat=30/P
 45K cpu/mem-stores/P

and both have some real data.

What am I missing?

	Ingo

  parent reply	other threads:[~2016-10-22  8:28 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-20 15:03 Arnaldo Carvalho de Melo
2016-10-20 15:03 ` [PATCH 01/52] perf c2c: Introduce c2c_decode_stats function Arnaldo Carvalho de Melo
2016-10-20 15:03 ` [PATCH 02/52] perf c2c: Introduce c2c_add_stats function Arnaldo Carvalho de Melo
2016-10-20 15:03 ` [PATCH 03/52] perf c2c: Add c2c command Arnaldo Carvalho de Melo
2016-10-20 15:03 ` [PATCH 04/52] perf c2c: Add record subcommand Arnaldo Carvalho de Melo
2016-10-20 15:03 ` [PATCH 05/52] perf c2c: Add report subcommand Arnaldo Carvalho de Melo
2016-10-20 15:03 ` [PATCH 06/52] perf c2c report: Add dimension support Arnaldo Carvalho de Melo
2016-10-20 15:03 ` [PATCH 07/52] perf c2c report: Add sort_entry " Arnaldo Carvalho de Melo
2016-10-20 15:03 ` [PATCH 08/52] perf c2c report: Fallback to standard dimensions Arnaldo Carvalho de Melo
2016-10-20 15:03 ` [PATCH 09/52] perf c2c report: Add sample processing Arnaldo Carvalho de Melo
2016-10-20 15:03 ` [PATCH 10/52] perf c2c report: Add cacheline hists processing Arnaldo Carvalho de Melo
2016-10-20 15:03 ` [PATCH 11/52] perf c2c report: Decode c2c_stats for hist entries Arnaldo Carvalho de Melo
2016-10-20 15:03 ` [PATCH 12/52] perf c2c report: Add header macros Arnaldo Carvalho de Melo
2016-10-20 15:03 ` [PATCH 13/52] perf c2c report: Add 'dcacheline' dimension key Arnaldo Carvalho de Melo
2016-10-20 15:03 ` [PATCH 14/52] perf c2c report: Add 'offset' " Arnaldo Carvalho de Melo
2016-10-20 15:03 ` [PATCH 15/52] perf c2c report: Add 'iaddr' " Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 16/52] perf c2c report: Add hitm related dimension keys Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 17/52] perf c2c report: Add stores " Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 18/52] perf c2c report: Add loads " Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 19/52] perf c2c report: Add llc and remote " Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 20/52] perf c2c report: Add llc load miss dimension key Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 21/52] perf c2c report: Add total record sort key Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 22/52] perf c2c report: Add total loads " Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 23/52] perf c2c report: Add hitm percent " Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 24/52] perf c2c report: Add hitm/store percent related sort keys Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 25/52] perf c2c report: Add dram " Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 26/52] perf c2c report: Add 'pid' sort key Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 27/52] perf c2c report: Add 'tid' " Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 28/52] perf c2c report: Add 'symbol' and 'dso' sort keys Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 29/52] perf c2c report: Add 'node' sort key Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 30/52] perf c2c report: Add stats related sort keys Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 31/52] perf c2c report: Add 'cpucnt' sort key Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 32/52] perf c2c report: Add src line " Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 33/52] perf c2c report: Setup number of header lines for hists Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 34/52] perf c2c report: Set final resort fields Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 35/52] perf c2c report: Add stdio output support Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 36/52] perf c2c report: Add main TUI browser Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 37/52] perf c2c report: Add TUI cacheline browser Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 38/52] perf c2c report: Add global stats stdio output Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 39/52] perf c2c report: Add shared cachelines " Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 40/52] perf c2c report: Add c2c related " Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 41/52] perf c2c report: Allow to report callchains Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 42/52] perf c2c report: Limit the cachelines table entries Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 43/52] perf c2c report: Add support to choose local HITMs Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 44/52] perf c2c report: Allow to set cacheline sort fields Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 45/52] perf c2c report: Recalc width of global sort entries Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 46/52] perf c2c report: Add cacheline index entry Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 47/52] perf c2c report: Add support to manage symbol name length Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 48/52] perf c2c report: Iterate node display in browser Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 49/52] perf c2c report: Add help windows Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 50/52] perf c2c: Add man page and credits Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 51/52] perf c2c report: Add --no-source option Arnaldo Carvalho de Melo
2016-10-20 15:04 ` [PATCH 52/52] perf c2c report: Add --show-all option Arnaldo Carvalho de Melo
2016-10-20 23:02 ` [GIT PULL 00/52] New Tool: perf c2c Kim Phillips
2016-10-21  0:17   ` [PATCH] perf c2c report: Properly check data presence in rb_tree loop Jiri Olsa
2016-10-21 19:23     ` Kim Phillips
2016-10-22  8:49     ` [tip:perf/core] perf c2c report: Add main TUI browser tip-bot for Jiri Olsa
2016-10-21  0:21   ` [GIT PULL 00/52] New Tool: perf c2c Jiri Olsa
2016-10-22  8:28 ` Ingo Molnar [this message]
2016-10-23 11:05   ` Jiri Olsa
2016-10-23 23:47     ` Andi Kleen
2016-10-24  6:32       ` Jiri Olsa
2016-10-24  9:23     ` Ingo Molnar
2016-10-24  9:42       ` Jiri Olsa

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20161022082806.GA4526@gmail.com \
    --to=mingo@kernel.org \
    --cc=a.p.zijlstra@chello.nl \
    --cc=acme@kernel.org \
    --cc=acme@redhat.com \
    --cc=andi@firstfloor.org \
    --cc=dsahern@gmail.com \
    --cc=dzickus@redhat.com \
    --cc=jmario@redhat.com \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lwn@lwn.net \
    --cc=namhyung@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome