From nobody Tue Apr 28 06:32:15 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A26A3C43334 for ; Sat, 4 Jun 2022 04:46:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1350532AbiFDEqq (ORCPT ); Sat, 4 Jun 2022 00:46:46 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38468 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1350499AbiFDEqn (ORCPT ); Sat, 4 Jun 2022 00:46:43 -0400 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2048.outbound.protection.outlook.com [40.107.237.48]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D083657B39; Fri, 3 Jun 2022 21:46:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UEPwTlpuWN/808HyQ8gmr7pOBr5mzK47Ll3bNlyVv5h7TuHa7adiyyqUz/ZPbQaAZqK3aNYaddPTsm8bWQ3dKTg+gyU+3Gg/GawiCMNTK5wTThaK8T2QqcCBV2XmCTZ0CAV4B7Xu2O7nLfj5TfxbMrfxyMqVCITdE7hN2SvKTr0xuVZVNMuCQ/eBkQZdDLiejrQgs3WAl1XVqXNgYQ+rb73S563DTQbaO20bKMdioo4cuJ0dWk/wS3NcxLcp74UotNFp2i1RJ6bbSg9rFr+Okd3Uu6fYtybqKb7d4JX2wAcLwpgDgZ0prvezF/7LYDkL7u62K+/O7TnNoHTkA55oAw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=QhcZvmFDQ0Z8K8YA1IHRLQ/zT9oPQnpwikZlNDSTCLw=; b=Y2ZwTkk74cAkics9gE50f6gtarwONsNG9Bf75TlN1iExKrMFMUWwACYtkNQKft+lT8mB1tFu/cr1b9pj7EmBOw6dk6JitSXZ06gi5mP9LomKv80S4DLdEN1n3uC2qRmeIve8n4EVJNKuh+UTdxJNw7r31K6ARUGfDLrDtm3qLNNPU6zrUvXqeGaa22oS9cMpgOVrpTaFPqMP9iOrPFGgR3reUdBKAc8Dz5+PSgFqVvjKWLrPrMSCQyeBRh1lPWC97EgLzqTECXGGRecy4MoIiYHUUkZSknqesHYBQfGybKOw0P+lO7lFCnsq1iZsAr7tHZT7cOtG29YnX7AU+kdwwQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=kernel.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QhcZvmFDQ0Z8K8YA1IHRLQ/zT9oPQnpwikZlNDSTCLw=; b=v+4susb4vGJwDHLngq0ZLd+2q4Ni4DbfXAPRgqEXM9PqDB0D6StjvIiSjQwXeQlxw1dl3g3Sgtw0WJ3dEUCzIFWKIxmK7qIDErSTZcQWfJjOffJ2QiXMbftbR/7YSy3nU3kbpsr/DPelDolxhJ9CyKXyXFZmwDTQ92Ox5mIPsbw= Received: from BN6PR13CA0059.namprd13.prod.outlook.com (2603:10b6:404:11::21) by BN6PR12MB1762.namprd12.prod.outlook.com (2603:10b6:404:fe::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5314.12; Sat, 4 Jun 2022 04:46:37 +0000 Received: from BN8NAM11FT061.eop-nam11.prod.protection.outlook.com (2603:10b6:404:11:cafe::eb) by BN6PR13CA0059.outlook.office365.com (2603:10b6:404:11::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5332.7 via Frontend Transport; Sat, 4 Jun 2022 04:46:37 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by BN8NAM11FT061.mail.protection.outlook.com (10.13.177.144) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.5314.12 via Frontend Transport; Sat, 4 Jun 2022 04:46:37 +0000 Received: from BLR-5CG113396H.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.28; Fri, 3 Jun 2022 23:46:25 -0500 From: Ravi Bangoria To: CC: , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v6 1/8] perf record ibs: Warn about sampling period skew Date: Sat, 4 Jun 2022 10:15:12 +0530 Message-ID: <20220604044519.594-2-ravi.bangoria@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220604044519.594-1-ravi.bangoria@amd.com> References: <20220604044519.594-1-ravi.bangoria@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e6715650-1470-44fd-30b7-08da45e535ae X-MS-TrafficTypeDiagnostic: BN6PR12MB1762:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: uYoI0ROe2YD+VnGTOsK1Ejj/qWB0Pj00KXaG/AasEq3aTIeZc+qxrdNxBiP+8Vh1ybLTXZZO3v9etYqVLi8mP/6yPcdGTEzqYxW3Djrh6NKOAEeKZrK7peCCoZGAWn27vxlPPqLCzqSI5CJsTEc5LQjzDmWGm1KfAZbZ8s8HHp//z8aeLa3QRIzm+Qw0WSl9fIiuoeqrzrbbQ8eLZGMutfZ4mgfmPWNO9bi/owesdDqnDEMgmkjr0naUXRnCDw6l+vFIj3jGgKHR22bRwThcr1VGkAiRsXEHEdUMGyNzXPXhJe/PQicxXi9ShfY+wuoB1fVapazTwRbNGEAFANAPbP+haubj7MgmSQMR+VSTeKvcUd1ylWW/RoIcSkJ94G86t/WShQFLMR6KImDz1/DnZ+0D0RJ231nZp8BgvaUDlJ4fYzyfnz2F0BFp2141bMaqU8amOcTdzC1qFeY5Vl1xGM2oMADyTS9TuJOOx1y1xoVSavTJ7X0wuMEd3ck3lj0bnASVBa5I4zTCGNGYCNwG1hhaFbOgzT56P/WykOaJbZsdMCNSKdfkcI3V28mKhp8XkdmjWC+EHIMYsB8eejceb2Yd61WaVc7rEonT8Hhj/U6cZXR5gX+3OQ18gWSwUfE4QronZXemQ9hkX03siO1gqC8+JSXA/Gr6l4nK+wtvJQmya9ccYcqIXZyPgEHC2usFi9d8zYNAFo11oRJWajZAcA== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230001)(4636009)(40470700004)(36840700001)(46966006)(26005)(7416002)(83380400001)(7696005)(508600001)(356005)(5660300002)(4326008)(6666004)(8676002)(2906002)(70206006)(70586007)(44832011)(86362001)(47076005)(8936002)(82310400005)(54906003)(36860700001)(6916009)(81166007)(426003)(336012)(2616005)(36756003)(316002)(40460700003)(1076003)(16526019)(186003)(36900700001);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jun 2022 04:46:37.6000 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e6715650-1470-44fd-30b7-08da45e535ae X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BN8NAM11FT061.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR12MB1762 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Samples without an L3 miss are discarded and counter is reset with random value (between 1-15 for fetch pmu and 1-127 for op pmu) when IBS L3 miss filtering is enabled. This causes a sampling period skew but there is no way to reconstruct aggregated sampling period. So print a warning at perf record if user sets l3missonly=3D1. Ex: # perf record -c 10000 -C 0 -e ibs_op/l3missonly=3D1/ WARNING: Hw internally resets sampling period when L3 Miss Filtering is e= nabled and tagged operation does not cause L3 Miss. This causes sampling period = skew. Signed-off-by: Ravi Bangoria Acked-by: Ian Rogers Acked-by: Namhyung Kim --- tools/perf/arch/x86/util/evsel.c | 52 ++++++++++++++++++++++++++++++++ tools/perf/util/evsel.c | 7 +++++ tools/perf/util/evsel.h | 1 + 3 files changed, 60 insertions(+) diff --git a/tools/perf/arch/x86/util/evsel.c b/tools/perf/arch/x86/util/ev= sel.c index 88306183d629..53763e583804 100644 --- a/tools/perf/arch/x86/util/evsel.c +++ b/tools/perf/arch/x86/util/evsel.c @@ -5,6 +5,10 @@ #include "util/env.h" #include "util/pmu.h" #include "linux/string.h" +#include "util/debug.h" + +#define IBS_FETCH_L3MISSONLY (1ULL << 59) +#define IBS_OP_L3MISSONLY (1ULL << 16) =20 void arch_evsel__set_sample_weight(struct evsel *evsel) { @@ -60,3 +64,51 @@ bool arch_evsel__must_be_in_group(const struct evsel *ev= sel) (!strcasecmp(evsel->name, "slots") || strcasestr(evsel->name, "topdown")); } + +static void ibs_l3miss_warn(void) +{ + pr_warning( +"WARNING: Hw internally resets sampling period when L3 Miss Filtering is e= nabled\n" +"and tagged operation does not cause L3 Miss. This causes sampling period = skew.\n"); +} + +void arch__post_evsel_config(struct evsel *evsel, struct perf_event_attr *= attr) +{ + struct perf_pmu *evsel_pmu, *ibs_fetch_pmu, *ibs_op_pmu; + static int warned_once; + /* 0: Uninitialized, 1: Yes, -1: No */ + static int is_amd; + + if (warned_once || is_amd =3D=3D -1) + return; + + if (!is_amd) { + struct perf_env *env =3D evsel__env(evsel); + + if (!perf_env__cpuid(env) || !env->cpuid || + !strstarts(env->cpuid, "AuthenticAMD")) { + is_amd =3D -1; + return; + } + is_amd =3D 1; + } + + evsel_pmu =3D evsel__find_pmu(evsel); + if (!evsel_pmu) + return; + + ibs_fetch_pmu =3D perf_pmu__find("ibs_fetch"); + ibs_op_pmu =3D perf_pmu__find("ibs_op"); + + if (ibs_fetch_pmu && ibs_fetch_pmu->type =3D=3D evsel_pmu->type) { + if (attr->config & IBS_FETCH_L3MISSONLY) { + ibs_l3miss_warn(); + warned_once =3D 1; + } + } else if (ibs_op_pmu && ibs_op_pmu->type =3D=3D evsel_pmu->type) { + if (attr->config & IBS_OP_L3MISSONLY) { + ibs_l3miss_warn(); + warned_once =3D 1; + } + } +} diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index ce499c5da8d7..8fea51a9cd90 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c @@ -1091,6 +1091,11 @@ void __weak arch_evsel__fixup_new_cycles(struct perf= _event_attr *attr __maybe_un { } =20 +void __weak arch__post_evsel_config(struct evsel *evsel __maybe_unused, + struct perf_event_attr *attr __maybe_unused) +{ +} + static void evsel__set_default_freq_period(struct record_opts *opts, struct perf_event_attr *attr) { @@ -1366,6 +1371,8 @@ void evsel__config(struct evsel *evsel, struct record= _opts *opts, */ if (evsel__is_dummy_event(evsel)) evsel__reset_sample_bit(evsel, BRANCH_STACK); + + arch__post_evsel_config(evsel, attr); } =20 int evsel__set_filter(struct evsel *evsel, const char *filter) diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h index 73ea48e94079..92bed8e2f7d8 100644 --- a/tools/perf/util/evsel.h +++ b/tools/perf/util/evsel.h @@ -297,6 +297,7 @@ void evsel__set_sample_id(struct evsel *evsel, bool use= _sample_identifier); =20 void arch_evsel__set_sample_weight(struct evsel *evsel); void arch_evsel__fixup_new_cycles(struct perf_event_attr *attr); +void arch__post_evsel_config(struct evsel *evsel, struct perf_event_attr *= attr); =20 int evsel__set_filter(struct evsel *evsel, const char *filter); int evsel__append_tp_filter(struct evsel *evsel, const char *filter); --=20 2.31.1 From nobody Tue Apr 28 06:32:15 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C491AC43334 for ; Sat, 4 Jun 2022 04:47:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1350551AbiFDEq7 (ORCPT ); Sat, 4 Jun 2022 00:46:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38834 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1350499AbiFDEq6 (ORCPT ); Sat, 4 Jun 2022 00:46:58 -0400 Received: from NAM02-DM3-obe.outbound.protection.outlook.com (mail-dm3nam02on2082.outbound.protection.outlook.com [40.107.95.82]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 84A3D119; Fri, 3 Jun 2022 21:46:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VtpwUVeBRLs+YHcIclQ/78fb4T/7JGvBKRboA4yRaUlV538vURgYsCsEooFrFdCAk6GRGBbGK0kniqDAw7WnP68P5GLfSsN6ZYDtCR+bfwXHoyHA/dhxFszIEWicBh0cnCGl7eojC+Sx+UK6YrjnKL3ZK/mQP6DnyrRbWacVosr111sniCZI+tGhMOl+S1pa7ThyqL6+WXA3OxWDTe5V6Zcy92shgDOGwl05fY25tdABxer82ImvLdbCDQ5IrYIJ3SANKbvvunzproPylZs2YrutqsVb5rbE6rBRTYtZwMMYx8+OHio8YoDSuEtrtqAr+ETQRUH03nHJ3MeIfTcgDg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Fr0iiCVmUq495iO5pCc3+TXgRDcpM7cEuex7fBd3u9A=; b=cSbSIy86MnG58gwI+ocTTCW1LGwHyuipQBbgEe2mkDDt+NIG6kNTAwc2kEH4SA77qsEVJ3CNIFtrHKhLxra/eeETyL4+efkvT+CUM+2Q+ZNfr3lPdsqnNyTzmh6pCc7XdhNG5IZfbTyN8wBbHnm04wShRp5Me+Xd6DgGmhuEeRu4+jJ8csHSQmTapDqxW7JqU5yGfUVCT6vZGe1T5Pz8OnNQXVVyBtHwcBW2UhmRz3tlekSkNGTVC3mN+gstQ9BpIw6/4w1nQeohD1KwmIDIzvDR8eKHoEmC1uqVsPRzqt61sJOF0jPYIImiq7KK2nfaCOYxRUEpOPFdg4OgENXcOw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=kernel.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Fr0iiCVmUq495iO5pCc3+TXgRDcpM7cEuex7fBd3u9A=; b=shbZpKcNtgldM7CrrI1xs6/Ilbf0ld4xWdWKMSJCSh6kSvtS42gwPiB9w78ec5npxJ5oaUsSS2WD1Sb2oFXvXxESRYVHdwPu7ybaEDaEh/TCe6k5ej3ZcCqFNErAnOFfZzc8LsBM2s4K72kFvOSq62QR2hne7+AaxJFHHxeoyZU= Received: from BN9PR03CA0367.namprd03.prod.outlook.com (2603:10b6:408:f7::12) by MWHPR12MB1598.namprd12.prod.outlook.com (2603:10b6:301:4::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5314.13; Sat, 4 Jun 2022 04:46:48 +0000 Received: from BN8NAM11FT015.eop-nam11.prod.protection.outlook.com (2603:10b6:408:f7:cafe::21) by BN9PR03CA0367.outlook.office365.com (2603:10b6:408:f7::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5314.15 via Frontend Transport; Sat, 4 Jun 2022 04:46:48 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by BN8NAM11FT015.mail.protection.outlook.com (10.13.176.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.5314.12 via Frontend Transport; Sat, 4 Jun 2022 04:46:48 +0000 Received: from BLR-5CG113396H.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.28; Fri, 3 Jun 2022 23:46:37 -0500 From: Ravi Bangoria To: CC: , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v6 2/8] perf tool: Parse pmu caps sysfs only once Date: Sat, 4 Jun 2022 10:15:13 +0530 Message-ID: <20220604044519.594-3-ravi.bangoria@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220604044519.594-1-ravi.bangoria@amd.com> References: <20220604044519.594-1-ravi.bangoria@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 38de83e7-e07d-470a-cb12-08da45e53bf6 X-MS-TrafficTypeDiagnostic: MWHPR12MB1598:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: DhYpPpy/VwQ6yVlFBjVKgpCNQo1Y8Ri4rPQLUbqnaEePy+rYYN4vVxFLs2I29SaPTBR/oEq69nL5ioEHTaFUGFjUZbtEOIjTcsbGKSncKoBkakmUn8rXwIkZq8nibb1HbrpqTyf4DkqsyDUktKR3avXwFmrGG1bngUno+H8h/p6wYbR6uI4aqHvW2FrEdHZbWoHaiRUeH/wFvGOe3J7qe+kBeheEMeRkNNi82ehk713rm0D33KkcPM8AUNvrRkFSYooAQr31qlL/WFdAxClR5QYe5UHxcI9ovROonv5z7ILS7fSMQuLcvWRGwt3IE4JZMGshZQ6LKWBUtnbdKJH8QEo6UeMZNGdnnZeF8GsCjaiviko/8tWTU6qig3e6IOqzJBosz0hS3XTNp/MerDIZUgjhwE964KvWt7hsvT69xBUiHfdSsrFLTKsZEEWgPYlPiQ0Q2rSdCcbTBUqJMUEA3NoSV4m6mwqRkztIvi94COH8xHi4up3jzOfTWGFi44ZNlQkFhzJ4FcHvszawzckk3WjO6xUcPDQHr7mXU1ppL1SXSOraubc2bwoGc0N6mKKpMDKqz36hMweXK4iJocXjFH2+OvryEQ9SNO45ixYl3LWI07Q2BmUwm0pCP7DKfiW4Q1EuPqIJ/KaKZ3G74rkrGLYV1Ibo8AKxPrvMTZrctFUw+Dp8Dc6Xd/tYIjSeQjMXBLXIA2L4qPQxzK574wIvZg== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230001)(4636009)(46966006)(40470700004)(36840700001)(6916009)(86362001)(54906003)(36756003)(316002)(7696005)(1076003)(186003)(6666004)(336012)(426003)(47076005)(2616005)(16526019)(2906002)(82310400005)(83380400001)(7416002)(356005)(5660300002)(4326008)(70206006)(70586007)(8676002)(44832011)(508600001)(40460700003)(81166007)(26005)(8936002)(36860700001)(36900700001);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jun 2022 04:46:48.1578 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 38de83e7-e07d-470a-cb12-08da45e53bf6 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BN8NAM11FT015.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR12MB1598 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" In addition to returning nr_caps, cache it locally in struct perf_pmu. Similarly, cache status of whether caps sysfs has already been parsed or not. These will help to avoid parsing sysfs every time the function gets called. Signed-off-by: Ravi Bangoria Reviewed-by: Kan Liang Acked-by: Namhyung Kim --- tools/perf/util/pmu.c | 15 +++++++++++---- tools/perf/util/pmu.h | 2 ++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index 9a1c7e63e663..0112e1c36418 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -1890,7 +1890,11 @@ int perf_pmu__caps_parse(struct perf_pmu *pmu) const char *sysfs =3D sysfs__mountpoint(); DIR *caps_dir; struct dirent *evt_ent; - int nr_caps =3D 0; + + if (pmu->caps_initialized) + return pmu->nr_caps; + + pmu->nr_caps =3D 0; =20 if (!sysfs) return -1; @@ -1898,8 +1902,10 @@ int perf_pmu__caps_parse(struct perf_pmu *pmu) snprintf(caps_path, PATH_MAX, "%s" EVENT_SOURCE_DEVICE_PATH "%s/caps", sysfs, pmu->name); =20 - if (stat(caps_path, &st) < 0) + if (stat(caps_path, &st) < 0) { + pmu->caps_initialized =3D true; return 0; /* no error if caps does not exist */ + } =20 caps_dir =3D opendir(caps_path); if (!caps_dir) @@ -1926,13 +1932,14 @@ int perf_pmu__caps_parse(struct perf_pmu *pmu) continue; } =20 - nr_caps++; + pmu->nr_caps++; fclose(file); } =20 closedir(caps_dir); =20 - return nr_caps; + pmu->caps_initialized =3D true; + return pmu->nr_caps; } =20 void perf_pmu__warn_invalid_config(struct perf_pmu *pmu, __u64 config, diff --git a/tools/perf/util/pmu.h b/tools/perf/util/pmu.h index 541889fa9f9c..4b45fd8da5a3 100644 --- a/tools/perf/util/pmu.h +++ b/tools/perf/util/pmu.h @@ -46,6 +46,8 @@ struct perf_pmu { struct perf_cpu_map *cpus; struct list_head format; /* HEAD struct perf_pmu_format -> list */ struct list_head aliases; /* HEAD struct perf_pmu_alias -> list */ + bool caps_initialized; + u32 nr_caps; struct list_head caps; /* HEAD struct perf_pmu_caps -> list */ struct list_head list; /* ELEM */ struct list_head hybrid_list; --=20 2.31.1 From nobody Tue Apr 28 06:32:15 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id EC98AC433EF for ; Sat, 4 Jun 2022 04:47:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1350564AbiFDErU (ORCPT ); Sat, 4 Jun 2022 00:47:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39150 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243476AbiFDErE (ORCPT ); Sat, 4 Jun 2022 00:47:04 -0400 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2050.outbound.protection.outlook.com [40.107.223.50]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4E2B05F96; Fri, 3 Jun 2022 21:47:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=P2GmZnRC/wdkAQK3Qq7oT+PXKuTJ4oeeKukpEszeztIOfIiLFywR9atTYF0Ma6ZkQ7Ej6q0J5hTOQ2Ez46GNgD1qRUmPYBYmaaq0SCnbCYOKcOamiQWAHU4m/YTniKWaiI6HXjQEnVCiUYV7CesLCCXizKtnMkAPENHFbrMLFVHBJjwrxisqyWZI6RoYuhCZ+7EdFBsF9Vw5ISQj5veXFpBs6WgHbmfdQmt9DgKXSEZmNuHNkSECkR8xCBNjNjxmi4MIhc8uSNHWubv4Z6rYEoyKrbRDrCMoCsRWsWd6nkWUCSZzq2erxHGH8Mp/30jvhNT6xoQFEohN8KvM5mt75w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=amvyUMxva0+w/ZyK1icK4hFjU3FTlT0cdfQKQyrwyGk=; b=XxqxbAaA1CrlPUutyal9CjW6r963qw3nnqo+gH0Vm7hBc3Ux/46I+Wqf27v7iQHW9CaTByfDvip2PjNaAUZu/HLayjoGY1JoRWzDOEEkmtvYM9H2WG9hCBg052I8CSV2kw6fL+ElLAl4eeQSHJjuj5OXjW5b8P/3iLFe5iFPtoyNwEN1epdBeJwl1vai6LVSs0jAB712aUGuc/BQbj1ehwu7GtmPEG17KccV+fRgKg5qrUHSXaVnKmUhF6OEuxsGaMr5clGoCnewCLTNI2DYbdV5bQ1933OkQhG+MTmoJqEZfkNeUzuNttG2daQTQZSKH7zZLTSZnNhKrXakQ7cRuA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=kernel.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=amvyUMxva0+w/ZyK1icK4hFjU3FTlT0cdfQKQyrwyGk=; b=Vk1W+0yMrbKnQuu6GSssZDSB5McNeosNs/QTigl5PwauVbZzDE0N8Blehl/hRoFWOBLUC8XpjUzbAdbPeyRxsXgfLvZIaFwW+z+wIuEqpd6yBKyHZ3RMLctT1P6R9Lf/Q36tSQBy5s/X89lBsrSLYXLsytkkBwAJKtvm6oeqxEo= Received: from BN1PR13CA0003.namprd13.prod.outlook.com (2603:10b6:408:e2::8) by DM4PR12MB5309.namprd12.prod.outlook.com (2603:10b6:5:390::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5314.13; Sat, 4 Jun 2022 04:47:00 +0000 Received: from BN8NAM11FT010.eop-nam11.prod.protection.outlook.com (2603:10b6:408:e2:cafe::8f) by BN1PR13CA0003.outlook.office365.com (2603:10b6:408:e2::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5332.7 via Frontend Transport; Sat, 4 Jun 2022 04:47:00 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by BN8NAM11FT010.mail.protection.outlook.com (10.13.177.53) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.5314.12 via Frontend Transport; Sat, 4 Jun 2022 04:47:00 +0000 Received: from BLR-5CG113396H.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.28; Fri, 3 Jun 2022 23:46:47 -0500 From: Ravi Bangoria To: CC: , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v6 3/8] perf headers: Pass "cpu" pmu name while printing caps Date: Sat, 4 Jun 2022 10:15:14 +0530 Message-ID: <20220604044519.594-4-ravi.bangoria@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220604044519.594-1-ravi.bangoria@amd.com> References: <20220604044519.594-1-ravi.bangoria@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3fff4ced-d6a8-44cf-9b34-08da45e54334 X-MS-TrafficTypeDiagnostic: DM4PR12MB5309:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: qzvekSdF4ZiQKrlXYs0p4Cv5FKJ9dqYzJwhC18aZlzF6oforHMimNfFF9kc4L8/nQPB5IpFsQ462bCKH4QJ0ASnCWdQK54tGrrFYdq3SdcMKOaBXPn530XQjguoMtY1NW52B/9kqDAD6YYJXi/E2IqTsPh1uW3aaP8lkHk5qTUHtCrtxwwMbGMDpr4MQ58TIeT5J1o0j7wChuIxUa5pAiFDQzFsORwwLwmG1B7t9lXj3wdCuK57JhUFLGTLDj9UVEGzT4IpCaOxthJUVqtnq8+PsdMjxxyjMYLsRt81KFOLPlR8ZIMYiIfuIj6xup9ZbLa3Bs3/Sqg0qmpUotKWr0qnJVRounKVhlWxfvDtU8zx3dM5poxZL9xk/myKmlgoC6FhT4BuMxHwvzZNaBF+9tNmy2cmosEOy+B3MmexNsOq2nzUlUG1eFUHXuh1R+4kshg8edu2ab6/RIW789uRMLI/Qw0agSsypo/2tcmWdsra6CfqP4sqQy8rbIQUJNM7MnvbpcUQUkYHi00Dj8g8UEXB9KHCryYah1bseW/C1J7Xjf04tsG+V0Fn/rSDUfKuwkrYh4qX7hO27zbDRDLa2La9tPyUgu71HbZhQPquK8xLPHuLs5krFHWXYDYhd7FFaf6o5PZzJFTFrLt6OLAGNzyFpDZXLTTgc6nHIz7IannEhJL2Htdk2q2fFnvQWp8e8GHZQUMqxTispa2JAlBdAcg== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230001)(4636009)(36840700001)(46966006)(40470700004)(2906002)(336012)(186003)(16526019)(426003)(44832011)(4326008)(40460700003)(1076003)(8676002)(8936002)(7416002)(6666004)(83380400001)(508600001)(81166007)(7696005)(5660300002)(316002)(47076005)(356005)(36756003)(36860700001)(6916009)(26005)(54906003)(2616005)(70206006)(70586007)(86362001)(82310400005)(36900700001);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jun 2022 04:47:00.2913 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3fff4ced-d6a8-44cf-9b34-08da45e54334 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BN8NAM11FT010.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB5309 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Avoid unnecessary conditional code to check if pmu name is NULL or not by passing "cpu" pmu name to the printing function. Signed-off-by: Ravi Bangoria Reviewed-by: Kan Liang Acked-by: Namhyung Kim --- tools/perf/util/header.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index 53332da100e8..ee7ccd94e272 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c @@ -2058,17 +2058,11 @@ static void print_per_cpu_pmu_caps(FILE *fp, int nr= _caps, char *cpu_pmu_caps, char *str, buf[128]; =20 if (!nr_caps) { - if (!pmu_name) - fprintf(fp, "# cpu pmu capabilities: not available\n"); - else - fprintf(fp, "# %s pmu capabilities: not available\n", pmu_name); + fprintf(fp, "# %s pmu capabilities: not available\n", pmu_name); return; } =20 - if (!pmu_name) - scnprintf(buf, sizeof(buf), "# cpu pmu capabilities: "); - else - scnprintf(buf, sizeof(buf), "# %s pmu capabilities: ", pmu_name); + scnprintf(buf, sizeof(buf), "# %s pmu capabilities: ", pmu_name); =20 delimiter =3D buf; =20 @@ -2085,7 +2079,7 @@ static void print_per_cpu_pmu_caps(FILE *fp, int nr_c= aps, char *cpu_pmu_caps, static void print_cpu_pmu_caps(struct feat_fd *ff, FILE *fp) { print_per_cpu_pmu_caps(fp, ff->ph->env.nr_cpu_pmu_caps, - ff->ph->env.cpu_pmu_caps, NULL); + ff->ph->env.cpu_pmu_caps, (char *)"cpu"); } =20 static void print_hybrid_cpu_pmu_caps(struct feat_fd *ff, FILE *fp) --=20 2.31.1 From nobody Tue Apr 28 06:32:15 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4B7A2CCA482 for ; Sat, 4 Jun 2022 04:47:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1350581AbiFDEre (ORCPT ); Sat, 4 Jun 2022 00:47:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39914 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1350565AbiFDErY (ORCPT ); Sat, 4 Jun 2022 00:47:24 -0400 Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1anam02on2069.outbound.protection.outlook.com [40.107.96.69]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 44E915FB7; Fri, 3 Jun 2022 21:47:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kwBcUPlQ/MWdWSrwT/SLPXSFQls3CxFOf7VZTlrKmjI71pTI4XlsdjkPeWc5KdAGL5y68Z94qoY/N2aSjNZmHwLZ3kuGzUM/iJAUO8er5lEJPj7faTHOMBmMI9DBQMZpOi3D13vPAjaANPzQqwLBMRibPTk7Ltn7AHJJTNla2H3rEwmVpvHqk214txD6VidHu9M+n3O5x9siQQVYrY1vRBSrs9AD1I2sVsojows0/EaK7cA9FH5C5tc0xjnf86qfW3iRWz78PexIGWYEkU2lOMVEFmzzWGVBmjOFDvK6vgI2DbTk6W2ubNPv/3HtPpiPgaCQmbQPj3SfX4L6b8MGag== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=tudASsyNH8zVWWhLw0GXyRDg0DBMFqv8tI1ynr4Q45I=; b=HTQgKYJpxAAdzZWREVeLk7v+e9VHgITPbByHbT1y9LbaJvUWknxab+Pv39YzlCjpg7ONg+gNcffL+KuIqFbJ067y1elWWt6JmqLWB8lBkBevcmdvLQrgrN3cBPiLW+Sdr+Ej6WfWXGxCfedu2nz4YVakiIeg25Q9gAozwG0ceFlgQ4GGBZ0/pGtOFQ2xtjpYEurtN+DcqR5fIAWNDaisP9egy22V5yrPCBt1s+RkF2XclmXA+k6rRFW/W6130w5yxL6PHF4KXu8FEdeTcOABUBhI78c9W++1N0gEyOI1yTYgAkJwk+JMtL+85IawzguLkhWjDQ+y7Trl6swsyofLGQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=kernel.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tudASsyNH8zVWWhLw0GXyRDg0DBMFqv8tI1ynr4Q45I=; b=RTXZf0rbxqi61hS6ugj3V1sAhULaDSM4bh+PG8ZlGx3SITg86I8sjvaUpi3loWYXJ73klFkL1+2w2UmyDCY/NfqZetetk6kh0+KAEsmNihhSXWdynA+b2O5lOH9ot7aszZ4bBFhowBHwQqXLeywHVogh5jRX6JdiPgp+zfII5kA= Received: from BN9PR03CA0948.namprd03.prod.outlook.com (2603:10b6:408:108::23) by BYAPR12MB3333.namprd12.prod.outlook.com (2603:10b6:a03:a9::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5314.15; Sat, 4 Jun 2022 04:47:11 +0000 Received: from BN8NAM11FT026.eop-nam11.prod.protection.outlook.com (2603:10b6:408:108:cafe::b7) by BN9PR03CA0948.outlook.office365.com (2603:10b6:408:108::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5314.16 via Frontend Transport; Sat, 4 Jun 2022 04:47:10 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by BN8NAM11FT026.mail.protection.outlook.com (10.13.177.51) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.5314.12 via Frontend Transport; Sat, 4 Jun 2022 04:47:10 +0000 Received: from BLR-5CG113396H.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.28; Fri, 3 Jun 2022 23:47:00 -0500 From: Ravi Bangoria To: CC: , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v6 4/8] perf headers: Store pmu caps in an array of strings Date: Sat, 4 Jun 2022 10:15:15 +0530 Message-ID: <20220604044519.594-5-ravi.bangoria@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220604044519.594-1-ravi.bangoria@amd.com> References: <20220604044519.594-1-ravi.bangoria@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 992c9320-3e6e-44d0-0678-08da45e54964 X-MS-TrafficTypeDiagnostic: BYAPR12MB3333:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: GuYtJJW07jG/ZXfVX0QNUF1ftIJVmMjUOz0u8sq3lkHefcqydygKXxi7NmINSSWCWFAJig54P0bskZeCJyLW+ob7u+fbWFieZotIZiMK479W3TUmXld+VW62lYD29F5juMiaafY/a+fcxCNsSLB6D4QqLQyyv+f3yvm5d7V5nZz361iTHiH/Tp69g2+c9fXyic32C5NH5ZEYsPYyeuhx9j473EOctVmYbMdXf865VLJ9uwkrFJupoxFpZitXXJsXyUz1tY/FsRvpYvoauOSGy5BU7oHvVsgeDXfQFLsDtiOLV9qWfd9IV/zfePDsFSL8gQs5xq2IGFoojuTlmP3kG3ug8KH4CsYKPrA4Bn2gEse0Uf+lg/X0ToVIfk+H+6UR+ORls+436S67VSayHpFeQj0L0N4I/R9Ma9cxhUSr/9OyImQvHJL+26Bd/5PvlBRAAxOV//1JWu+QcrMthtotc8r8JyQED/rwUpKtXC0vSbXl9Mx98TXFHOJGAjEvhgnzA38LDXE/PeWgeFHWQGjhkbm8WEwU3TST4UrbZvtc1lDPnHNagmnk2rkOeTEzm3/7Lb0CjPR6/a5ZdAr3FSk4idQ54kK9xmezVulonW3rraETxlqAw/rioHS3xMwehnxrRcihhBAq+5mUogezkwQiI6QFxS4ki2+iYWKulnn+16mLhKmuOTMiG8DNjGFvPj6WiMjMZowH6JmxnQFhnQGoQA== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230001)(4636009)(36840700001)(40470700004)(46966006)(16526019)(36860700001)(7416002)(83380400001)(54906003)(6666004)(7696005)(5660300002)(316002)(36756003)(82310400005)(1076003)(70586007)(47076005)(70206006)(2616005)(26005)(426003)(186003)(336012)(44832011)(4326008)(40460700003)(8676002)(356005)(81166007)(2906002)(508600001)(6916009)(86362001)(8936002)(36900700001);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jun 2022 04:47:10.6684 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 992c9320-3e6e-44d0-0678-08da45e54964 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BN8NAM11FT026.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR12MB3333 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Currently all capabilities are stored in a single string separated by NULL character. Instead, store them in an array which makes searching of capability easier. Signed-off-by: Ravi Bangoria Reviewed-by: Kan Liang Acked-by: Namhyung Kim --- tools/perf/util/env.c | 6 +++- tools/perf/util/env.h | 4 +-- tools/perf/util/header.c | 63 ++++++++++++++++++++++------------------ 3 files changed, 41 insertions(+), 32 deletions(-) diff --git a/tools/perf/util/env.c b/tools/perf/util/env.c index 579e44c59914..7d3aeb2e4622 100644 --- a/tools/perf/util/env.c +++ b/tools/perf/util/env.c @@ -179,7 +179,7 @@ static void perf_env__purge_bpf(struct perf_env *env __= maybe_unused) =20 void perf_env__exit(struct perf_env *env) { - int i; + int i, j; =20 perf_env__purge_bpf(env); perf_env__purge_cgroups(env); @@ -196,6 +196,8 @@ void perf_env__exit(struct perf_env *env) zfree(&env->sibling_threads); zfree(&env->pmu_mappings); zfree(&env->cpu); + for (i =3D 0; i < env->nr_cpu_pmu_caps; i++) + zfree(&env->cpu_pmu_caps[i]); zfree(&env->cpu_pmu_caps); zfree(&env->numa_map); =20 @@ -218,6 +220,8 @@ void perf_env__exit(struct perf_env *env) zfree(&env->hybrid_nodes); =20 for (i =3D 0; i < env->nr_hybrid_cpc_nodes; i++) { + for (j =3D 0; j < env->hybrid_cpc_nodes[i].nr_cpu_pmu_caps; j++) + zfree(&env->hybrid_cpc_nodes[i].cpu_pmu_caps[j]); zfree(&env->hybrid_cpc_nodes[i].cpu_pmu_caps); zfree(&env->hybrid_cpc_nodes[i].pmu_name); } diff --git a/tools/perf/util/env.h b/tools/perf/util/env.h index a3541f98e1fc..43aab59f7322 100644 --- a/tools/perf/util/env.h +++ b/tools/perf/util/env.h @@ -46,7 +46,7 @@ struct hybrid_node { struct hybrid_cpc_node { int nr_cpu_pmu_caps; unsigned int max_branches; - char *cpu_pmu_caps; + char **cpu_pmu_caps; char *pmu_name; }; =20 @@ -81,7 +81,7 @@ struct perf_env { char *sibling_dies; char *sibling_threads; char *pmu_mappings; - char *cpu_pmu_caps; + char **cpu_pmu_caps; struct cpu_topology_map *cpu; struct cpu_cache_level *caches; int caches_cnt; diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index ee7ccd94e272..ca5b1f03810d 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c @@ -2051,26 +2051,21 @@ static void print_compressed(struct feat_fd *ff, FI= LE *fp) ff->ph->env.comp_level, ff->ph->env.comp_ratio); } =20 -static void print_per_cpu_pmu_caps(FILE *fp, int nr_caps, char *cpu_pmu_ca= ps, +static void print_per_cpu_pmu_caps(FILE *fp, int nr_caps, char **cpu_pmu_c= aps, char *pmu_name) { - const char *delimiter; - char *str, buf[128]; + const char *delimiter =3D ""; + int i; =20 if (!nr_caps) { fprintf(fp, "# %s pmu capabilities: not available\n", pmu_name); return; } =20 - scnprintf(buf, sizeof(buf), "# %s pmu capabilities: ", pmu_name); - - delimiter =3D buf; - - str =3D cpu_pmu_caps; - while (nr_caps--) { - fprintf(fp, "%s%s", delimiter, str); + fprintf(fp, "# %s pmu capabilities: ", pmu_name); + for (i =3D 0; i < nr_caps; i++) { + fprintf(fp, "%s%s", delimiter, cpu_pmu_caps[i]); delimiter =3D ", "; - str +=3D strlen(str) + 1; } =20 fprintf(fp, "\n"); @@ -3202,27 +3197,26 @@ static int process_compressed(struct feat_fd *ff, } =20 static int process_per_cpu_pmu_caps(struct feat_fd *ff, int *nr_cpu_pmu_ca= ps, - char **cpu_pmu_caps, + char ***cpu_pmu_caps, unsigned int *max_branches) { - char *name, *value; - struct strbuf sb; - u32 nr_caps; + char *name, *value, *ptr; + u32 nr_caps, i; + + *nr_cpu_pmu_caps =3D 0; + *cpu_pmu_caps =3D NULL; =20 if (do_read_u32(ff, &nr_caps)) return -1; =20 - if (!nr_caps) { - pr_debug("cpu pmu capabilities not available\n"); + if (!nr_caps) return 0; - } - - *nr_cpu_pmu_caps =3D nr_caps; =20 - if (strbuf_init(&sb, 128) < 0) + *cpu_pmu_caps =3D zalloc(sizeof(char *) * nr_caps); + if (!*cpu_pmu_caps) return -1; =20 - while (nr_caps--) { + for (i =3D 0; i < nr_caps; i++) { name =3D do_read_string(ff); if (!name) goto error; @@ -3231,12 +3225,10 @@ static int process_per_cpu_pmu_caps(struct feat_fd = *ff, int *nr_cpu_pmu_caps, if (!value) goto free_name; =20 - if (strbuf_addf(&sb, "%s=3D%s", name, value) < 0) + if (asprintf(&ptr, "%s=3D%s", name, value) < 0) goto free_value; =20 - /* include a NULL character at the end */ - if (strbuf_add(&sb, "", 1) < 0) - goto free_value; + (*cpu_pmu_caps)[i] =3D ptr; =20 if (!strcmp(name, "branches")) *max_branches =3D atoi(value); @@ -3244,7 +3236,7 @@ static int process_per_cpu_pmu_caps(struct feat_fd *f= f, int *nr_cpu_pmu_caps, free(value); free(name); } - *cpu_pmu_caps =3D strbuf_detach(&sb, NULL); + *nr_cpu_pmu_caps =3D nr_caps; return 0; =20 free_value: @@ -3252,16 +3244,24 @@ static int process_per_cpu_pmu_caps(struct feat_fd = *ff, int *nr_cpu_pmu_caps, free_name: free(name); error: - strbuf_release(&sb); + for (; i > 0; i--) + free((*cpu_pmu_caps)[i - 1]); + free(*cpu_pmu_caps); + *cpu_pmu_caps =3D NULL; + *nr_cpu_pmu_caps =3D 0; return -1; } =20 static int process_cpu_pmu_caps(struct feat_fd *ff, void *data __maybe_unused) { - return process_per_cpu_pmu_caps(ff, &ff->ph->env.nr_cpu_pmu_caps, + int ret =3D process_per_cpu_pmu_caps(ff, &ff->ph->env.nr_cpu_pmu_caps, &ff->ph->env.cpu_pmu_caps, &ff->ph->env.max_branches); + + if (!ret && !ff->ph->env.cpu_pmu_caps) + pr_debug("cpu pmu capabilities not available\n"); + return ret; } =20 static int process_hybrid_cpu_pmu_caps(struct feat_fd *ff, @@ -3270,6 +3270,7 @@ static int process_hybrid_cpu_pmu_caps(struct feat_fd= *ff, struct hybrid_cpc_node *nodes; u32 nr_pmu, i; int ret; + int j; =20 if (do_read_u32(ff, &nr_pmu)) return -1; @@ -3297,6 +3298,8 @@ static int process_hybrid_cpu_pmu_caps(struct feat_fd= *ff, ret =3D -1; goto err; } + if (!n->nr_cpu_pmu_caps) + pr_debug("%s pmu capabilities not available\n", n->pmu_name); } =20 ff->ph->env.nr_hybrid_cpc_nodes =3D nr_pmu; @@ -3305,6 +3308,8 @@ static int process_hybrid_cpu_pmu_caps(struct feat_fd= *ff, =20 err: for (i =3D 0; i < nr_pmu; i++) { + for (j =3D 0; j < nodes[i].nr_cpu_pmu_caps; j++) + free(nodes[i].cpu_pmu_caps[j]); free(nodes[i].cpu_pmu_caps); free(nodes[i].pmu_name); } --=20 2.31.1 From nobody Tue Apr 28 06:32:15 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7966AC43334 for ; Sat, 4 Jun 2022 04:47:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1350597AbiFDErj (ORCPT ); Sat, 4 Jun 2022 00:47:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40128 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1350572AbiFDEra (ORCPT ); Sat, 4 Jun 2022 00:47:30 -0400 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2062.outbound.protection.outlook.com [40.107.243.62]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A5331DFB3; Fri, 3 Jun 2022 21:47:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Y9y7D+evArDkkQcA9mOzzz3v+FblXsDlabK97Iseeeo3ePGeE5uYo7QEd9ddBUigCdr/Z+Zp/EsMWKMf80U1GiSn/ZWT6KZhJOSkB6gGvlsHEZWA/2ZW5h74v27vtc8GRRH89XrAFPrsRAJvYNxpyHPcwHm6+tBtN9iGsDBfJ3zzdkFHtOz6KtqZEKrYVGORAPIuJtybVQ+El3Edu6SDxpudiIhFC7Im8uhQEVpB1hCXtQz47CUaHQSLGIrXPqioU3ojZ+keEjGddcn/R8TBc6fQn978QMv6UoUwACyBRxwN8dF37B/pyCiZRK2bwPNRXKZCQWm331Zod7hFLjJvrQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=2IwA8vTZV9U7taiAHROvHWrJKQ/simeSszre+1aLhw0=; b=YayGeRFuBQniy+IekAQggSGQ9UMquqn0s0BBbZfJ/BJGlLE+vDAVBmA11GciWQhHl00jVunJToxj4UtF1lakT96W/h/GbHMUcu+mamInjh6qwdwL0OKnj8zyZlC3qCfEtXkRtPVwX2KMvQVTRAI6hXTv1Iavj3BGh4FJqyH7h07u1d6MomrfTJHfXnNpw9wxMDOhbChO3FVlZPGj3VRAw1llEmbXfEB1gfnRdhWsKZZzfjqyR6SOQ1sat//DSxWOOqQGs9tCP6SuR0wgJD0t+Q3svvE02ivw+rSNEjxC540EBCiyWX4EOoF/n3f0zBEuGpGxfyxATpb8kYGtzP4SRg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=kernel.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2IwA8vTZV9U7taiAHROvHWrJKQ/simeSszre+1aLhw0=; b=eoZwQTvxAqclU2YeHkUtLUZ3asIN8esy5NHnr7o/yZwYi2AdkFunRCFUhljivFEmiaUGQxOzMTrSO7RFB36Yu9iBXS82y8cTvdfIAtObtIVBuoH0X0iNTE5gUoXCskq1b+SKrwFg/yyUXs+fqFdFmJ+t6Xg9adFyiGrDlOSrN2w= Received: from BN0PR04CA0067.namprd04.prod.outlook.com (2603:10b6:408:ea::12) by DM4PR12MB6182.namprd12.prod.outlook.com (2603:10b6:8:a8::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5314.13; Sat, 4 Jun 2022 04:47:23 +0000 Received: from BN8NAM11FT025.eop-nam11.prod.protection.outlook.com (2603:10b6:408:ea:cafe::5f) by BN0PR04CA0067.outlook.office365.com (2603:10b6:408:ea::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5314.12 via Frontend Transport; Sat, 4 Jun 2022 04:47:22 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by BN8NAM11FT025.mail.protection.outlook.com (10.13.177.136) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.5314.12 via Frontend Transport; Sat, 4 Jun 2022 04:47:22 +0000 Received: from BLR-5CG113396H.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.28; Fri, 3 Jun 2022 23:47:10 -0500 From: Ravi Bangoria To: CC: , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v6 5/8] perf headers: Record non-cpu pmu capabilities Date: Sat, 4 Jun 2022 10:15:16 +0530 Message-ID: <20220604044519.594-6-ravi.bangoria@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220604044519.594-1-ravi.bangoria@amd.com> References: <20220604044519.594-1-ravi.bangoria@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 868e6c06-5d55-4483-4e17-08da45e5509c X-MS-TrafficTypeDiagnostic: DM4PR12MB6182:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: CWcpVoeoVnwdXUqSSASq2/mxC07JrhMgZ7TOOrQPC7oF5GglA29Q2HOZQ0tdwIdQPOsP8qVhW7MUDVapb9gUf95pfHVykW6F2wOkMJtIgxFwPiENG3TRZ4KglJgl4+kI7+yUB7Ccisdh9R1OImGsIRF03wImLBKpFDzMO1ItxTYJi3oznFERWp/mlLfZfHRM4c4MvXjhbxxaZ5I75t99N18hiQdsCTAFjOcsneq17zI81CoPzcvDJuNyaJ5jmjmZJGsG55+lnDbcw9sJS3UaAU6xcdT8m95/Fg5LfZrciTXMPksGYufNsuXdn8waomaNLGJrV9gwWTm8+hvYkyaTBDpJc2ghQ0VmTZ0UDCwwR64qRDfQCxttsm5GalHU/xsGZk5xqwHJDjm3YISgoEE8jawImw69q7rbrTA5VLigFNSLSWbk4rm+4auWqNMlHoNm3d6ZyJKkb9731KE0UP+8EaYS2Y/Q3bjFBIyKzCdiclWUeD/OpIcn34MDdak4V2mn9J2knrpclR8qTmDGSb47pbXgdRnF4a9OjloCGkGmvGCPj3v41d3ouo0h79X2Caw0ow47Ts7lVOFYg9CI3AsZqCe5Yk7i+3fDfYNN8YUTvC9LqgMS0HNMBXLTXeQpYJxs5mVPYloR5BwsgAK4cgOzEaRPVavp4gm3FVcsGCP8QQ2MKq26tHrIs1grVbN3o1CtDk1SK9XPeIhIgKYfAxP+sw== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230001)(4636009)(46966006)(40470700004)(36840700001)(1076003)(4326008)(8676002)(6916009)(5660300002)(54906003)(81166007)(316002)(26005)(86362001)(7696005)(508600001)(16526019)(336012)(36860700001)(426003)(186003)(83380400001)(2616005)(40460700003)(82310400005)(2906002)(47076005)(30864003)(70586007)(70206006)(44832011)(8936002)(7416002)(36756003)(356005)(36900700001);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jun 2022 04:47:22.7813 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 868e6c06-5d55-4483-4e17-08da45e5509c X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BN8NAM11FT025.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB6182 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Pmus advertise their capabilities via sysfs attribute files but perf tool currently parses only core(cpu) or hybrid core pmu capabilities. Add support of recording non-core pmu capabilities int perf.data header. Note that a newly proposed HEADER_PMU_CAPS is replacing existing HEADER_HYBRID_CPU_PMU_CAPS. Special care is taken for hybrid core pmus by writing their capabilities first in the perf.data header to make sure new perf.data file being read by old perf tool does not break. Signed-off-by: Ravi Bangoria Reviewed-by: Kan Liang Acked-by: Namhyung Kim --- .../Documentation/perf.data-file-format.txt | 10 +- tools/perf/builtin-inject.c | 2 +- tools/perf/util/env.c | 60 ++++++- tools/perf/util/env.h | 12 +- tools/perf/util/header.c | 160 ++++++++++-------- tools/perf/util/header.h | 2 +- 6 files changed, 158 insertions(+), 88 deletions(-) diff --git a/tools/perf/Documentation/perf.data-file-format.txt b/tools/per= f/Documentation/perf.data-file-format.txt index f56d0e0fbff6..2233534e508a 100644 --- a/tools/perf/Documentation/perf.data-file-format.txt +++ b/tools/perf/Documentation/perf.data-file-format.txt @@ -419,18 +419,20 @@ Example: cpu_core cpu list : 0-15 cpu_atom cpu list : 16-23 =20 - HEADER_HYBRID_CPU_PMU_CAPS =3D 31, + HEADER_PMU_CAPS =3D 31, =20 - A list of hybrid CPU PMU capabilities. + List of pmu capabilities (except cpu pmu which is already + covered by HEADER_CPU_PMU_CAPS). Note that hybrid cpu pmu + capabilities are also stored here. =20 struct { u32 nr_pmu; struct { - u32 nr_cpu_pmu_caps; + u32 nr_caps; { char name[]; char value[]; - } [nr_cpu_pmu_caps]; + } [nr_caps]; char pmu_name[]; } [nr_pmu]; }; diff --git a/tools/perf/builtin-inject.c b/tools/perf/builtin-inject.c index a75bf11585b5..05bc0cfccf83 100644 --- a/tools/perf/builtin-inject.c +++ b/tools/perf/builtin-inject.c @@ -809,7 +809,7 @@ static bool keep_feat(int feat) case HEADER_CPU_PMU_CAPS: case HEADER_CLOCK_DATA: case HEADER_HYBRID_TOPOLOGY: - case HEADER_HYBRID_CPU_PMU_CAPS: + case HEADER_PMU_CAPS: return true; /* Information that can be updated */ case HEADER_BUILD_ID: diff --git a/tools/perf/util/env.c b/tools/perf/util/env.c index 7d3aeb2e4622..5b8cf6a421a4 100644 --- a/tools/perf/util/env.c +++ b/tools/perf/util/env.c @@ -219,13 +219,13 @@ void perf_env__exit(struct perf_env *env) } zfree(&env->hybrid_nodes); =20 - for (i =3D 0; i < env->nr_hybrid_cpc_nodes; i++) { - for (j =3D 0; j < env->hybrid_cpc_nodes[i].nr_cpu_pmu_caps; j++) - zfree(&env->hybrid_cpc_nodes[i].cpu_pmu_caps[j]); - zfree(&env->hybrid_cpc_nodes[i].cpu_pmu_caps); - zfree(&env->hybrid_cpc_nodes[i].pmu_name); + for (i =3D 0; i < env->nr_pmus_with_caps; i++) { + for (j =3D 0; j < env->pmu_caps[i].nr_caps; j++) + zfree(&env->pmu_caps[i].caps[j]); + zfree(&env->pmu_caps[i].caps); + zfree(&env->pmu_caps[i].pmu_name); } - zfree(&env->hybrid_cpc_nodes); + zfree(&env->pmu_caps); } =20 void perf_env__init(struct perf_env *env) @@ -531,3 +531,51 @@ int perf_env__numa_node(struct perf_env *env, struct p= erf_cpu cpu) =20 return cpu.cpu >=3D 0 && cpu.cpu < env->nr_numa_map ? env->numa_map[cpu.c= pu] : -1; } + +char *perf_env__find_pmu_cap(struct perf_env *env, const char *pmu_name, + const char *cap) +{ + char *cap_eq; + int cap_size; + char **ptr; + int i, j; + + if (!pmu_name || !cap) + return NULL; + + cap_size =3D strlen(cap); + cap_eq =3D zalloc(cap_size + 2); + if (!cap_eq) + return NULL; + + memcpy(cap_eq, cap, cap_size); + cap_eq[cap_size] =3D '=3D'; + + if (!strcmp(pmu_name, "cpu")) { + for (i =3D 0; i < env->nr_cpu_pmu_caps; i++) { + if (!strncmp(env->cpu_pmu_caps[i], cap_eq, cap_size + 1)) { + free(cap_eq); + return &env->cpu_pmu_caps[i][cap_size + 1]; + } + } + goto out; + } + + for (i =3D 0; i < env->nr_pmus_with_caps; i++) { + if (strcmp(env->pmu_caps[i].pmu_name, pmu_name)) + continue; + + ptr =3D env->pmu_caps[i].caps; + + for (j =3D 0; j < env->pmu_caps[i].nr_caps; j++) { + if (!strncmp(ptr[j], cap_eq, cap_size + 1)) { + free(cap_eq); + return &ptr[j][cap_size + 1]; + } + } + } + +out: + free(cap_eq); + return NULL; +} diff --git a/tools/perf/util/env.h b/tools/perf/util/env.h index 43aab59f7322..4566c51f2fd9 100644 --- a/tools/perf/util/env.h +++ b/tools/perf/util/env.h @@ -43,10 +43,10 @@ struct hybrid_node { char *cpus; }; =20 -struct hybrid_cpc_node { - int nr_cpu_pmu_caps; +struct pmu_caps { + int nr_caps; unsigned int max_branches; - char **cpu_pmu_caps; + char **caps; char *pmu_name; }; =20 @@ -74,7 +74,7 @@ struct perf_env { int nr_groups; int nr_cpu_pmu_caps; int nr_hybrid_nodes; - int nr_hybrid_cpc_nodes; + int nr_pmus_with_caps; char *cmdline; const char **cmdline_argv; char *sibling_cores; @@ -94,7 +94,7 @@ struct perf_env { struct memory_node *memory_nodes; unsigned long long memory_bsize; struct hybrid_node *hybrid_nodes; - struct hybrid_cpc_node *hybrid_cpc_nodes; + struct pmu_caps *pmu_caps; #ifdef HAVE_LIBBPF_SUPPORT /* * bpf_info_lock protects bpf rbtrees. This is needed because the @@ -172,4 +172,6 @@ bool perf_env__insert_btf(struct perf_env *env, struct = btf_node *btf_node); struct btf_node *perf_env__find_btf(struct perf_env *env, __u32 btf_id); =20 int perf_env__numa_node(struct perf_env *env, struct perf_cpu cpu); +char *perf_env__find_pmu_cap(struct perf_env *env, const char *pmu_name, + const char *cap); #endif /* __PERF_ENV_H */ diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index ca5b1f03810d..817dfb531da8 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c @@ -1512,18 +1512,13 @@ static int write_compressed(struct feat_fd *ff __ma= ybe_unused, return do_write(ff, &(ff->ph->env.comp_mmap_len), sizeof(ff->ph->env.comp= _mmap_len)); } =20 -static int write_per_cpu_pmu_caps(struct feat_fd *ff, struct perf_pmu *pmu, - bool write_pmu) +static int __write_pmu_caps(struct feat_fd *ff, struct perf_pmu *pmu, + bool write_pmu) { struct perf_pmu_caps *caps =3D NULL; - int nr_caps; int ret; =20 - nr_caps =3D perf_pmu__caps_parse(pmu); - if (nr_caps < 0) - return nr_caps; - - ret =3D do_write(ff, &nr_caps, sizeof(nr_caps)); + ret =3D do_write(ff, &pmu->nr_caps, sizeof(pmu->nr_caps)); if (ret < 0) return ret; =20 @@ -1550,33 +1545,60 @@ static int write_cpu_pmu_caps(struct feat_fd *ff, struct evlist *evlist __maybe_unused) { struct perf_pmu *cpu_pmu =3D perf_pmu__find("cpu"); + int ret; =20 if (!cpu_pmu) return -ENOENT; =20 - return write_per_cpu_pmu_caps(ff, cpu_pmu, false); + ret =3D perf_pmu__caps_parse(cpu_pmu); + if (ret < 0) + return ret; + + return __write_pmu_caps(ff, cpu_pmu, false); } =20 -static int write_hybrid_cpu_pmu_caps(struct feat_fd *ff, - struct evlist *evlist __maybe_unused) +static int write_pmu_caps(struct feat_fd *ff, + struct evlist *evlist __maybe_unused) { - struct perf_pmu *pmu; - u32 nr_pmu =3D perf_pmu__hybrid_pmu_num(); + struct perf_pmu *pmu =3D NULL; + int nr_pmu =3D 0; int ret; =20 - if (nr_pmu =3D=3D 0) - return -ENOENT; + while ((pmu =3D perf_pmu__scan(pmu))) { + if (!pmu->name || !strcmp(pmu->name, "cpu") || + perf_pmu__caps_parse(pmu) <=3D 0) + continue; + nr_pmu++; + } =20 ret =3D do_write(ff, &nr_pmu, sizeof(nr_pmu)); if (ret < 0) return ret; =20 + if (!nr_pmu) + return 0; + + /* + * Write hybrid pmu caps first to maintain compatibility with + * older perf tool. + */ + pmu =3D NULL; perf_pmu__for_each_hybrid_pmu(pmu) { - ret =3D write_per_cpu_pmu_caps(ff, pmu, true); + ret =3D __write_pmu_caps(ff, pmu, true); if (ret < 0) return ret; } =20 + pmu =3D NULL; + while ((pmu =3D perf_pmu__scan(pmu))) { + if (!pmu->name || !strcmp(pmu->name, "cpu") || + !pmu->nr_caps || perf_pmu__is_hybrid(pmu->name)) + continue; + + ret =3D __write_pmu_caps(ff, pmu, true); + if (ret < 0) + return ret; + } return 0; } =20 @@ -2051,8 +2073,7 @@ static void print_compressed(struct feat_fd *ff, FILE= *fp) ff->ph->env.comp_level, ff->ph->env.comp_ratio); } =20 -static void print_per_cpu_pmu_caps(FILE *fp, int nr_caps, char **cpu_pmu_c= aps, - char *pmu_name) +static void __print_pmu_caps(FILE *fp, int nr_caps, char **caps, char *pmu= _name) { const char *delimiter =3D ""; int i; @@ -2064,7 +2085,7 @@ static void print_per_cpu_pmu_caps(FILE *fp, int nr_c= aps, char **cpu_pmu_caps, =20 fprintf(fp, "# %s pmu capabilities: ", pmu_name); for (i =3D 0; i < nr_caps; i++) { - fprintf(fp, "%s%s", delimiter, cpu_pmu_caps[i]); + fprintf(fp, "%s%s", delimiter, caps[i]); delimiter =3D ", "; } =20 @@ -2073,19 +2094,18 @@ static void print_per_cpu_pmu_caps(FILE *fp, int nr= _caps, char **cpu_pmu_caps, =20 static void print_cpu_pmu_caps(struct feat_fd *ff, FILE *fp) { - print_per_cpu_pmu_caps(fp, ff->ph->env.nr_cpu_pmu_caps, - ff->ph->env.cpu_pmu_caps, (char *)"cpu"); + __print_pmu_caps(fp, ff->ph->env.nr_cpu_pmu_caps, + ff->ph->env.cpu_pmu_caps, (char *)"cpu"); } =20 -static void print_hybrid_cpu_pmu_caps(struct feat_fd *ff, FILE *fp) +static void print_pmu_caps(struct feat_fd *ff, FILE *fp) { - struct hybrid_cpc_node *n; + struct pmu_caps *pmu_caps; =20 - for (int i =3D 0; i < ff->ph->env.nr_hybrid_cpc_nodes; i++) { - n =3D &ff->ph->env.hybrid_cpc_nodes[i]; - print_per_cpu_pmu_caps(fp, n->nr_cpu_pmu_caps, - n->cpu_pmu_caps, - n->pmu_name); + for (int i =3D 0; i < ff->ph->env.nr_pmus_with_caps; i++) { + pmu_caps =3D &ff->ph->env.pmu_caps[i]; + __print_pmu_caps(fp, pmu_caps->nr_caps, pmu_caps->caps, + pmu_caps->pmu_name); } } =20 @@ -3196,27 +3216,26 @@ static int process_compressed(struct feat_fd *ff, return 0; } =20 -static int process_per_cpu_pmu_caps(struct feat_fd *ff, int *nr_cpu_pmu_ca= ps, - char ***cpu_pmu_caps, - unsigned int *max_branches) +static int __process_pmu_caps(struct feat_fd *ff, int *nr_caps, + char ***caps, unsigned int *max_branches) { char *name, *value, *ptr; - u32 nr_caps, i; + u32 nr_pmu_caps, i; =20 - *nr_cpu_pmu_caps =3D 0; - *cpu_pmu_caps =3D NULL; + *nr_caps =3D 0; + *caps =3D NULL; =20 - if (do_read_u32(ff, &nr_caps)) + if (do_read_u32(ff, &nr_pmu_caps)) return -1; =20 - if (!nr_caps) + if (!nr_pmu_caps) return 0; =20 - *cpu_pmu_caps =3D zalloc(sizeof(char *) * nr_caps); - if (!*cpu_pmu_caps) + *caps =3D zalloc(sizeof(char *) * nr_pmu_caps); + if (!*caps) return -1; =20 - for (i =3D 0; i < nr_caps; i++) { + for (i =3D 0; i < nr_pmu_caps; i++) { name =3D do_read_string(ff); if (!name) goto error; @@ -3228,7 +3247,7 @@ static int process_per_cpu_pmu_caps(struct feat_fd *f= f, int *nr_cpu_pmu_caps, if (asprintf(&ptr, "%s=3D%s", name, value) < 0) goto free_value; =20 - (*cpu_pmu_caps)[i] =3D ptr; + (*caps)[i] =3D ptr; =20 if (!strcmp(name, "branches")) *max_branches =3D atoi(value); @@ -3236,7 +3255,7 @@ static int process_per_cpu_pmu_caps(struct feat_fd *f= f, int *nr_cpu_pmu_caps, free(value); free(name); } - *nr_cpu_pmu_caps =3D nr_caps; + *nr_caps =3D nr_pmu_caps; return 0; =20 free_value: @@ -3245,29 +3264,28 @@ static int process_per_cpu_pmu_caps(struct feat_fd = *ff, int *nr_cpu_pmu_caps, free(name); error: for (; i > 0; i--) - free((*cpu_pmu_caps)[i - 1]); - free(*cpu_pmu_caps); - *cpu_pmu_caps =3D NULL; - *nr_cpu_pmu_caps =3D 0; + free((*caps)[i - 1]); + free(*caps); + *caps =3D NULL; + *nr_caps =3D 0; return -1; } =20 static int process_cpu_pmu_caps(struct feat_fd *ff, void *data __maybe_unused) { - int ret =3D process_per_cpu_pmu_caps(ff, &ff->ph->env.nr_cpu_pmu_caps, - &ff->ph->env.cpu_pmu_caps, - &ff->ph->env.max_branches); + int ret =3D __process_pmu_caps(ff, &ff->ph->env.nr_cpu_pmu_caps, + &ff->ph->env.cpu_pmu_caps, + &ff->ph->env.max_branches); =20 if (!ret && !ff->ph->env.cpu_pmu_caps) pr_debug("cpu pmu capabilities not available\n"); return ret; } =20 -static int process_hybrid_cpu_pmu_caps(struct feat_fd *ff, - void *data __maybe_unused) +static int process_pmu_caps(struct feat_fd *ff, void *data __maybe_unused) { - struct hybrid_cpc_node *nodes; + struct pmu_caps *pmu_caps; u32 nr_pmu, i; int ret; int j; @@ -3276,45 +3294,45 @@ static int process_hybrid_cpu_pmu_caps(struct feat_= fd *ff, return -1; =20 if (!nr_pmu) { - pr_debug("hybrid cpu pmu capabilities not available\n"); + pr_debug("pmu capabilities not available\n"); return 0; } =20 - nodes =3D zalloc(sizeof(*nodes) * nr_pmu); - if (!nodes) + pmu_caps =3D zalloc(sizeof(*pmu_caps) * nr_pmu); + if (!pmu_caps) return -ENOMEM; =20 for (i =3D 0; i < nr_pmu; i++) { - struct hybrid_cpc_node *n =3D &nodes[i]; - - ret =3D process_per_cpu_pmu_caps(ff, &n->nr_cpu_pmu_caps, - &n->cpu_pmu_caps, - &n->max_branches); + ret =3D __process_pmu_caps(ff, &pmu_caps[i].nr_caps, + &pmu_caps[i].caps, + &pmu_caps[i].max_branches); if (ret) goto err; =20 - n->pmu_name =3D do_read_string(ff); - if (!n->pmu_name) { + pmu_caps[i].pmu_name =3D do_read_string(ff); + if (!pmu_caps[i].pmu_name) { ret =3D -1; goto err; } - if (!n->nr_cpu_pmu_caps) - pr_debug("%s pmu capabilities not available\n", n->pmu_name); + if (!pmu_caps[i].nr_caps) { + pr_debug("%s pmu capabilities not available\n", + pmu_caps[i].pmu_name); + } } =20 - ff->ph->env.nr_hybrid_cpc_nodes =3D nr_pmu; - ff->ph->env.hybrid_cpc_nodes =3D nodes; + ff->ph->env.nr_pmus_with_caps =3D nr_pmu; + ff->ph->env.pmu_caps =3D pmu_caps; return 0; =20 err: for (i =3D 0; i < nr_pmu; i++) { - for (j =3D 0; j < nodes[i].nr_cpu_pmu_caps; j++) - free(nodes[i].cpu_pmu_caps[j]); - free(nodes[i].cpu_pmu_caps); - free(nodes[i].pmu_name); + for (j =3D 0; j < pmu_caps[i].nr_caps; j++) + free(pmu_caps[i].caps[j]); + free(pmu_caps[i].caps); + free(pmu_caps[i].pmu_name); } =20 - free(nodes); + free(pmu_caps); return ret; } =20 @@ -3380,7 +3398,7 @@ const struct perf_header_feature_ops feat_ops[HEADER_= LAST_FEATURE] =3D { FEAT_OPR(CPU_PMU_CAPS, cpu_pmu_caps, false), FEAT_OPR(CLOCK_DATA, clock_data, false), FEAT_OPN(HYBRID_TOPOLOGY, hybrid_topology, true), - FEAT_OPR(HYBRID_CPU_PMU_CAPS, hybrid_cpu_pmu_caps, false), + FEAT_OPR(PMU_CAPS, pmu_caps, false), }; =20 struct header_print_data { diff --git a/tools/perf/util/header.h b/tools/perf/util/header.h index 08563c1f1bff..5790bf556b90 100644 --- a/tools/perf/util/header.h +++ b/tools/perf/util/header.h @@ -46,7 +46,7 @@ enum { HEADER_CPU_PMU_CAPS, HEADER_CLOCK_DATA, HEADER_HYBRID_TOPOLOGY, - HEADER_HYBRID_CPU_PMU_CAPS, + HEADER_PMU_CAPS, HEADER_LAST_FEATURE, HEADER_FEAT_BITS =3D 256, }; --=20 2.31.1 From nobody Tue Apr 28 06:32:15 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2B059CCA482 for ; Sat, 4 Jun 2022 04:47:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1350610AbiFDErn (ORCPT ); Sat, 4 Jun 2022 00:47:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40730 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1350601AbiFDErj (ORCPT ); Sat, 4 Jun 2022 00:47:39 -0400 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2041.outbound.protection.outlook.com [40.107.236.41]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 878DE10FF0; Fri, 3 Jun 2022 21:47:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KJHIlzJ5KfTy0P+xhAmYM6Ugs80kspQx3TAV/eO+y27RC1G6PnobaVDipS2alfWiy8XiZl675T9DgR3y3Ym9e6/zxbFdwO3KTXX2WLVlYmj1poZ+hl48fTgaV2FfGUqMne7si99FtxghpAWBQPj7iYC48VPH+2XjY9WLiLLPIzwuBVdV5W3T2dTzA8yAHxuUX/GDsObhX+ZODUxZydtlHttV8G9xlhzQaKHMwpkDvUu42jE8+1KiClgdzKft1xr2fdkUBgA6hWFYxK51gGcH8/HjeD7qLdDWpOeHSnXVA7CEE8I0f1iBzn4icbFHtHnNwgeyvDV2hcu9ks5CXZ8pAA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=58OUnmftGccIflpVRC3kry/dTTF/1fMLkNTsUzjZkiY=; b=EM7ADoY8xJdWvqCfNnQ9r6yu+Icw2kKGJVHfubPl8Z6LeQyQVEe5jnQPuJk7BhKhrIp5QI0vNgCCedKFgbZpFR7cwOkX0waZadzUrDzXCHA2IBEIfchTkIVbk0oPH5LJY673kaszFl339zmV3c5mk45RbXJzXXtAWhzFykg3FBQp2O/Om0dPX4U6V4SQrFhl9uUvvDXe7eUwSv0eblwsWk+WflGT51Dsj4SAmSBgpjP08OpfMvgTa5LnF5kB1iUQNoCuFnwe1EkhYXQQvXgCFEoDE8lcnwU+QOCn9JWqKZpXSKTNt95ocQUme25NrdJXJ+CAzWfaW74GeZ+m0U1bRA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=kernel.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=58OUnmftGccIflpVRC3kry/dTTF/1fMLkNTsUzjZkiY=; b=1C0NVDi7eSShAmR/exLlzOS9zwoq9UTeE4Vax3L45fUGq9yfCvebisPsLu3n2UYH3bL0hCu6Txked/3JuNtZxkVHqY8gRRhSQ8qyQrMASAlZaJbYCMA9IoqLzwnpfSI9kYeZIKeb4zigsI4Xdbsfhp/Nq124/RK1PRUVm6KmITw= Received: from BN0PR04CA0119.namprd04.prod.outlook.com (2603:10b6:408:ec::34) by IA1PR12MB6353.namprd12.prod.outlook.com (2603:10b6:208:3e3::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5314.13; Sat, 4 Jun 2022 04:47:36 +0000 Received: from BN8NAM11FT029.eop-nam11.prod.protection.outlook.com (2603:10b6:408:ec:cafe::de) by BN0PR04CA0119.outlook.office365.com (2603:10b6:408:ec::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5314.15 via Frontend Transport; Sat, 4 Jun 2022 04:47:36 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by BN8NAM11FT029.mail.protection.outlook.com (10.13.177.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.5314.12 via Frontend Transport; Sat, 4 Jun 2022 04:47:34 +0000 Received: from BLR-5CG113396H.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.28; Fri, 3 Jun 2022 23:47:22 -0500 From: Ravi Bangoria To: CC: , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v6 6/8] perf/x86/ibs: Add new IBS register bits into header Date: Sat, 4 Jun 2022 10:15:17 +0530 Message-ID: <20220604044519.594-7-ravi.bangoria@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220604044519.594-1-ravi.bangoria@amd.com> References: <20220604044519.594-1-ravi.bangoria@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3fdbf4ab-6f1d-4fed-bd50-08da45e557a5 X-MS-TrafficTypeDiagnostic: IA1PR12MB6353:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: sa23r3sjFNNtjgcOHhS7f+xkn85mtBkZOUr3CwMWct6VPBLkHvbpf4tfmNVWnGv5KGneMTN3Ev3ZtPrQWKN013yKuuozTNNURIChqJSPwcuoxJmQctTeF2ikt8P8fSa3yHq8U/U0QCzd0hXMaZ/IP0BfEfc2ZgLOXSC/L4k6tKmo+VJXbgVRJme43Kezi0REoAwnLMzfoO6HYE2D/UUvQp4IXa/+cUJyCBB0c1uxAqc+sPN/ORt0+rYIO4LH3SkFOLXOuLVNsbGNyVhHuwNOP5HBx7HVziOrLHsn2rkpXO0+ooxQ4pEEUZLL0eroA+vzroNe4wDkwUFgzB9+Kkclz468k+r3TJFvvwSaKwxJowSnsgxZbwK1dcBFczmVNIlHOUmPnvJc58LgY7VcxDmca6MJwLz7N2FhFDBcZAK0gfiKhpb6gPfO9gpko+rEz4mf6VD8OhpMkBRL6BjpI2lCEQ6MOk8AQK3HNW4d/POuX59dEhWtzXZNRTAlG6fQHapZwWrqtAOGx7HhfnrDf/aG08p8ZJPTdR5bv6ypGHWNyYgGDaFkN08QsAJJjUfzuFXnKmmc+lAbJtgUF7mjOxcT5paY4KbesxH7wvlRnMQa6uVUMjiJ9hw4s3D/qOU29xuxhH9vMazQ81fvjcLcQAOLh6zSPbDwGYNEWaLjFAp3InK2fqr9uwLIXSR1FHl508ypTtUGWmcJa7pHlyYs9C3TJQ== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230001)(4636009)(40470700004)(46966006)(36840700001)(7696005)(26005)(5660300002)(2906002)(2616005)(16526019)(186003)(83380400001)(47076005)(82310400005)(7416002)(426003)(6666004)(336012)(8936002)(36756003)(1076003)(44832011)(4326008)(86362001)(8676002)(356005)(316002)(70206006)(70586007)(6916009)(54906003)(508600001)(81166007)(36860700001)(40460700003)(36900700001);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jun 2022 04:47:34.6028 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3fdbf4ab-6f1d-4fed-bd50-08da45e557a5 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BN8NAM11FT029.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB6353 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" IBS support has been enhanced with two new features in upcoming uarch: 1. DataSrc extension and 2. L3 miss filtering. Additional set of bits has been introduced in IBS registers to exploit these features. Define these new bits into arch/x86/ header. Signed-off-by: Ravi Bangoria Acked-by: Ian Rogers Acked-by: Namhyung Kim --- arch/x86/include/asm/amd-ibs.h | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/arch/x86/include/asm/amd-ibs.h b/arch/x86/include/asm/amd-ibs.h index aabdbb5ab920..f3eb098d63d4 100644 --- a/arch/x86/include/asm/amd-ibs.h +++ b/arch/x86/include/asm/amd-ibs.h @@ -29,7 +29,10 @@ union ibs_fetch_ctl { rand_en:1, /* 57: random tagging enable */ fetch_l2_miss:1,/* 58: L2 miss for sampled fetch * (needs IbsFetchComp) */ - reserved:5; /* 59-63: reserved */ + l3_miss_only:1, /* 59: Collect L3 miss samples only */ + fetch_oc_miss:1,/* 60: Op cache miss for the sampled fetch */ + fetch_l3_miss:1,/* 61: L3 cache miss for the sampled fetch */ + reserved:2; /* 62-63: reserved */ }; }; =20 @@ -38,14 +41,14 @@ union ibs_op_ctl { __u64 val; struct { __u64 opmaxcnt:16, /* 0-15: periodic op max. count */ - reserved0:1, /* 16: reserved */ + l3_miss_only:1, /* 16: Collect L3 miss samples only */ op_en:1, /* 17: op sampling enable */ op_val:1, /* 18: op sample valid */ cnt_ctl:1, /* 19: periodic op counter control */ opmaxcnt_ext:7, /* 20-26: upper 7 bits of periodic op maximum count */ - reserved1:5, /* 27-31: reserved */ + reserved0:5, /* 27-31: reserved */ opcurcnt:27, /* 32-58: periodic op counter current count */ - reserved2:5; /* 59-63: reserved */ + reserved1:5; /* 59-63: reserved */ }; }; =20 @@ -71,11 +74,12 @@ union ibs_op_data { union ibs_op_data2 { __u64 val; struct { - __u64 data_src:3, /* 0-2: data source */ + __u64 data_src_lo:3, /* 0-2: data source low */ reserved0:1, /* 3: reserved */ rmt_node:1, /* 4: destination node */ cache_hit_st:1, /* 5: cache hit state */ - reserved1:57; /* 5-63: reserved */ + data_src_hi:2, /* 6-7: data source high */ + reserved1:56; /* 8-63: reserved */ }; }; =20 --=20 2.31.1 From nobody Tue Apr 28 06:32:15 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9F7C7C433EF for ; Sat, 4 Jun 2022 04:47:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345796AbiFDEr5 (ORCPT ); Sat, 4 Jun 2022 00:47:57 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41512 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241988AbiFDErw (ORCPT ); Sat, 4 Jun 2022 00:47:52 -0400 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2082.outbound.protection.outlook.com [40.107.220.82]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id ED04911815; Fri, 3 Jun 2022 21:47:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UvnigBbPM10/92bV9+TiS4BDbfRFaEptmaPDcpISoPPo4d9QybkQx5pXN0+QVpPaEi2Qi5chdQUELNeWT5kzgR/5gV1BK/6IRNnUy5DBHOk+NHVA/JP+Cfzjh+WxOdVGNO7Wc8VSZnRa9Lv2bRuWWqZTI5cGw8IyCmarYnUF10jMGWDm6nG6BfN3236S7ASLoYHQT0YWMZ1VOQhHkq9gdl/nD9YfcmXA1r/v/HMPrS7QJ43xy218iJB12owf0KphRfK/MCQkQpEUBfA6/iuMOojsdaPS7fW9fQnpfupvKrUodMglNWs/HFnGbqoMGeZyh3Xg6H6NFZFcLE5z+Emh/w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ENgn8+omoEhMK3iILyBQxGAX+iDfdi2Upi/IMDFWqgw=; b=iJ7Bwlu87Otng8WWNJAmt6wBn1znMjfpTQ+k/0JwGLXGQxklpt2Vt1xdQfZynZelV0Q0cEXPeURmIMUWdKsn7cc3GZzWL3alPCtv+0lllZ4CrF8DTXmJYVDXWUfwOObLYz5GqvlHKVkzKZFSDSntGvUqWEwE43kvg9BagaPXB5V+PAHQgy/9j7INMvLvwsPuQ7SefYeLCcxCZO9+yPIameH+YY22aBcJ696IQfcrgUk+rU9jmZNarllG733j2oR6Ls9ptwc3nmY8yL2YJC//4wdq2vuG++qj5hH9IPa3WnQf2NYaHbehDhculNuS9OvpA1yDnm95+imwdV4e6zCxxA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=kernel.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ENgn8+omoEhMK3iILyBQxGAX+iDfdi2Upi/IMDFWqgw=; b=MXQn9h3iVkC6bDtyo0o6KXtKgNblgWTUP9D3TsX2pNIMfp/d6f1xifajGHr2i3AZRckziUR9pUtBBjF2HD+L8JTYd0IAL7nORGJVeN0J4cqy+ZbogkgF2/XWq1Aaz1S7PGZqVWxkcF3R6KIRCpF1UlA+8DIcJyemYu0O1rnz4GI= Received: from BN9PR03CA0314.namprd03.prod.outlook.com (2603:10b6:408:112::19) by BL0PR12MB2337.namprd12.prod.outlook.com (2603:10b6:207:45::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5314.12; Sat, 4 Jun 2022 04:47:45 +0000 Received: from BN8NAM11FT038.eop-nam11.prod.protection.outlook.com (2603:10b6:408:112:cafe::fd) by BN9PR03CA0314.outlook.office365.com (2603:10b6:408:112::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5314.12 via Frontend Transport; Sat, 4 Jun 2022 04:47:45 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by BN8NAM11FT038.mail.protection.outlook.com (10.13.176.246) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.5314.12 via Frontend Transport; Sat, 4 Jun 2022 04:47:45 +0000 Received: from BLR-5CG113396H.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.28; Fri, 3 Jun 2022 23:47:34 -0500 From: Ravi Bangoria To: CC: , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v6 7/8] perf tool ibs: Sync amd ibs header file Date: Sat, 4 Jun 2022 10:15:18 +0530 Message-ID: <20220604044519.594-8-ravi.bangoria@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220604044519.594-1-ravi.bangoria@amd.com> References: <20220604044519.594-1-ravi.bangoria@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f6492742-2587-4b4e-b69f-08da45e55e2b X-MS-TrafficTypeDiagnostic: BL0PR12MB2337:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ghQdve+BGOC9IVKnUOuDP51G0alqrnXZg2+/j5n90+sZ2xDpEYQCv/JWDFGiscOtsoAjpFFC6v+hSMaePaz1bcp7dyVFA+Ld8y6RQZhf+wYPwpOE6keE0uiC43JD5TIiuv95VH4VEcPd12Jz3NuFphjwmt6mJK7uTROLnVfEyKDGb9gHecK0dKQsnHKQBTUwNXSe3eEjRGooFlI1Az7Bpe/3XT+1JxhjZeizlO1bOVSwb2ZE9KYNdPuAiCGlchJ+G0NRsIkKpU+sDiP3a1EfJqpWCYYmcQS/F0Qcox1ZZK6LFOn8FbWsWNVAAHfM+pJ8dUE+qpOWBgo8XNiz0lCKyz1UDEXuLfxD5AQMslFaObLFnOEpgubsAbL7/7VtKOiUXH6w//546NAd8EDld+ixSbHU0ylTVWd3rhdPy/EQbMsm/FV1rpPMptIfUoztmVu91a/8s+v1ltLyJo0JhaIJIshOybIrcPkd/wzrv6OKzYQmBCVd4eyDlIvVtzhE59CBmXstETAlugeX9c4F1a7ArJ5Uj4s8uy8uGRjufrsTT7e8EGnjedfENqyugGul6ITyr64O8cOVU6CkVvF3SGLl+hagS8flzhU2gjSBWOl1l//2ZMrCUutvAi5HJ2OmMiNZnd416qLHqylIN+CDW+1Qgg8RosQ3SDDsKeLThu3kvhbODVMgBXWUorOTQLPQ+BUqfC8VMd7vNyEQCtwZh6jInA== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230001)(4636009)(46966006)(36840700001)(40470700004)(70206006)(70586007)(1076003)(40460700003)(186003)(83380400001)(26005)(47076005)(16526019)(336012)(426003)(82310400005)(86362001)(36756003)(6666004)(36860700001)(508600001)(6916009)(5660300002)(54906003)(81166007)(316002)(2616005)(7696005)(356005)(4326008)(8936002)(7416002)(8676002)(2906002)(44832011)(36900700001);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jun 2022 04:47:45.5471 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f6492742-2587-4b4e-b69f-08da45e55e2b X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BN8NAM11FT038.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL0PR12MB2337 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" IBS support has been enhanced with two new features in upcoming uarch: 1. DataSrc extension and 2. L3 miss filtering. Additional set of bits has been introduced in IBS registers to exploit these features. New bits are already defining in arch/x86/ header. Sync it with tools header file. Also rename existing ibs_op_data field 'data_src' to 'data_src_lo'. Signed-off-by: Ravi Bangoria Acked-by: Namhyung Kim --- tools/arch/x86/include/asm/amd-ibs.h | 16 ++++++++++------ tools/perf/util/amd-sample-raw.c | 4 ++-- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/tools/arch/x86/include/asm/amd-ibs.h b/tools/arch/x86/include/= asm/amd-ibs.h index 765e9e752d03..9a3312e12e2e 100644 --- a/tools/arch/x86/include/asm/amd-ibs.h +++ b/tools/arch/x86/include/asm/amd-ibs.h @@ -29,7 +29,10 @@ union ibs_fetch_ctl { rand_en:1, /* 57: random tagging enable */ fetch_l2_miss:1,/* 58: L2 miss for sampled fetch * (needs IbsFetchComp) */ - reserved:5; /* 59-63: reserved */ + l3_miss_only:1, /* 59: Collect L3 miss samples only */ + fetch_oc_miss:1,/* 60: Op cache miss for the sampled fetch */ + fetch_l3_miss:1,/* 61: L3 cache miss for the sampled fetch */ + reserved:2; /* 62-63: reserved */ }; }; =20 @@ -38,14 +41,14 @@ union ibs_op_ctl { __u64 val; struct { __u64 opmaxcnt:16, /* 0-15: periodic op max. count */ - reserved0:1, /* 16: reserved */ + l3_miss_only:1, /* 16: Collect L3 miss samples only */ op_en:1, /* 17: op sampling enable */ op_val:1, /* 18: op sample valid */ cnt_ctl:1, /* 19: periodic op counter control */ opmaxcnt_ext:7, /* 20-26: upper 7 bits of periodic op maximum count */ - reserved1:5, /* 27-31: reserved */ + reserved0:5, /* 27-31: reserved */ opcurcnt:27, /* 32-58: periodic op counter current count */ - reserved2:5; /* 59-63: reserved */ + reserved1:5; /* 59-63: reserved */ }; }; =20 @@ -71,11 +74,12 @@ union ibs_op_data { union ibs_op_data2 { __u64 val; struct { - __u64 data_src:3, /* 0-2: data source */ + __u64 data_src_lo:3, /* 0-2: data source low */ reserved0:1, /* 3: reserved */ rmt_node:1, /* 4: destination node */ cache_hit_st:1, /* 5: cache hit state */ - reserved1:57; /* 5-63: reserved */ + data_src_hi:2, /* 6-7: data source high */ + reserved1:56; /* 8-63: reserved */ }; }; =20 diff --git a/tools/perf/util/amd-sample-raw.c b/tools/perf/util/amd-sample-= raw.c index d19d765195c5..3b623ea6ee7e 100644 --- a/tools/perf/util/amd-sample-raw.c +++ b/tools/perf/util/amd-sample-raw.c @@ -98,9 +98,9 @@ static void pr_ibs_op_data2(union ibs_op_data2 reg) }; =20 printf("ibs_op_data2:\t%016llx %sRmtNode %d%s\n", reg.val, - reg.data_src =3D=3D 2 ? (reg.cache_hit_st ? "CacheHitSt 1=3DO-Stat= e " + reg.data_src_lo =3D=3D 2 ? (reg.cache_hit_st ? "CacheHitSt 1=3DO-S= tate " : "CacheHitSt 0=3DM-state ") : "", - reg.rmt_node, data_src_str[reg.data_src]); + reg.rmt_node, data_src_str[reg.data_src_lo]); } =20 static void pr_ibs_op_data3(union ibs_op_data3 reg) --=20 2.31.1 From nobody Tue Apr 28 06:32:15 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7E297C43334 for ; Sat, 4 Jun 2022 04:48:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1350624AbiFDEsF (ORCPT ); Sat, 4 Jun 2022 00:48:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42248 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239642AbiFDEsD (ORCPT ); Sat, 4 Jun 2022 00:48:03 -0400 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2076.outbound.protection.outlook.com [40.107.94.76]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 141A311C25; Fri, 3 Jun 2022 21:48:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=k3pkGaZlErg/NLFlbBo2H6kVtMnz0TzdWXekjtY0JUNJjefBNXNKpGq97VtRx1nB2SNFfnkiiBqia/EnZkjBHi3JcYVOjIZ7VCEW8fPO5SY8aCdqzk1pWSyWe1SikChA1dETe/dHTJ1/HBrGbaJL5wsUbsypR9Zrv2UD10RDsfgVffWmue0ME4crrnu9YBLlL40cke7ASVx96NZWXeijYpR5nZmTYfB88ZhdKR6Xo9NIzie3JCSnIfNe1H0/Du8WkzEbxaPWTHmVAt5rq7h/+SlB898Yu+ULoKF87GcJvEYcENQ9HxbvC2S0gR4CQbPc8eeC8vOYRwxwpjIBqOexmA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=rDr3Aud2f3bEWRA5lYEAheLaXurwbvIRmVzaryhpqQQ=; b=WjVPMawny9YmKTLpg3C31j/iKmUKlecpR8znwafr2M+swqQtZ/dWttGMzUUARRO2q7gmrxamRjF8LOw/CGNYlhMCagFZtfCe74xMyCTTfotkaDN/NdPP5ND9GNsWkcl+AlLfxt1grp/McJyLUYIwIrjqF6IT3GFQnZRFOGlio6BnQGTfI5I9xfXPVSFCm0uNbApLWqfCzUM2JVDH1bU3NBEPH0aavegak1ECVWXWDtGqa7ZUR3ACrKtteRvBhIw6er9tEMm0Jk/SHU8iO8Uc7WD/Uib6hHfnT/sQ+i9pLnInpuC5FUyFvMQnGPrrKPe/dk4VEdst19kyZm3YKMBWuA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=kernel.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rDr3Aud2f3bEWRA5lYEAheLaXurwbvIRmVzaryhpqQQ=; b=GWX4F5GWieq8K/EFQmvAjWKazhGL/fG1SlZodUkxmF2pGUbt/RyYUe6W2fkziMShShgyzgo+2FbfPoe5GpZymUPYtrxzTmbDfcGljQGKpy/2oqDABP1yusq3fa2qYHe8g/gCJofUAo6XquqCd7YHwaZPHK/NnG8e0XkA2mFwMqY= Received: from BN0PR04CA0025.namprd04.prod.outlook.com (2603:10b6:408:ee::30) by CH2PR12MB4295.namprd12.prod.outlook.com (2603:10b6:610:a7::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5314.13; Sat, 4 Jun 2022 04:47:57 +0000 Received: from BN8NAM11FT059.eop-nam11.prod.protection.outlook.com (2603:10b6:408:ee:cafe::91) by BN0PR04CA0025.outlook.office365.com (2603:10b6:408:ee::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5314.13 via Frontend Transport; Sat, 4 Jun 2022 04:47:57 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by BN8NAM11FT059.mail.protection.outlook.com (10.13.177.120) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.5314.12 via Frontend Transport; Sat, 4 Jun 2022 04:47:57 +0000 Received: from BLR-5CG113396H.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.28; Fri, 3 Jun 2022 23:47:45 -0500 From: Ravi Bangoria To: CC: , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v6 8/8] perf script ibs: Support new IBS bits in raw trace dump Date: Sat, 4 Jun 2022 10:15:19 +0530 Message-ID: <20220604044519.594-9-ravi.bangoria@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220604044519.594-1-ravi.bangoria@amd.com> References: <20220604044519.594-1-ravi.bangoria@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ad1f348b-42ef-48c4-50b0-08da45e56522 X-MS-TrafficTypeDiagnostic: CH2PR12MB4295:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: XXdIadmoMJ8J3jDeJxHgnEU+QLaijoFEuhTlTCXOCDEoUotCc+FujJMwN2ehRhZ18DQW5oGu58tgMNjGlA/ZbUJ+ir/7A9q6osPUTNw7YwjCH2OKVLrbi+UTi7szr7W6fcEIj/FhOBGiv0wgbOoX++9sF4oOEsSIiMQCGo3jHRW5pastqj7C6D/GIVIPV8akBjc7YWPYhuDWKydbJ7vIPtpqDUMdFCIKTqOvpw/pH6Xe1HCCwLuuZ4FLaUTmWgtuJtet+LUy0lK1ftshp2SY+8xv7uTDSAKmC/W61JK7xFgO1LUn0efMHpPU9CT9tnNaoYLew7Owa2mCRVnRnagw1SdZmZTfj3iozZz7Cbldxy4DsnBwR/EEQQitIbf31VtyPFXu6KDCMA26tvyNtHgWy4TeC+fnboTE8XJOx03PL3LwFoRapm8DucswPaJHQ3ztjVM/HCnK2ZkRFqIjpWD9PYqKi/ndz/x34GuQL4OPhPLgkL0mbUIzqf+vX+KDMMd2Z6larUzq5TU0wf/e4A2xWXL5oB43ElCjkFsc07Z1GmdeIqSY9QAmkbLcGjsUQx/DWBWZ9WsSndOCzxkKBKLgvnag3PGvp2vvJBnPxRPTgQ0VzEN+lrjqkl6SEr4Hb+ZnKdynUeqJLfcWOk9N0lHo9VMpCZlBlSPyo9c6f+Q776zNOkxr2LzldYrKnyJMfObCCl8IHkyfwRkVMXoiPSV9ew== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230001)(4636009)(46966006)(40470700004)(36840700001)(81166007)(2616005)(5660300002)(186003)(16526019)(1076003)(7416002)(54906003)(6916009)(8936002)(4326008)(316002)(26005)(86362001)(70206006)(8676002)(70586007)(40460700003)(36860700001)(82310400005)(83380400001)(6666004)(356005)(7696005)(508600001)(426003)(2906002)(336012)(47076005)(44832011)(36756003)(36900700001);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jun 2022 04:47:57.2296 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ad1f348b-42ef-48c4-50b0-08da45e56522 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BN8NAM11FT059.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR12MB4295 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Interpret Additional set of IBS register bits while doing perf report/script raw dump. IBS op pmu ex: $ sudo ./perf record -c 130 -a -e ibs_op/l3missonly=3D1/ --raw-samples $ sudo ./perf report -D ... ibs_op_ctl: 0000004500070008 MaxCnt 128 L3MissOnly 1 En 1 Val 1 CntCtl 0=3Dcycles CurCnt 69 ibs_op_data: 0000000000710002 CompToRetCtr 2 TagToRetCtr 113 BrnRet 0 RipInvalid 0 BrnFuse 0 Microcode 0 ibs_op_data2: 0000000000000002 CacheHitSt 0=3DM-state RmtNode 0 DataSrc 2=3DA peer cache in a near CCX ibs_op_data3: 000000681d1700a1 LdOp 1 StOp 0 DcL1TlbMiss 0 DcL2TlbMiss 0 DcL1TlbHit2M 0 DcL1TlbHit1G 1 DcL2TlbHit2M 0 DcMiss 1 DcMisAcc 0 DcWcMemAcc 0 DcUcMemAcc 0 DcLockedOp 0 DcMissNoMabAlloc 1 DcLinAddrValid 1 DcPhyAddrValid 1 DcL2TlbHit1G 0 L2Miss 1 SwPf 0 OpMemWidth 8 bytes OpDcMissOpenMemReqs 7 DcMissLat 104 TlbRefillLat 0 IBS Fetch pmu ex: $ sudo ./perf record -c 130 -a -e ibs_fetch/l3missonly=3D1/ --raw-samples $ sudo ./perf report -D ... ibs_fetch_ctl: 3c1f00c700080008 MaxCnt 128 Cnt 128 Lat 199 En 1 Val 1 Comp 1 IcMiss 1 PhyAddrValid 1 L1TlbPgSz 4KB L1TlbMiss 0 L2TlbMiss 0 RandEn 0 L2Miss 1 L3MissOnly 1 FetchOcMiss 1 FetchL3Miss 1 With the DataSrc extensions, the source of data can be decoded among: - Local L3 or other L1/L2 in CCX. - A peer cache in a near CCX. - Data returned from DRAM. - A peer cache in a far CCX. - DRAM address map with "long latency" bit set. - Data returned from MMIO/Config/PCI/APIC. - Extension Memory (S-Link, GenZ, etc - identified by the CS target and/or address map at DF's choice). - Peer Agent Memory. Signed-off-by: Ravi Bangoria Acked-by: Namhyung Kim --- tools/perf/util/amd-sample-raw.c | 64 +++++++++++++++++++++++++++++--- 1 file changed, 58 insertions(+), 6 deletions(-) diff --git a/tools/perf/util/amd-sample-raw.c b/tools/perf/util/amd-sample-= raw.c index 3b623ea6ee7e..238305868644 100644 --- a/tools/perf/util/amd-sample-raw.c +++ b/tools/perf/util/amd-sample-raw.c @@ -18,6 +18,7 @@ #include "pmu-events/pmu-events.h" =20 static u32 cpu_family, cpu_model, ibs_fetch_type, ibs_op_type; +static bool zen4_ibs_extensions; =20 static void pr_ibs_fetch_ctl(union ibs_fetch_ctl reg) { @@ -39,6 +40,7 @@ static void pr_ibs_fetch_ctl(union ibs_fetch_ctl reg) }; const char *ic_miss_str =3D NULL; const char *l1tlb_pgsz_str =3D NULL; + char l3_miss_str[sizeof(" L3MissOnly _ FetchOcMiss _ FetchL3Miss _")] =3D= ""; =20 if (cpu_family =3D=3D 0x19 && cpu_model < 0x10) { /* @@ -53,12 +55,19 @@ static void pr_ibs_fetch_ctl(union ibs_fetch_ctl reg) ic_miss_str =3D ic_miss_strs[reg.ic_miss]; } =20 + if (zen4_ibs_extensions) { + snprintf(l3_miss_str, sizeof(l3_miss_str), + " L3MissOnly %d FetchOcMiss %d FetchL3Miss %d", + reg.l3_miss_only, reg.fetch_oc_miss, reg.fetch_l3_miss); + } + printf("ibs_fetch_ctl:\t%016llx MaxCnt %7d Cnt %7d Lat %5d En %d Val %d C= omp %d%s " - "PhyAddrValid %d%s L1TlbMiss %d L2TlbMiss %d RandEn %d%s\n", + "PhyAddrValid %d%s L1TlbMiss %d L2TlbMiss %d RandEn %d%s%s\n", reg.val, reg.fetch_maxcnt << 4, reg.fetch_cnt << 4, reg.fetch_lat, reg.fetch_en, reg.fetch_val, reg.fetch_comp, ic_miss_str ? : "", reg.phy_addr_valid, l1tlb_pgsz_str ? : "", reg.l1tlb_miss, reg.l2tlb_mis= s, - reg.rand_en, reg.fetch_comp ? (reg.fetch_l2_miss ? " L2Miss 1" : " L2Mis= s 0") : ""); + reg.rand_en, reg.fetch_comp ? (reg.fetch_l2_miss ? " L2Miss 1" : " L2Mis= s 0") : "", + l3_miss_str); } =20 static void pr_ic_ibs_extd_ctl(union ic_ibs_extd_ctl reg) @@ -68,9 +77,15 @@ static void pr_ic_ibs_extd_ctl(union ic_ibs_extd_ctl reg) =20 static void pr_ibs_op_ctl(union ibs_op_ctl reg) { - printf("ibs_op_ctl:\t%016llx MaxCnt %9d En %d Val %d CntCtl %d=3D%s CurCn= t %9d\n", - reg.val, ((reg.opmaxcnt_ext << 16) | reg.opmaxcnt) << 4, reg.op_en= , reg.op_val, - reg.cnt_ctl, reg.cnt_ctl ? "uOps" : "cycles", reg.opcurcnt); + char l3_miss_only[sizeof(" L3MissOnly _")] =3D ""; + + if (zen4_ibs_extensions) + snprintf(l3_miss_only, sizeof(l3_miss_only), " L3MissOnly %d", reg.l3_mi= ss_only); + + printf("ibs_op_ctl:\t%016llx MaxCnt %9d%s En %d Val %d CntCtl %d=3D%s Cur= Cnt %9d\n", + reg.val, ((reg.opmaxcnt_ext << 16) | reg.opmaxcnt) << 4, l3_miss_only, + reg.op_en, reg.op_val, reg.cnt_ctl, + reg.cnt_ctl ? "uOps" : "cycles", reg.opcurcnt); } =20 static void pr_ibs_op_data(union ibs_op_data reg) @@ -84,7 +99,34 @@ static void pr_ibs_op_data(union ibs_op_data reg) reg.op_brn_ret, reg.op_rip_invalid, reg.op_brn_fuse, reg.op_microcode); } =20 -static void pr_ibs_op_data2(union ibs_op_data2 reg) +static void pr_ibs_op_data2_extended(union ibs_op_data2 reg) +{ + static const char * const data_src_str[] =3D { + "", + " DataSrc 1=3DLocal L3 or other L1/L2 in CCX", + " DataSrc 2=3DA peer cache in a near CCX", + " DataSrc 3=3DData returned from DRAM", + " DataSrc 4=3D(reserved)", + " DataSrc 5=3DA peer cache in a far CCX", + " DataSrc 6=3DDRAM address map with \"long latency\" bit set", + " DataSrc 7=3DData returned from MMIO/Config/PCI/APIC", + " DataSrc 8=3DExtension Memory (S-Link, GenZ, etc)", + " DataSrc 9=3D(reserved)", + " DataSrc 10=3D(reserved)", + " DataSrc 11=3D(reserved)", + " DataSrc 12=3DPeer Agent Memory", + /* 13 to 31 are reserved. Avoid printing them. */ + }; + int data_src =3D (reg.data_src_hi << 3) | reg.data_src_lo; + + printf("ibs_op_data2:\t%016llx %sRmtNode %d%s\n", reg.val, + (data_src =3D=3D 1 || data_src =3D=3D 2 || data_src =3D=3D 5) ? + (reg.cache_hit_st ? "CacheHitSt 1=3DO-State " : "CacheHitSt 0=3DM-state= ") : "", + reg.rmt_node, + data_src < (int)ARRAY_SIZE(data_src_str) ? data_src_str[data_src] : ""); +} + +static void pr_ibs_op_data2_default(union ibs_op_data2 reg) { static const char * const data_src_str[] =3D { "", @@ -103,6 +145,13 @@ static void pr_ibs_op_data2(union ibs_op_data2 reg) reg.rmt_node, data_src_str[reg.data_src_lo]); } =20 +static void pr_ibs_op_data2(union ibs_op_data2 reg) +{ + if (zen4_ibs_extensions) + return pr_ibs_op_data2_extended(reg); + pr_ibs_op_data2_default(reg); +} + static void pr_ibs_op_data3(union ibs_op_data3 reg) { char l2_miss_str[sizeof(" L2Miss _")] =3D ""; @@ -279,6 +328,9 @@ bool evlist__has_amd_ibs(struct evlist *evlist) pmu_mapping +=3D strlen(pmu_mapping) + 1 /* '\0' */; } =20 + if (perf_env__find_pmu_cap(env, "ibs_op", "zen4_ibs_extensions")) + zen4_ibs_extensions =3D 1; + if (ibs_fetch_type || ibs_op_type) { if (!cpu_family) parse_cpuid(env); --=20 2.31.1