[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <90c18a64-4de6-a251-13d2-e6671a04c398@oracle.com>
Date: Mon, 7 Aug 2023 13:07:49 +0100
From: John Garry <john.g.garry@...cle.com>
To: Ilkka Koskinen <ilkka@...amperecomputing.com>,
Ian Rogers <irogers@...gle.com>
Cc: Arnaldo Carvalho de Melo <acme@...nel.org>,
Will Deacon <will@...nel.org>,
James Clark <james.clark@....com>,
Mike Leach <mike.leach@...aro.org>,
Leo Yan <leo.yan@...aro.org>,
Peter Zijlstra <peterz@...radead.org>,
Ingo Molnar <mingo@...hat.com>,
Mark Rutland <mark.rutland@....com>,
Alexander Shishkin <alexander.shishkin@...ux.intel.com>,
Jiri Olsa <jolsa@...nel.org>,
Namhyung Kim <namhyung@...nel.org>,
Adrian Hunter <adrian.hunter@...el.com>,
linux-kernel@...r.kernel.org, linux-arm-kernel@...ts.infradead.org,
linux-perf-users@...r.kernel.org,
Dave Kleikamp <dave.kleikamp@...cle.com>
Subject: Re: [PATCH 3/4] perf vendor events arm64: Add AmpereOne metrics
On 04/08/2023 20:59, Ilkka Koskinen wrote:
>
> Hi John
>
> On Fri, 4 Aug 2023, John Garry wrote:
>> On 03/08/2023 22:13, Ilkka Koskinen wrote:
>>> This patch adds AmpereOne metrics. The metrics also work around
>>> the issue related to some of the events.
Would these events be any metrics added which are not a "Topdown"? I
guess no, since there are many, but I just don't know.
>>
>> Just curious, are these events/metrics described in some
>> publically-available document?
>
> I quickly checked that and there are a spreadsheet and a document
> available, which list the supported PMUs, their events and metrics in
> the customer connect website but that requires registering.
>
OK, thanks for the info. I ask is it always worthwhile mentioning a link
in the changelog if publicly available.
Just a few minor comments:
On 03/08/2023 22:13, Ilkka Koskinen wrote:
> This patch adds AmpereOne metrics. The metrics also work around
> the issue related to some of the events.
>
> Signed-off-by: Ilkka Koskinen <ilkka@...amperecomputing.com>
> ---
> .../arch/arm64/ampere/ampereone/metrics.json | 362 ++++++++++++++++++
> 1 file changed, 362 insertions(+)
>
...
> + {
> + "MetricExpr": "CRYPTO_SPEC / OP_SPEC",
> + "BriefDescription": "Proportion of crypto data processing operations",
> + "MetricGroup": "Instruction",
> + "MetricName": "Crypto mix"
> + },
> + {
> + "MetricExpr": "VFP_SPEC / (duration_time *1000000000)",
> + "BriefDescription": "Giga-floating point operations per second",
> + "MetricGroup": "Instruction",
> + "MetricName": "GFLOPS_ISSUED"
> + },
> + {
> + "MetricExpr": "DP_SPEC / OP_SPEC",
> + "BriefDescription": "Proportion of integer data processing operations",
> + "MetricGroup": "Instruction",
> + "MetricName": "Integer mix"
> + },
> + {
> + "MetricExpr": "INST_RETIRED / CPU_CYCLES",
> + "BriefDescription": "Instructions per cycle",
> + "MetricGroup": "Instruction",
> + "MetricName": "IPC"
> + },
> + {
> + "MetricExpr": "LD_SPEC / OP_SPEC",
> + "BriefDescription": "Proportion of load operations",
> + "MetricGroup": "Instruction",
> + "MetricName": "Load mix"
> + },
> + {
> + "MetricExpr": "LDST_SPEC/ OP_SPEC",
mega nit: missing whitespace before '/'
> + "BriefDescription": "Proportion of load & store operations",
> + "MetricGroup": "Instruction",
> + "MetricName": "Load-store mix"
> + },
> + {
> + "MetricExpr": "INST_RETIRED / (duration_time * 1000000)",
I think that we may use 1e6 here for shorthand - it helps avoid mistakes
with too few or many '0's :)
> + "BriefDescription": "Millions of instructions per second",
> + "MetricGroup": "Instruction",
> + "MetricName": "MIPS_RETIRED"
> + },
> + {
> + "MetricExpr": "INST_SPEC / (duration_time * 1000000)",
> + "BriefDescription": "Millions of instructions per second",
> + "MetricGroup": "Instruction",
> + "MetricName": "MIPS_UTILIZATION"
> + },
> + {
> + "MetricExpr": "PC_WRITE_SPEC / OP_SPEC",
> + "BriefDescription": "Proportion of software change of PC operations",
> + "MetricGroup": "Instruction",
> + "MetricName": "PC write mix"
> + },
> + {
> + "MetricExpr": "ST_SPEC / OP_SPEC",
> + "BriefDescription": "Proportion of store operations",
> + "MetricGroup": "Instruction",
> + "MetricName": "Store mix"
> + },
> + {
> + "MetricExpr": "VFP_SPEC / OP_SPEC",
> + "BriefDescription": "Proportion of FP operations",
> + "MetricGroup": "Instruction",
> + "MetricName": "VFP mix"
> + },
> + {
> + "MetricExpr": "1 - (OP_RETIRED/ (CPU_CYCLES * 4))",
> + "BriefDescription": "Proportion of slots lost",
> + "MetricGroup": "Speculation / TDA",
> + "MetricName": "CPU lost"
> + },
> + {
> + "MetricExpr": "OP_RETIRED/ (CPU_CYCLES * 4)",
> + "BriefDescription": "Proportion of slots retiring",
> + "MetricGroup": "Speculation / TDA",
> + "MetricName": "CPU utilization"
> + },
> + {
> + "MetricExpr": "OP_RETIRED - OP_SPEC",
> + "BriefDescription": "Operations lost due to misspeculation",
> + "MetricGroup": "Speculation / TDA",
> + "MetricName": "Operations lost"
> + },
> + {
> + "MetricExpr": "1 - (OP_RETIRED / OP_SPEC)",
> + "BriefDescription": "Proportion of operations lost",
> + "MetricGroup": "Speculation / TDA",
> + "MetricName": "Operations lost (ratio)"
> + },
> + {
> + "MetricExpr": "OP_RETIRED / OP_SPEC",
> + "BriefDescription": "Proportion of operations retired",
> + "MetricGroup": "Speculation / TDA",
> + "MetricName": "Operations retired"
> + },
> + {
> + "MetricExpr": "STALL_BACKEND_CACHE / CPU_CYCLES",
> + "BriefDescription": "Proportion of cycles stalled and no operations
issued to backend and cache miss",
> + "MetricGroup": "Stall",
> + "MetricName": "Stall backend cache cycles"
> + },
> + {
> + "MetricExpr": "STALL_BACKEND_RESOURCE / CPU_CYCLES",
> + "BriefDescription": "Proportion of cycles stalled and no operations
issued to backend and resource full",
> + "MetricGroup": "Stall",
> + "MetricName": "Stall backend resource cycles"
> + },
> + {
> + "MetricExpr": "STALL_BACKEND_TLB / CPU_CYCLES",
> + "BriefDescription": "Proportion of cycles stalled and no operations
issued to backend and TLB miss",
> + "MetricGroup": "Stall",
> + "MetricName": "Stall backend tlb cycles"
> + },
> + {
> + "MetricExpr": "STALL_FRONTEND_CACHE / CPU_CYCLES",
> + "BriefDescription": "Proportion of cycles stalled and no ops
delivered from frontend and cache miss",
> + "MetricGroup": "Stall",
> + "MetricName": "Stall frontend cache cycles"
> + },
> + {
> + "MetricExpr": "STALL_FRONTEND_TLB / CPU_CYCLES",
> + "BriefDescription": "Proportion of cycles stalled and no ops
delivered from frontend and TLB miss",
> + "MetricGroup": "Stall",
> + "MetricName": "Stall frontend tlb cycles"
> + },
> + {
> + "MetricExpr": "DTLB_WALK / L1D_TLB",
> + "BriefDescription": "D-side walk per d-side translation request",
> + "MetricGroup": "TLB",
> + "MetricName": "DTLB walks"
> + },
> + {
> + "MetricExpr": "ITLB_WALK / L1I_TLB",
> + "BriefDescription": "I-side walk per i-side translation request",
> + "MetricGroup": "TLB",
> + "MetricName": "ITLB walks"
> + },
> + {
> + "MetricExpr": "STALL_SLOT_BACKEND / (CPU_CYCLES * 4)",
> + "BriefDescription": "Fraction of slots backend bound",
> + "MetricGroup": "TopDownL1",
@Ian, should this be "Default;TopDownL1"?
> + "MetricName": "backend"
How about use consistent names with other other archs and arm64
platforms, like "backend_bound"? I did not check all names, but please
consider this.
If 'perf topdown' is ever supported for arm64, we would prob rely on
metricgroups, so would need use a fixed standard name here. Note that
x86 uses custom kernel events for this instead.
> + },
> + {
> + "MetricExpr": "1 - (retiring + lost + backend)",
> + "BriefDescription": "Fraction of slots frontend bound",
> + "MetricGroup": "TopDownL1",
> + "MetricName": "frontend"
As above, it would be "frontend_bound"
> + },
> + {
> + "MetricExpr": "((OP_SPEC - OP_RETIRED) / (CPU_CYCLES * 4))",
> + "BriefDescription": "Fraction of slots lost due to
misspeculation",
> + "MetricGroup": "TopDownL1",
> + "MetricName": "lost"
> + },
> + {
Powered by blists - more mailing lists