From patchwork Wed Nov 17 14:20:02 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: German Gomez X-Patchwork-Id: 12692907 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 591ACC433F5 for ; Wed, 17 Nov 2021 14:22:05 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 1723D61BE3 for ; Wed, 17 Nov 2021 14:22:05 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 1723D61BE3 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:Cc :To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=IMxWwzCHgUtkYv0rySo/NGN0RrilspH3zrmRf9Sl8kY=; b=egRvv3NT5NGucs NiF0yun11dzjOxaSG0CyIol+d3N/LC//eLQoXcGwQCDK3wywbzAvObK5AaceCRTnSr6bciXuKoVbh JurRkX/LiZl0AzSmJKwlF8tE6CGMmrxZHjINOrt0SZwa5GJgiZ1nwLF2+XzBAC4qsd3lOBN2LvoBG fAcscLK1yNUlWefP38SwWczNnMrjDCMhrERLwAOQDFcQsIJ+k10k6/LTBE7Lihgv3TuEBLl27hOlc 8+3LEqtCFwLVNnuXe67FRLoUQehWW8lbObsIDdnZkb7D8YwncBemoAxjzqMiULndL2nxlp3kd65Z2 Q2HLpSIkEdq8Bsu6lqIA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mnLnZ-0055Rp-4z; Wed, 17 Nov 2021 14:20:29 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mnLnU-0055RB-LZ for linux-arm-kernel@lists.infradead.org; Wed, 17 Nov 2021 14:20:26 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id B5F7A1FB; Wed, 17 Nov 2021 06:20:20 -0800 (PST) Received: from ip-10-252-15-108.eu-west-1.compute.internal (unknown [10.252.15.108]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 882403F70D; Wed, 17 Nov 2021 06:20:18 -0800 (PST) From: German Gomez To: linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, acme@kernel.org Cc: James Clark , German Gomez , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , John Garry , Will Deacon , Mathieu Poirier , Leo Yan , linux-arm-kernel@lists.infradead.org Subject: [PATCH 1/1] perf arm-spe: report all SPE records as "all" events Date: Wed, 17 Nov 2021 14:20:02 +0000 Message-Id: <20211117142002.226339-1-german.gomez@arm.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211117_062024_849528_FE5ED592 X-CRM114-Status: GOOD ( 14.61 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: James Clark Currently perf-report and perf-inject are dropping a large number of SPE records because they don't contain any of the existing events, but the contextual information of the records is still useful to keep. The synthesized event "all" is generated for every SPE record that is processed, regardless of whether the record contains interesting events or not. The event can be filtered with the flag "--itrace=o". Signed-off-by: James Clark Signed-off-by: German Gomez Change-Id: Ie8169d61df6dc90e5abec7a29c1a5a8510790a1f --- tools/perf/Documentation/itrace.txt | 2 +- tools/perf/util/arm-spe.c | 36 +++++++++++++++++++++++++++++ tools/perf/util/auxtrace.h | 2 +- 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/tools/perf/Documentation/itrace.txt b/tools/perf/Documentation/itrace.txt index c52755481..57dc12b83 100644 --- a/tools/perf/Documentation/itrace.txt +++ b/tools/perf/Documentation/itrace.txt @@ -6,7 +6,7 @@ w synthesize ptwrite events p synthesize power events (incl. PSB events for Intel PT) o synthesize other events recorded due to the use - of aux-output (refer to perf record) + of aux-output (refer to perf record) (all events for Arm SPE) e synthesize error events d create a debug log f synthesize first level cache events diff --git a/tools/perf/util/arm-spe.c b/tools/perf/util/arm-spe.c index ce77abf90..6428351db 100644 --- a/tools/perf/util/arm-spe.c +++ b/tools/perf/util/arm-spe.c @@ -58,6 +58,7 @@ struct arm_spe { u8 sample_branch; u8 sample_remote_access; u8 sample_memory; + u8 sample_other; u64 l1d_miss_id; u64 l1d_access_id; @@ -68,6 +69,7 @@ struct arm_spe { u64 branch_miss_id; u64 remote_access_id; u64 memory_id; + u64 all_id; u64 kernel_start; @@ -351,6 +353,23 @@ static int arm_spe__synth_branch_sample(struct arm_spe_queue *speq, return arm_spe_deliver_synth_event(spe, speq, event, &sample); } +static int arm_spe__synth_other_sample(struct arm_spe_queue *speq, + u64 spe_events_id) +{ + struct arm_spe *spe = speq->spe; + struct arm_spe_record *record = &speq->decoder->record; + union perf_event *event = speq->event_buf; + struct perf_sample sample = { .ip = 0, }; + + arm_spe_prep_sample(spe, speq, event, &sample); + + sample.id = spe_events_id; + sample.stream_id = spe_events_id; + sample.addr = record->to_ip; + + return arm_spe_deliver_synth_event(spe, speq, event, &sample); +} + #define SPE_MEM_TYPE (ARM_SPE_L1D_ACCESS | ARM_SPE_L1D_MISS | \ ARM_SPE_LLC_ACCESS | ARM_SPE_LLC_MISS | \ ARM_SPE_REMOTE_ACCESS) @@ -480,6 +499,12 @@ static int arm_spe_sample(struct arm_spe_queue *speq) return err; } + if (spe->sample_other) { + err = arm_spe__synth_other_sample(speq, spe->all_id); + if (err) + return err; + } + return 0; } @@ -1107,6 +1132,17 @@ arm_spe_synth_events(struct arm_spe *spe, struct perf_session *session) return err; spe->memory_id = id; arm_spe_set_event_name(evlist, id, "memory"); + id += 1; + } + + if (spe->synth_opts.other_events) { + spe->sample_other = true; + + err = arm_spe_synth_event(session, &attr, id); + if (err) + return err; + spe->all_id = id; + arm_spe_set_event_name(evlist, id, "all"); } return 0; diff --git a/tools/perf/util/auxtrace.h b/tools/perf/util/auxtrace.h index bbf0d78c6..efe1bdc06 100644 --- a/tools/perf/util/auxtrace.h +++ b/tools/perf/util/auxtrace.h @@ -74,7 +74,7 @@ enum itrace_period_type { * @ptwrites: whether to synthesize events for ptwrites * @pwr_events: whether to synthesize power events * @other_events: whether to synthesize other events recorded due to the use of - * aux_output + * aux_output (all events for Arm SPE) * @errors: whether to synthesize decoder error events * @dont_decode: whether to skip decoding entirely * @log: write a decoding log