|
@@ -91,6 +91,14 @@ struct perf_c2c {
|
|
|
enum {
|
|
|
DISPLAY_LCL,
|
|
|
DISPLAY_RMT,
|
|
|
+ DISPLAY_TOT,
|
|
|
+ DISPLAY_MAX,
|
|
|
+};
|
|
|
+
|
|
|
+static const char *display_str[DISPLAY_MAX] = {
|
|
|
+ [DISPLAY_LCL] = "Local",
|
|
|
+ [DISPLAY_RMT] = "Remote",
|
|
|
+ [DISPLAY_TOT] = "Total",
|
|
|
};
|
|
|
|
|
|
static struct perf_c2c c2c;
|
|
@@ -745,6 +753,10 @@ static double percent_hitm(struct c2c_hist_entry *c2c_he)
|
|
|
case DISPLAY_LCL:
|
|
|
st = stats->lcl_hitm;
|
|
|
tot = total->lcl_hitm;
|
|
|
+ break;
|
|
|
+ case DISPLAY_TOT:
|
|
|
+ st = stats->tot_hitm;
|
|
|
+ tot = total->tot_hitm;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
@@ -1044,6 +1056,9 @@ node_entry(struct perf_hpp_fmt *fmt __maybe_unused, struct perf_hpp *hpp,
|
|
|
break;
|
|
|
case DISPLAY_LCL:
|
|
|
DISPLAY_HITM(lcl_hitm);
|
|
|
+ break;
|
|
|
+ case DISPLAY_TOT:
|
|
|
+ DISPLAY_HITM(tot_hitm);
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
@@ -1351,6 +1366,7 @@ static struct c2c_dimension dim_tot_loads = {
|
|
|
static struct c2c_header percent_hitm_header[] = {
|
|
|
[DISPLAY_LCL] = HEADER_BOTH("Lcl", "Hitm"),
|
|
|
[DISPLAY_RMT] = HEADER_BOTH("Rmt", "Hitm"),
|
|
|
+ [DISPLAY_TOT] = HEADER_BOTH("Tot", "Hitm"),
|
|
|
};
|
|
|
|
|
|
static struct c2c_dimension dim_percent_hitm = {
|
|
@@ -1794,6 +1810,9 @@ static bool he__display(struct hist_entry *he, struct c2c_stats *stats)
|
|
|
break;
|
|
|
case DISPLAY_RMT:
|
|
|
FILTER_HITM(rmt_hitm);
|
|
|
+ break;
|
|
|
+ case DISPLAY_TOT:
|
|
|
+ FILTER_HITM(tot_hitm);
|
|
|
default:
|
|
|
break;
|
|
|
};
|
|
@@ -1809,8 +1828,9 @@ static inline int valid_hitm_or_store(struct hist_entry *he)
|
|
|
bool has_hitm;
|
|
|
|
|
|
c2c_he = container_of(he, struct c2c_hist_entry, he);
|
|
|
- has_hitm = c2c.display == DISPLAY_LCL ?
|
|
|
- c2c_he->stats.lcl_hitm : c2c_he->stats.rmt_hitm;
|
|
|
+ has_hitm = c2c.display == DISPLAY_TOT ? c2c_he->stats.tot_hitm :
|
|
|
+ c2c.display == DISPLAY_LCL ? c2c_he->stats.lcl_hitm :
|
|
|
+ c2c_he->stats.rmt_hitm;
|
|
|
return has_hitm || c2c_he->stats.store;
|
|
|
}
|
|
|
|
|
@@ -2095,7 +2115,7 @@ static void print_c2c_info(FILE *out, struct perf_session *session)
|
|
|
first = false;
|
|
|
}
|
|
|
fprintf(out, " Cachelines sort on : %s HITMs\n",
|
|
|
- c2c.display == DISPLAY_LCL ? "Local" : "Remote");
|
|
|
+ display_str[c2c.display]);
|
|
|
fprintf(out, " Cacheline data grouping : %s\n", c2c.cl_sort);
|
|
|
}
|
|
|
|
|
@@ -2250,7 +2270,7 @@ static int perf_c2c_browser__title(struct hist_browser *browser,
|
|
|
"Shared Data Cache Line Table "
|
|
|
"(%lu entries, sorted on %s HITMs)",
|
|
|
browser->nr_non_filtered_entries,
|
|
|
- c2c.display == DISPLAY_LCL ? "local" : "remote");
|
|
|
+ display_str[c2c.display]);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -2387,9 +2407,11 @@ static int setup_callchain(struct perf_evlist *evlist)
|
|
|
|
|
|
static int setup_display(const char *str)
|
|
|
{
|
|
|
- const char *display = str ?: "rmt";
|
|
|
+ const char *display = str ?: "tot";
|
|
|
|
|
|
- if (!strcmp(display, "rmt"))
|
|
|
+ if (!strcmp(display, "tot"))
|
|
|
+ c2c.display = DISPLAY_TOT;
|
|
|
+ else if (!strcmp(display, "rmt"))
|
|
|
c2c.display = DISPLAY_RMT;
|
|
|
else if (!strcmp(display, "lcl"))
|
|
|
c2c.display = DISPLAY_LCL;
|
|
@@ -2474,6 +2496,8 @@ static int setup_coalesce(const char *coalesce, bool no_source)
|
|
|
return -1;
|
|
|
|
|
|
if (asprintf(&c2c.cl_resort, "offset,%s",
|
|
|
+ c2c.display == DISPLAY_TOT ?
|
|
|
+ "tot_hitm" :
|
|
|
c2c.display == DISPLAY_RMT ?
|
|
|
"rmt_hitm,lcl_hitm" :
|
|
|
"lcl_hitm,rmt_hitm") < 0)
|
|
@@ -2520,7 +2544,7 @@ static int perf_c2c__report(int argc, const char **argv)
|
|
|
"print_type,threshold[,print_limit],order,sort_key[,branch],value",
|
|
|
callchain_help, &parse_callchain_opt,
|
|
|
callchain_default_opt),
|
|
|
- OPT_STRING('d', "display", &display, NULL, "lcl,rmt"),
|
|
|
+ OPT_STRING('d', "display", &display, "Switch HITM output type", "lcl,rmt"),
|
|
|
OPT_STRING('c', "coalesce", &coalesce, "coalesce fields",
|
|
|
"coalesce fields: pid,tid,iaddr,dso"),
|
|
|
OPT_BOOLEAN('f', "force", &symbol_conf.force, "don't complain, do it"),
|
|
@@ -2608,6 +2632,7 @@ static int perf_c2c__report(int argc, const char **argv)
|
|
|
"tot_loads,"
|
|
|
"ld_fbhit,ld_l1hit,ld_l2hit,"
|
|
|
"ld_lclhit,ld_rmthit",
|
|
|
+ c2c.display == DISPLAY_TOT ? "tot_hitm" :
|
|
|
c2c.display == DISPLAY_LCL ? "lcl_hitm" : "rmt_hitm"
|
|
|
);
|
|
|
|