mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-05 09:36:39 -04:00
perf jevents: Add ports metric group giving utilization on Intel
The ports metric group contains a metric for each port giving its utilization as a ratio of cycles. The metrics are created by looking for UOPS_DISPATCHED.PORT events. 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:
committed by
Arnaldo Carvalho de Melo
parent
397fdb3a24
commit
cd1c6a4874
@@ -1,12 +1,14 @@
|
||||
#!/usr/bin/env python3
|
||||
# SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
|
||||
import argparse
|
||||
import json
|
||||
import math
|
||||
import os
|
||||
import re
|
||||
from typing import Optional
|
||||
from metric import (d_ratio, has_event, max, CheckPmu, Event, JsonEncodeMetric,
|
||||
JsonEncodeMetricGroupDescriptions, LoadEvents, Metric,
|
||||
MetricGroup, MetricRef, Select)
|
||||
JsonEncodeMetricGroupDescriptions, Literal, LoadEvents,
|
||||
Metric, MetricGroup, MetricRef, Select)
|
||||
|
||||
# Global command line arguments.
|
||||
_args = None
|
||||
@@ -261,6 +263,34 @@ def IntelBr():
|
||||
description="breakdown of retired branch instructions")
|
||||
|
||||
|
||||
def IntelPorts() -> Optional[MetricGroup]:
|
||||
pipeline_events = json.load(
|
||||
open(f"{_args.events_path}/x86/{_args.model}/pipeline.json"))
|
||||
|
||||
core_cycles = Event("CPU_CLK_UNHALTED.THREAD_P_ANY",
|
||||
"CPU_CLK_UNHALTED.DISTRIBUTED",
|
||||
"cycles")
|
||||
# Number of CPU cycles scaled for SMT.
|
||||
smt_cycles = Select(core_cycles / 2, Literal("#smt_on"), core_cycles)
|
||||
|
||||
metrics = []
|
||||
for x in pipeline_events:
|
||||
if "EventName" in x and re.search("^UOPS_DISPATCHED.PORT", x["EventName"]):
|
||||
name = x["EventName"]
|
||||
port = re.search(r"(PORT_[0-9].*)", name).group(0).lower()
|
||||
if name.endswith("_CORE"):
|
||||
cyc = core_cycles
|
||||
else:
|
||||
cyc = smt_cycles
|
||||
metrics.append(Metric(f"lpm_{port}", f"{port} utilization (higher is better)",
|
||||
d_ratio(Event(name), cyc), "100%"))
|
||||
if len(metrics) == 0:
|
||||
return None
|
||||
|
||||
return MetricGroup("lpm_ports", metrics, "functional unit (port) utilization -- "
|
||||
"fraction of cycles each port is utilized (higher is better)")
|
||||
|
||||
|
||||
def IntelSwpf() -> Optional[MetricGroup]:
|
||||
ins = Event("instructions")
|
||||
try:
|
||||
@@ -356,6 +386,7 @@ def main() -> None:
|
||||
Smi(),
|
||||
Tsx(),
|
||||
IntelBr(),
|
||||
IntelPorts(),
|
||||
IntelSwpf(),
|
||||
])
|
||||
|
||||
|
||||
Reference in New Issue
Block a user