From: Stephane Eranian <eranian@google.com>
To: linux-kernel@vger.kernel.org
Cc: peterz@infradead.org, mingo@elte.hu, ak@linux.intel.com,
acme@redhat.com, jolsa@redhat.com, namhyung.kim@lge.com
Subject: [PATCH v7 00/18] perf: add memory access sampling support
Date: Thu, 24 Jan 2013 16:10:24 +0100 [thread overview]
Message-ID: <1359040242-8269-1-git-send-email-eranian@google.com> (raw)
This patch series had a new feature to the kernel perf_events
interface and corresponding user level tool, perf.
With this patch, it is possible to sample (not trace) memory
accesses (load, store). For loads, the instruction and data
addresses are captured along with the latency and data source.
For stores, the instruction and data addresses are capture
along with limited cache and TLB information.
For load data source, the memory hierarchy level, the tlb, snoop
and lock information is captured.
Although the perf_event interface is extended in a generic manner,
sampling memory accesses requires HW support. The current patches
implement the feature on Intel processors starting with Nehalem.
The patches leverage the PEBS Load Latency and Precise Store
mechanisms. Precise Store is present only on Sandy Bridge and
Ivy Bridge based processors.
The perf tool is extended to make capturing and analyzing the
data easier with a new command: perf mem.
$ perf mem -t load rec triad
$ perf mem -t load rep --stdio
# Samples: 19K of event 'cpu/mem-loads/pp'
# Total weight: 1013994
# Sort order : local_weight,mem,sym,dso,symbol_daddr,dso_daddr,snoop,tlb,locked
#
# Overhead Samples Local Weight Memory access Symbol Shared Obj Data Symbol Data Object Snoop TLB access Locked
# ........ ......... ............ ............. .......... ........... ...................... ........... ...... ............ ......
0.10% 1 986 LFB hit [.] triad triad [.] 0x00007f67dffe8038 [unknown] None L1 or L2 hit No
0.09% 1 890 LFB hit [.] triad triad [.] 0x00007f67df91a750 [unknown] None L1 or L2 hit No
0.08% 1 826 LFB hit [.] triad triad [.] 0x00007f67e288fba8 [unknown] None L1 or L2 hit No
0.08% 1 825 LFB hit [.] triad triad [.] 0x00007f67dea28c80 [unknown] None L1 or L2 hit No
0.08% 1 787 LFB hit [.] triad triad [.] 0x00007f67df055a60 [unknown] None L1 or L2 hit No
The perf mem command is a wrapper around perf record/report. It passes the
right options to the report and record commands. Note that the TUI mode is
supported. Overhead is relative to total cost, which is sum of the weights
of each sample.
One powerful feature of perf is that users can toy with the sort order to display
the information in different formats or from a different angle. This is particularly
useful with memory sampling:
$ perf mem -t load rep --sort=mem
# Samples: 19K of event 'cpu/mem-loads/pp'
# Total weight: 1013994
# Sort order : mem
#
# Overhead Samples Memory access
# ........ ........... ........................
#
85.26% 10633 LFB hit
7.35% 8151 L1 hit
3.13% 383 L3 hit
3.09% 195 Local RAM hit
1.16% 259 L2 hit
0.00% 4 Uncached hit
Or if one is interested in the data view:
$ perf mem -t load rep --sort=symbol_daddr,local_weight
# Samples: 19K of event 'cpu/mem-loads/pp'
# Total cost : 1013994
# Sort order : symbol_daddr,cost
#
# Overhead Samples Data Symbol Local Weight
# ........ ........... ...................... ............
#
0.10% 1 [.] 0x00007f67dffe8038 986
0.09% 1 [.] 0x00007f67df91a750 890
0.08% 1 [.] 0x00007f67e288fba8 826
One note on the weight (cost) displayed: On Intel processors with PEBS Load Latency, as
described in the SDM, the cost encompasses the number of cycles from dispatch to Globally
Observable (GO) state. That means, that it includes OOO execution. It is not usual to see
L1D Hits with a cost of > 100 cycles. Always look at the memory level for an approximation
of the access penalty, then interpret the cost value accordingly.
Data symbolization is working for initialized global variables. Dynamically allocated
data and bss symbolization is currently non-functional.
There is no weight associated with stores.
In v2, we leverage some of Andi Kleen's Haswell patches, namely the weighted
samples and perf tool event parser fixes. We also introduce PERF_RECORD_MISC_DATA_MMAP
to tag mmaps for data vs. code. This helps the perf tool distinguish data. vs. code
mmaps (and therefore symbols). We have also integrated the feedback from v1. Note that in
v2 data symbol resolution is not yet fully operational, but there is a slight improvement.
In v3, we rebased the patch on 3.7.0-rc6 which includes certain of Nahyung's patches.
In v4, we rebase to v3.7 tip and also included the fixes from Namhyung Kim for
symbolization of data addresses. We now have accesses to global variables working.
In v5, we rebase to 3.8.0-rc1. We also updated the WEIGHT patches from Andi to
fix a couple of issues. Integrated the feedback from jolsa@.
Reintegrated the man page.
In v6, we rebased to 3.8.0-rc3 and fixed the issue reported by jolsa@ related
to hist_entry->mem_info maps not being marked as referenced.
In v7, we rebased on 3.8.0-rc4 and also merged in more patches from Andi's
HSW series. We now use his weigthened sample support completely.
Signed-off-by: Stephane Eranian <eranian@google.com>
---
Andi Kleen (3):
perf, x86: Support CPU specific sysfs events
perf, core: Add a concept of a weightened sample v2
perf, tools: Add support for weight v7 (modified)
Namhyung Kim (2):
perf tools: Ignore ABS symbols when loading data maps
perf tools: Fix output of symbol_daddr offset
Stephane Eranian (13):
perf/x86: improve sysfs event mapping with event string
perf/x86: add flags to event constraints
perf: add support for PERF_SAMPLE_ADDR in dump_sampple()
perf: add generic memory sampling interface
perf/x86: add memory profiling via PEBS Load Latency
perf/x86: export PEBS load latency threshold register to sysfs
perf/x86: add support for PEBS Precise Store
perf tools: add mem access sampling core support
perf report: add support for mem access profiling
perf record: add support for mem access profiling
perf tools: add new mem command for memory access profiling
perf: add PERF_RECORD_MISC_MMAP_DATA to RECORD_MMAP
perf tools: detect data vs. text mappings
arch/x86/include/uapi/asm/msr-index.h | 1 +
arch/x86/kernel/cpu/perf_event.c | 67 +++--
arch/x86/kernel/cpu/perf_event.h | 62 ++++-
arch/x86/kernel/cpu/perf_event_intel.c | 35 ++-
arch/x86/kernel/cpu/perf_event_intel_ds.c | 182 ++++++++++++-
arch/x86/kernel/cpu/perf_event_intel_uncore.c | 2 +-
include/linux/perf_event.h | 5 +
include/uapi/linux/perf_event.h | 71 ++++-
kernel/events/core.c | 15 ++
tools/perf/Documentation/perf-mem.txt | 48 ++++
tools/perf/Documentation/perf-record.txt | 6 +
tools/perf/Documentation/perf-report.txt | 2 +-
tools/perf/Documentation/perf-top.txt | 2 +-
tools/perf/Makefile | 1 +
tools/perf/builtin-annotate.c | 2 +-
tools/perf/builtin-diff.c | 7 +-
tools/perf/builtin-mem.c | 242 +++++++++++++++++
tools/perf/builtin-record.c | 2 +
tools/perf/builtin-report.c | 145 ++++++++++-
tools/perf/builtin-top.c | 5 +-
tools/perf/builtin.h | 1 +
tools/perf/command-list.txt | 1 +
tools/perf/perf.c | 1 +
tools/perf/perf.h | 1 +
tools/perf/util/event.h | 2 +
tools/perf/util/evsel.c | 19 ++
tools/perf/util/hist.c | 101 +++++++-
tools/perf/util/hist.h | 21 +-
tools/perf/util/machine.c | 10 +-
tools/perf/util/session.c | 44 ++++
tools/perf/util/session.h | 4 +
tools/perf/util/sort.c | 346 ++++++++++++++++++++++++-
tools/perf/util/sort.h | 12 +-
tools/perf/util/symbol-elf.c | 3 +
tools/perf/util/symbol.h | 6 +
35 files changed, 1406 insertions(+), 68 deletions(-)
create mode 100644 tools/perf/Documentation/perf-mem.txt
create mode 100644 tools/perf/builtin-mem.c
--
1.7.9.5
next reply other threads:[~2013-01-24 15:11 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-24 15:10 Stephane Eranian [this message]
2013-01-24 15:10 ` [PATCH v7 01/18] perf, x86: Support CPU specific sysfs events Stephane Eranian
2013-01-25 12:16 ` [tip:perf/x86] perf/x86: " tip-bot for Andi Kleen
2013-04-02 9:38 ` [tip:perf/core] " tip-bot for Andi Kleen
2013-01-24 15:10 ` [PATCH v7 02/18] perf/x86: improve sysfs event mapping with event string Stephane Eranian
2013-01-25 12:17 ` [tip:perf/x86] perf/x86: Improve " tip-bot for Stephane Eranian
2013-04-02 9:39 ` [tip:perf/core] " tip-bot for Stephane Eranian
2013-01-24 15:10 ` [PATCH v7 03/18] perf/x86: add flags to event constraints Stephane Eranian
2013-01-25 12:18 ` [tip:perf/x86] perf/x86: Add " tip-bot for Stephane Eranian
2013-04-02 9:40 ` [tip:perf/core] " tip-bot for Stephane Eranian
2013-01-24 15:10 ` [PATCH v7 04/18] perf, core: Add a concept of a weightened sample v2 Stephane Eranian
2013-01-25 12:20 ` [tip:perf/x86] perf/core: Add weighted samples tip-bot for Andi Kleen
2013-04-02 9:42 ` [tip:perf/core] " tip-bot for Andi Kleen
2013-01-24 15:10 ` [PATCH v7 05/18] perf, tools: Add support for weight v7 (modified) Stephane Eranian
2013-04-02 9:49 ` [tip:perf/core] perf " tip-bot for Andi Kleen
2013-01-24 15:10 ` [PATCH v7 06/18] perf: add support for PERF_SAMPLE_ADDR in dump_sampple() Stephane Eranian
2013-01-24 15:10 ` [PATCH v7 07/18] perf: add generic memory sampling interface Stephane Eranian
2013-01-25 9:01 ` Ingo Molnar
2013-01-25 15:30 ` Stephane Eranian
2013-01-29 10:37 ` Michael Ellerman
2013-02-15 19:46 ` Sukadev Bhattiprolu
2013-02-16 2:45 ` Benjamin Herrenschmidt
2013-02-16 8:41 ` Ingo Molnar
2013-02-16 14:14 ` Stephane Eranian
2013-01-25 12:21 ` [tip:perf/x86] perf: Add " tip-bot for Stephane Eranian
2013-04-02 9:43 ` [tip:perf/core] " tip-bot for Stephane Eranian
2013-01-24 15:10 ` [PATCH v7 08/18] perf/x86: add memory profiling via PEBS Load Latency Stephane Eranian
2013-01-25 12:22 ` [tip:perf/x86] perf/x86: Add " tip-bot for Stephane Eranian
2013-04-02 9:44 ` [tip:perf/core] " tip-bot for Stephane Eranian
2013-01-24 15:10 ` [PATCH v7 09/18] perf/x86: export PEBS load latency threshold register to sysfs Stephane Eranian
2013-01-25 12:23 ` [tip:perf/x86] perf/x86: Export " tip-bot for Stephane Eranian
2013-04-02 9:45 ` [tip:perf/core] " tip-bot for Stephane Eranian
2013-01-24 15:10 ` [PATCH v7 10/18] perf/x86: add support for PEBS Precise Store Stephane Eranian
2013-01-25 12:24 ` [tip:perf/x86] perf/x86: Add " tip-bot for Stephane Eranian
2013-04-02 9:47 ` [tip:perf/core] " tip-bot for Stephane Eranian
2013-01-24 15:10 ` [PATCH v7 11/18] perf tools: add mem access sampling core support Stephane Eranian
2013-03-27 14:14 ` Jiri Olsa
2013-03-27 14:20 ` Peter Zijlstra
2013-03-27 14:34 ` Jiri Olsa
2013-03-27 14:48 ` Stephane Eranian
2013-03-27 16:56 ` Arnaldo Carvalho de Melo
2013-03-28 14:24 ` Stephane Eranian
2013-03-28 15:00 ` Arnaldo Carvalho de Melo
2013-03-28 15:06 ` Stephane Eranian
2013-03-28 15:12 ` Arnaldo Carvalho de Melo
2013-03-28 15:15 ` Stephane Eranian
2013-03-27 14:23 ` Jiri Olsa
2013-04-02 9:50 ` [tip:perf/core] perf tools: Add " tip-bot for Stephane Eranian
2013-01-24 15:10 ` [PATCH v7 12/18] perf report: add support for mem access profiling Stephane Eranian
2013-04-02 9:53 ` [tip:perf/core] perf report: Add " tip-bot for Stephane Eranian
2013-01-24 15:10 ` [PATCH v7 13/18] perf record: add " Stephane Eranian
2013-04-02 9:51 ` [tip:perf/core] perf record: Add " tip-bot for Stephane Eranian
2013-01-24 15:10 ` [PATCH v7 14/18] perf tools: add new mem command for memory " Stephane Eranian
2013-04-02 9:55 ` [tip:perf/core] perf tools: Add " tip-bot for Stephane Eranian
2013-01-24 15:10 ` [PATCH v7 15/18] perf: add PERF_RECORD_MISC_MMAP_DATA to RECORD_MMAP Stephane Eranian
2013-01-25 12:25 ` [tip:perf/x86] perf: Add " tip-bot for Stephane Eranian
2013-04-02 9:48 ` [tip:perf/core] " tip-bot for Stephane Eranian
2013-01-24 15:10 ` [PATCH v7 16/18] perf tools: detect data vs. text mappings Stephane Eranian
2013-04-02 9:57 ` [tip:perf/core] perf machine: Detect " tip-bot for Stephane Eranian
2013-01-24 15:10 ` [PATCH v7 17/18] perf tools: Ignore ABS symbols when loading data maps Stephane Eranian
2013-01-24 15:10 ` [PATCH v7 18/18] perf tools: Fix output of symbol_daddr offset Stephane Eranian
2013-04-02 9:58 ` [tip:perf/core] " tip-bot for Namhyung Kim
2013-01-25 8:55 ` [PATCH v7 00/18] perf: add memory access sampling support Ingo Molnar
2013-01-25 15:28 ` Stephane Eranian
2013-01-25 10:38 ` Ingo Molnar
2013-02-05 13:03 ` Stephane Eranian
2013-02-05 15:35 ` Arnaldo Carvalho de Melo
2013-02-06 13:24 ` Ingo Molnar
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=1359040242-8269-1-git-send-email-eranian@google.com \
--to=eranian@google.com \
--cc=acme@redhat.com \
--cc=ak@linux.intel.com \
--cc=jolsa@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=namhyung.kim@lge.com \
--cc=peterz@infradead.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.