perf c2c: Add metrics "RMT Load Hit"
The metrics "LLC Ld Miss" and "Load Dram" overlap with each other for accouting items: "LLC Ld Miss" = "lcl_dram" + "rmt_dram" + "rmt_hit" + "rmt_hitm" "Load Dram" = "lcl_dram" + "rmt_dram" Furthermore, the metrics "LLC Ld Miss" is not directive to show statistics due to it contains summary value and cannot give out breakdown details. For this reason, add a new metrics "RMT Load Hit" which is used to present the remote cache hit; it contains two items: "RMT Load Hit" = remote hit ("rmt_hit") + remote hitm ("rmt_hitm") As result, the metrics "LLC Ld Miss" is perfectly divided into two metrics "RMT Load Hit" and "Load Dram". It's not necessary to keep metrics "LLC Ld Miss", so remove it. Before: # ----------- Cacheline ---------- Tot ------- Load Hitm ------- Total Total Total ---- Stores ---- ----- Core Load Hit ----- - LLC Load Hit -- LLC --- Load Dram ---- # Index Address Node PA cnt Hitm Total LclHitm RmtHitm records Loads Stores L1Hit L1Miss FB L1 L2 LclHit LclHitm Ld Miss Lcl Rmt # ..... .................. .... ...... ....... ....... ....... ....... ....... ....... ....... ....... ....... ....... ....... ....... ........ ....... ....... ........ ........ # 0 0x55f07d580100 0 1499 85.89% 481 481 0 7243 3879 3364 2599 765 548 2615 66 169 481 0 0 0 1 0x55f07d580080 0 1 13.93% 78 78 0 664 664 0 0 0 187 361 27 11 78 0 0 0 2 0x55f07d5800c0 0 1 0.18% 1 1 0 405 405 0 0 0 131 0 10 263 1 0 0 0 After: # ----------- Cacheline ---------- Tot ------- Load Hitm ------- Total Total Total ---- Stores ---- ----- Core Load Hit ----- - LLC Load Hit -- - RMT Load Hit -- --- Load Dram ---- # Index Address Node PA cnt Hitm Total LclHitm RmtHitm records Loads Stores L1Hit L1Miss FB L1 L2 LclHit LclHitm RmtHit RmtHitm Lcl Rmt # ..... .................. .... ...... ....... ....... ....... ....... ....... ....... ....... ....... ....... ....... ....... ....... ........ ....... ........ ....... ........ ........ # 0 0x55f07d580100 0 1499 85.89% 481 481 0 7243 3879 3364 2599 765 548 2615 66 169 481 0 0 0 0 1 0x55f07d580080 0 1 13.93% 78 78 0 664 664 0 0 0 187 361 27 11 78 0 0 0 0 2 0x55f07d5800c0 0 1 0.18% 1 1 0 405 405 0 0 0 131 0 10 263 1 0 0 0 0 Signed-off-by: Leo Yan <leo.yan@linaro.org> Tested-by: Joe Mario <jmario@redhat.com> Acked-by: Jiri Olsa <jolsa@redhat.com> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Link: https://lore.kernel.org/r/20201014050921.5591-9-leo.yan@linaro.org
This commit is contained in:
Родитель
77c158698c
Коммит
91d933c221
|
@ -652,45 +652,6 @@ STAT_FN(ld_l2hit)
|
|||
STAT_FN(ld_llchit)
|
||||
STAT_FN(rmt_hit)
|
||||
|
||||
static uint64_t llc_miss(struct c2c_stats *stats)
|
||||
{
|
||||
uint64_t llcmiss;
|
||||
|
||||
llcmiss = stats->lcl_dram +
|
||||
stats->rmt_dram +
|
||||
stats->rmt_hitm +
|
||||
stats->rmt_hit;
|
||||
|
||||
return llcmiss;
|
||||
}
|
||||
|
||||
static int
|
||||
ld_llcmiss_entry(struct perf_hpp_fmt *fmt, struct perf_hpp *hpp,
|
||||
struct hist_entry *he)
|
||||
{
|
||||
struct c2c_hist_entry *c2c_he;
|
||||
int width = c2c_width(fmt, hpp, he->hists);
|
||||
|
||||
c2c_he = container_of(he, struct c2c_hist_entry, he);
|
||||
|
||||
return scnprintf(hpp->buf, hpp->size, "%*lu", width,
|
||||
llc_miss(&c2c_he->stats));
|
||||
}
|
||||
|
||||
static int64_t
|
||||
ld_llcmiss_cmp(struct perf_hpp_fmt *fmt __maybe_unused,
|
||||
struct hist_entry *left, struct hist_entry *right)
|
||||
{
|
||||
struct c2c_hist_entry *c2c_left;
|
||||
struct c2c_hist_entry *c2c_right;
|
||||
|
||||
c2c_left = container_of(left, struct c2c_hist_entry, he);
|
||||
c2c_right = container_of(right, struct c2c_hist_entry, he);
|
||||
|
||||
return (uint64_t) llc_miss(&c2c_left->stats) -
|
||||
(uint64_t) llc_miss(&c2c_right->stats);
|
||||
}
|
||||
|
||||
static uint64_t total_records(struct c2c_stats *stats)
|
||||
{
|
||||
uint64_t lclmiss, ldcnt, total;
|
||||
|
@ -1440,21 +1401,13 @@ static struct c2c_dimension dim_ld_llchit = {
|
|||
};
|
||||
|
||||
static struct c2c_dimension dim_ld_rmthit = {
|
||||
.header = HEADER_SPAN_LOW("Rmt"),
|
||||
.header = HEADER_SPAN("- RMT Load Hit --", "RmtHit", 1),
|
||||
.name = "ld_rmthit",
|
||||
.cmp = rmt_hit_cmp,
|
||||
.entry = rmt_hit_entry,
|
||||
.width = 8,
|
||||
};
|
||||
|
||||
static struct c2c_dimension dim_ld_llcmiss = {
|
||||
.header = HEADER_BOTH("LLC", "Ld Miss"),
|
||||
.name = "ld_llcmiss",
|
||||
.cmp = ld_llcmiss_cmp,
|
||||
.entry = ld_llcmiss_entry,
|
||||
.width = 7,
|
||||
};
|
||||
|
||||
static struct c2c_dimension dim_tot_recs = {
|
||||
.header = HEADER_BOTH("Total", "records"),
|
||||
.name = "tot_recs",
|
||||
|
@ -1658,7 +1611,6 @@ static struct c2c_dimension *dimensions[] = {
|
|||
&dim_ld_l2hit,
|
||||
&dim_ld_llchit,
|
||||
&dim_ld_rmthit,
|
||||
&dim_ld_llcmiss,
|
||||
&dim_tot_recs,
|
||||
&dim_tot_loads,
|
||||
&dim_percent_hitm,
|
||||
|
@ -2854,7 +2806,7 @@ static int perf_c2c__report(int argc, const char **argv)
|
|||
"stores_l1hit,stores_l1miss,"
|
||||
"ld_fbhit,ld_l1hit,ld_l2hit,"
|
||||
"ld_lclhit,lcl_hitm,"
|
||||
"ld_llcmiss,"
|
||||
"ld_rmthit,rmt_hitm,"
|
||||
"dram_lcl,dram_rmt",
|
||||
c2c.display == DISPLAY_TOT ? "tot_hitm" :
|
||||
c2c.display == DISPLAY_LCL ? "lcl_hitm" : "rmt_hitm"
|
||||
|
|
Загрузка…
Ссылка в новой задаче