Re: [PATCH 1/1] perf arm-spe: Inject SPE samples in perf-inject
From: Arnaldo Carvalho de Melo <acme@kernel.org>
Date: 2021-11-17 15:29:49
Also in:
linux-perf-users, lkml
Em Mon, Nov 08, 2021 at 08:39:58PM +0000, James Clark escreveu:
On 05/11/2021 10:41, German Gomez wrote:quoted
Inject synthesized SPE samples during perf-inject run. Signed-off-by: German Gomez <redacted>Reviewed-by: James Clark <redacted>
Next time please expand this explanations a bit more: why should we inject such samples? Is this enabling some new mode of operation, fixing something, what is an example of output before this patch and after it? - Arnaldo
quoted
--- tools/perf/util/arm-spe.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+)diff --git a/tools/perf/util/arm-spe.c b/tools/perf/util/arm-spe.c index 58b7069c5..7054f2315 100644 --- a/tools/perf/util/arm-spe.c +++ b/tools/perf/util/arm-spe.c@@ -51,6 +51,7 @@ struct arm_spe { u8 timeless_decoding; u8 data_queued; + u64 sample_type; u8 sample_flc; u8 sample_llc; u8 sample_tlb;@@ -248,6 +249,12 @@ static void arm_spe_prep_sample(struct arm_spe *spe, event->sample.header.size = sizeof(struct perf_event_header); } +static int arm_spe__inject_event(union perf_event *event, struct perf_sample *sample, u64 type) +{ + event->header.size = perf_event__sample_event_size(sample, type, 0); + return perf_event__synthesize_sample(event, type, 0, sample); +} + static inline int arm_spe_deliver_synth_event(struct arm_spe *spe, struct arm_spe_queue *speq __maybe_unused,@@ -256,6 +263,12 @@ arm_spe_deliver_synth_event(struct arm_spe *spe, { int ret; + if (spe->synth_opts.inject) { + ret = arm_spe__inject_event(event, sample, spe->sample_type); + if (ret) + return ret; + } + ret = perf_session__deliver_synth_event(spe->session, event, sample); if (ret) pr_err("ARM SPE: failed to deliver event, error %d\n", ret);@@ -920,6 +933,8 @@ arm_spe_synth_events(struct arm_spe *spe, struct perf_session *session) else attr.sample_type |= PERF_SAMPLE_TIME; + spe->sample_type = attr.sample_type; + attr.exclude_user = evsel->core.attr.exclude_user; attr.exclude_kernel = evsel->core.attr.exclude_kernel; attr.exclude_hv = evsel->core.attr.exclude_hv;
-- - Arnaldo _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel