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 <[email protected]>
Tested-by: Joe Mario <[email protected]>
---
 tools/perf/builtin-c2c.c | 52 ++--------------------------------------
 1 file changed, 2 insertions(+), 50 deletions(-)

diff --git a/tools/perf/builtin-c2c.c b/tools/perf/builtin-c2c.c
index 61fb939a4e70..9c2183957c50 100644
--- a/tools/perf/builtin-c2c.c
+++ b/tools/perf/builtin-c2c.c
@@ -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"
-- 
2.17.1

Reply via email to