mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 04:34:03 +02:00
perf jevents: Add context switch metrics for Intel
Metrics break down context switches for different kinds of instruction. Signed-off-by: Ian Rogers <irogers@google.com> Tested-by: Thomas Falcon <thomas.falcon@intel.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Benjamin Gray <bgray@linux.ibm.com> Cc: Caleb Biggers <caleb.biggers@intel.com> Cc: Edward Baker <edward.baker@intel.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: James Clark <james.clark@linaro.org> Cc: Jing Zhang <renyu.zj@linux.alibaba.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: John Garry <john.g.garry@oracle.com> Cc: Leo Yan <leo.yan@arm.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Perry Taylor <perry.taylor@intel.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Sandipan Das <sandipan.das@amd.com> Cc: Weilin Wang <weilin.wang@intel.com> Cc: Xu Yang <xu.yang_2@nxp.com> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
59341f4e17
commit
2f3d6ea05d
|
|
@ -263,6 +263,63 @@ def IntelBr():
|
|||
description="breakdown of retired branch instructions")
|
||||
|
||||
|
||||
def IntelCtxSw() -> MetricGroup:
|
||||
cs = Event("context\\-switches")
|
||||
metrics = [
|
||||
Metric("lpm_cs_rate", "Context switches per second",
|
||||
d_ratio(cs, interval_sec), "ctxsw/s")
|
||||
]
|
||||
|
||||
ev = Event("instructions")
|
||||
metrics.append(Metric("lpm_cs_instr", "Instructions per context switch",
|
||||
d_ratio(ev, cs), "instr/cs"))
|
||||
|
||||
ev = Event("cycles")
|
||||
metrics.append(Metric("lpm_cs_cycles", "Cycles per context switch",
|
||||
d_ratio(ev, cs), "cycles/cs"))
|
||||
|
||||
try:
|
||||
ev = Event("MEM_INST_RETIRED.ALL_LOADS", "MEM_UOPS_RETIRED.ALL_LOADS")
|
||||
metrics.append(Metric("lpm_cs_loads", "Loads per context switch",
|
||||
d_ratio(ev, cs), "loads/cs"))
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
ev = Event("MEM_INST_RETIRED.ALL_STORES",
|
||||
"MEM_UOPS_RETIRED.ALL_STORES")
|
||||
metrics.append(Metric("lpm_cs_stores", "Stores per context switch",
|
||||
d_ratio(ev, cs), "stores/cs"))
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
ev = Event("BR_INST_RETIRED.NEAR_TAKEN", "BR_INST_RETIRED.TAKEN_JCC")
|
||||
metrics.append(Metric("lpm_cs_br_taken", "Branches taken per context switch",
|
||||
d_ratio(ev, cs), "br_taken/cs"))
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
l2_misses = (Event("L2_RQSTS.DEMAND_DATA_RD_MISS") +
|
||||
Event("L2_RQSTS.RFO_MISS") +
|
||||
Event("L2_RQSTS.CODE_RD_MISS"))
|
||||
try:
|
||||
l2_misses += Event("L2_RQSTS.HWPF_MISS",
|
||||
"L2_RQSTS.L2_PF_MISS", "L2_RQSTS.PF_MISS")
|
||||
except:
|
||||
pass
|
||||
|
||||
metrics.append(Metric("lpm_cs_l2_misses", "L2 misses per context switch",
|
||||
d_ratio(l2_misses, cs), "l2_misses/cs"))
|
||||
except:
|
||||
pass
|
||||
|
||||
return MetricGroup("lpm_cs", metrics,
|
||||
description=("Number of context switches per second, instructions "
|
||||
"retired & core cycles between context switches"))
|
||||
|
||||
|
||||
def IntelIlp() -> MetricGroup:
|
||||
tsc = Event("msr/tsc/")
|
||||
c0 = Event("msr/mperf/")
|
||||
|
|
@ -678,6 +735,7 @@ def main() -> None:
|
|||
Smi(),
|
||||
Tsx(),
|
||||
IntelBr(),
|
||||
IntelCtxSw(),
|
||||
IntelIlp(),
|
||||
IntelL2(),
|
||||
IntelLdSt(),
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user