[PATCH 11/23] perf mem: Add Intel DATALA memory events

From: Jiri Olsa
Date: Mon Feb 15 2016 - 03:38:56 EST


Adding Intel DATALA memory events into
perf mem record command:

$ perf mem record -e list
[ok] ldlat-loads
[ok] ldlat-stores
stlb-miss-loads
stlb-miss-stores
lock-loads
split-loads
split-stores
all-loads
all-stores
l1-hit
l2-hit
l3-hit
l1-miss
l2-miss
l3-miss
lfb
snp-miss
snp-hit
snp-hitm
snp-none
local-dram

All events from above lists are compiled in, but only
those with [ok] are supported by kernel/HW. You need
previous DATALA patch to support all of them.

Link: http://lkml.kernel.org/n/tip-cximteb8r1a6750wz8sgeajh@xxxxxxxxxxxxxx
Signed-off-by: Jiri Olsa <jolsa@xxxxxxxxxx>
---
tools/perf/util/mem-events.c | 19 +++++++++++++++++++
tools/perf/util/mem-events.h | 19 +++++++++++++++++++
2 files changed, 38 insertions(+)

diff --git a/tools/perf/util/mem-events.c b/tools/perf/util/mem-events.c
index 3772a3a8a6ee..92d3bc9914e6 100644
--- a/tools/perf/util/mem-events.c
+++ b/tools/perf/util/mem-events.c
@@ -16,6 +16,25 @@ unsigned int perf_mem_events__loads_ldlat = 30;
struct perf_mem_event perf_mem_events[PERF_MEM_EVENTS__MAX] = {
E("ldlat-loads", "cpu/mem-loads,ldlat=%u/P", "mem-loads"),
E("ldlat-stores", "cpu/mem-stores/P", "mem-stores"),
+ E("stlb-miss-loads", "cpu/mem-stlb-miss-loads/P", "mem-stlb-miss-loads"),
+ E("stlb-miss-stores", "cpu/mem-stlb-miss-stores/P", "mem-stlb-miss-stores"),
+ E("lock-loads", "cpu/mem-lock-loads/P", "mem-lock-loads"),
+ E("split-loads", "cpu/mem-split-loads/P", "mem-split-loads"),
+ E("split-stores", "cpu/mem-split-stores/P", "mem-split-stores"),
+ E("all-loads", "cpu/mem-all-loads/P", "mem-all-loads"),
+ E("all-stores", "cpu/mem-all-stores/P", "mem-all-stores"),
+ E("l1-hit", "cpu/mem-load-l1-hit/P", "mem-load-l1-hit"),
+ E("l2-hit", "cpu/mem-load-l2-hit/P", "mem-load-l2-hit"),
+ E("l3-hit", "cpu/mem-load-l3-hit/P", "mem-load-l3-hit"),
+ E("l1-miss", "cpu/mem-load-l1-miss/P", "mem-load-l1-miss"),
+ E("l2-miss", "cpu/mem-load-l2-miss/P", "mem-load-l2-miss"),
+ E("l3-miss", "cpu/mem-load-l3-miss/P", "mem-load-l3-miss"),
+ E("lfb", "cpu/mem-load-hit-lfb/P", "mem-load-hit-lfb"),
+ E("snp-miss", "cpu/mem-snp-miss/P", "mem-snp-miss"),
+ E("snp-hit", "cpu/mem-snp-hit/P", "mem-snp-hit"),
+ E("snp-hitm", "cpu/mem-snp-hitm/P", "mem-snp-hitm"),
+ E("snp-none", "cpu/mem-snp-none/P", "mem-snp-none"),
+ E("local-dram", "cpu/mem-local-dram/P", "mem-local-dram"),
};
#undef E

diff --git a/tools/perf/util/mem-events.h b/tools/perf/util/mem-events.h
index d690907f7e50..4abf606b256b 100644
--- a/tools/perf/util/mem-events.h
+++ b/tools/perf/util/mem-events.h
@@ -14,6 +14,25 @@ struct perf_mem_event {
enum {
PERF_MEM_EVENTS__LOAD,
PERF_MEM_EVENTS__STORE,
+ PERF_MEM_EVENTS__STLB_MISS_LOADS,
+ PERF_MEM_EVENTS__STLB_MISS_STORES,
+ PERF_MEM_EVENTS__LOCK_LOADS,
+ PERF_MEM_EVENTS__SPLIT_LOADS,
+ PERF_MEM_EVENTS__SPLIT_STORES,
+ PERF_MEM_EVENTS__ALL_LOADS,
+ PERF_MEM_EVENTS__ALL_STORES,
+ PERF_MEM_EVENTS__L1_HIT,
+ PERF_MEM_EVENTS__L2_HIT,
+ PERF_MEM_EVENTS__L3_HIT,
+ PERF_MEM_EVENTS__L1_MISS,
+ PERF_MEM_EVENTS__L2_MISS,
+ PERF_MEM_EVENTS__L3_MISS,
+ PERF_MEM_EVENTS__LFB,
+ PERF_MEM_EVENTS__SNP_MISS,
+ PERF_MEM_EVENTS__SNP_HIT,
+ PERF_MEM_EVENTS__SNP_HITM,
+ PERF_MEM_EVENTS__SNP_NONE,
+ PERF_MEM_EVENTS__LOCAL_DRAM,
PERF_MEM_EVENTS__MAX,
};

--
2.4.3