From mboxrd@z Thu Jan 1 00:00:00 1970 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 293B3C636DF for ; Wed, 28 Aug 2024 16:21:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: Content-Type:In-Reply-To:Cc:From:References:To:Subject:MIME-Version:Date: Message-ID:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=0L5T6bR47s8I9GFp4Od/4AURRtilJQBGgEgnTBuJ5/k=; b=kwkbzB33bdyzbwlnz7of1erbLg poBdy3woou2cL/NSjS41Q/6ZQfd2Mdhq1SclWorD846FYoF3YGP8wT+3NNppdunbqZF2BLt+IIEwE Fo5c3vx/F+KrPvSH5cVoFNePol4zS0QKih6xifNRIZ/K/Ab6C46a+afclDXzsT5oYVECVJ49RXnnm 3z4ISeY5uVMV8y5QsgK6Cbhk2DYuL9nwbE+tWvsRRcFgn39YsCIV9q8BDCr0R7D7ztReY5h4ov4Re lH22gsa3qZHdMBNLzGKH/6XWq84T+OXLwu8yreYS1/djSR5mPya9OkB6alPvJX1FateUZBJ7T9nNq Su1MJ19w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sjLPl-0000000GAir-1VQ5; Wed, 28 Aug 2024 16:20:57 +0000 Received: from mail-lj1-x229.google.com ([2a00:1450:4864:20::229]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sjLOv-0000000GAZm-3vqp for linux-arm-kernel@lists.infradead.org; Wed, 28 Aug 2024 16:20:07 +0000 Received: by mail-lj1-x229.google.com with SMTP id 38308e7fff4ca-2f51b67e16dso22992831fa.3 for ; Wed, 28 Aug 2024 09:20:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1724862004; x=1725466804; darn=lists.infradead.org; h=content-transfer-encoding:in-reply-to:cc:from:content-language :references:to:subject:user-agent:mime-version:date:message-id:from :to:cc:subject:date:message-id:reply-to; bh=0L5T6bR47s8I9GFp4Od/4AURRtilJQBGgEgnTBuJ5/k=; b=KKAkTz8U8ZkyvOM3MmPV6lQNhs0Tw0UeSlbakJU0KUY68UDzR+se+8R1nqrtJAUwhV xc487GSRxdihGfdSKcYSzcu6QAu3S8086YHF3f/0PrsyAarpAd3U4CnQwt0KJ3Lbt/FE VWUa5ZmkimxbxzqxtwqELY7l3cT+JuhIbjsrtn6Zs6DNpHvAkMSqzUbq8takPWbQnS0q oNTGgbZSKEqXSw4wzo6AWYbVEsk+VSzAJM/tLaS9VvhntNhKbZY2b8pH0fFIq7Nxd0tt SD2vSOoaREXDY1hL2VNPS9DMGeg9HyGg/8C4Y1wTwXE1z79Sr+dOj8dEoxAAovXIZS0P NiOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724862004; x=1725466804; h=content-transfer-encoding:in-reply-to:cc:from:content-language :references:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=0L5T6bR47s8I9GFp4Od/4AURRtilJQBGgEgnTBuJ5/k=; b=DtoeeeGOR2iuCzvbAHP+v1uDfraa0NMfEuU5VS2DAU/0KXk2n35eU5x27eTJO6KRl2 ZXBhlsxOT6SmeUxUmnT5lRTZ1oCDP8KBYbn5liC5nNW5wbDUWRNXlpXHpyz7vU5jyceE qP8lZtqlMDhWjgYH6mPQSajZry+HoRM23HbhR8MmcznaS8P9U+6YgCdGcoTwbq3/DUI1 XHx1Db6H7ryadqAJb4VnUfQtahVKxMfxoS8c2npbBBJRMf2ePUGNUo+hIXSgxnqLDG1r 0Cn9FwoEdt/99ZxXNCxrlnxD5aUGaVEqM6mIPSZ03YM4se770rUiX8c1GRbIaNrZ8RT4 OgaQ== X-Forwarded-Encrypted: i=1; AJvYcCUyQ+h8HQL0fTNACYLEZ6vjiFdHcvnZaEU0S0jJkeC5wNKJl6LAxiEx3dwabDm1m61Ip13QJsyBDW0ex24uPf9r@lists.infradead.org X-Gm-Message-State: AOJu0YyIBvlp7QtrKZZZzwahlr+dGbgFR5rQYprq660WGToredY1K0En SA5W5W6uOKXJIclxFHZQ+YIRNs6Vji0Pt+744bc5IpwBID48unEIOrV2I+skF3I= X-Google-Smtp-Source: AGHT+IFjEECQv/dy2V1ZZwU9whBHYkpP2eODfAABxUrPHqjiEIP4rRfdW9SwHOQ0hMzrY+Ls51Kb2A== X-Received: by 2002:a2e:a545:0:b0:2f3:f4e2:869c with SMTP id 38308e7fff4ca-2f6108ad29dmr1397731fa.44.1724862003484; Wed, 28 Aug 2024 09:20:03 -0700 (PDT) Received: from [192.168.1.3] ([89.47.253.130]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5c0bb4722b0sm2399288a12.69.2024.08.28.09.20.01 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 28 Aug 2024 09:20:02 -0700 (PDT) Message-ID: Date: Wed, 28 Aug 2024 17:20:01 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v1 9/9] perf arm-spe: Dump metadata with version 2 To: Leo Yan References: <20240827164417.3309560-1-leo.yan@arm.com> <20240827164417.3309560-10-leo.yan@arm.com> Content-Language: en-US From: James Clark Cc: Arnaldo Carvalho de Melo , Will Deacon , Mark Rutland , Suzuki K Poulose , Mike Leach , John Garry , Namhyung Kim , Ian Rogers , Adrian Hunter , "Liang, Kan" , Jonathan Cameron , Yicong Yang , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, coresight@lists.linaro.org, linux-perf-users@vger.kernel.org In-Reply-To: <20240827164417.3309560-10-leo.yan@arm.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240828_092006_044571_42424C2E X-CRM114-Status: GOOD ( 29.34 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On 27/08/2024 5:44 pm, Leo Yan wrote: > This commit dumps metadata with version 2. It uses two string arrays > metadata_hdr_fmts and metadata_per_cpu_fmts as string formats for the > header and per CPU data respectively, and the arm_spe_print_info() > function is enhanced to support dumping metadata with the version 2 > format. > > After: > > 0 0 0x4a8 [0x170]: PERF_RECORD_AUXTRACE_INFO type: 4 > PMU Type :13 > Version :2 > Num of CPUs :8 > CPU # :0 > MIDR :0x410fd801 > Bound PMU Type :-1 > Min Interval :0 > Load Data Source :0 > CPU # :1 > MIDR :0x410fd801 > Bound PMU Type :-1 > Min Interval :0 > Load Data Source :0 > CPU # :2 > MIDR :0x410fd870 > Bound PMU Type :13 > Min Interval :1024 > Load Data Source :1 > CPU # :3 > MIDR :0x410fd870 > Bound PMU Type :13 > Min Interval :1024 > Load Data Source :1 > CPU # :4 > MIDR :0x410fd870 > Bound PMU Type :13 > Min Interval :1024 > Load Data Source :1 > CPU # :5 > MIDR :0x410fd870 > Bound PMU Type :13 > Min Interval :1024 > Load Data Source :1 > CPU # :6 > MIDR :0x410fd850 > Bound PMU Type :14 > Min Interval :1024 > Load Data Source :1 > CPU # :7 > MIDR :0x410fd850 > Bound PMU Type :14 > Min Interval :1024 > Load Data Source :1 > > Signed-off-by: Leo Yan > --- > tools/perf/util/arm-spe.c | 43 ++++++++++++++++++++++++++++++++++----- > 1 file changed, 38 insertions(+), 5 deletions(-) > > diff --git a/tools/perf/util/arm-spe.c b/tools/perf/util/arm-spe.c > index 87cf06db765b..be34d4c4306a 100644 > --- a/tools/perf/util/arm-spe.c > +++ b/tools/perf/util/arm-spe.c > @@ -1067,16 +1067,49 @@ static bool arm_spe_evsel_is_auxtrace(struct perf_session *session __maybe_unuse > return strstarts(evsel->name, ARM_SPE_PMU_NAME); > } > > -static const char * const arm_spe_info_fmts[] = { > - [ARM_SPE_PMU_TYPE] = " PMU Type %"PRId64"\n", > +static const char * const metadata_hdr_fmts[] = { > + [ARM_SPE_PMU_TYPE] = " PMU Type :%"PRId64"\n", > + [ARM_SPE_HEADER_VERSION] = " Version :%"PRId64"\n", > + [ARM_SPE_CPU_NUM] = " Num of CPUs :%"PRId64"\n", > }; > > -static void arm_spe_print_info(__u64 *arr) > +static const char * const metadata_per_cpu_fmts[] = { > + [ARM_SPE_CPU] = " CPU # :%"PRId64"\n", > + [ARM_SPE_CPU_MIDR] = " MIDR :0x%"PRIx64"\n", > + [ARM_SPE_CPU_PMU_TYPE] = " Bound PMU Type :%"PRId64"\n", > + [ARM_SPE_CAP_MIN_IVAL] = " Min Interval :%"PRId64"\n", > + [ARM_SPE_CAP_LDS] = " Load Data Source :%"PRId64"\n", > +}; > + > +static void arm_spe_print_info(struct arm_spe *spe, __u64 *arr) > { > + unsigned int i, cpu, header_size, cpu_num, per_cpu_size; > + > if (!dump_trace) > return; > > - fprintf(stdout, arm_spe_info_fmts[ARM_SPE_PMU_TYPE], arr[ARM_SPE_PMU_TYPE]); > + if (spe->metadata_ver == 1) { > + cpu_num = 0; > + header_size = ARM_SPE_AUXTRACE_V1_PRIV_MAX; > + per_cpu_size = 0; > + } else if (spe->metadata_ver == 2) { Assuming future version updates are backwards compatible and only add new info this should be spe->metadata_ver >= 2, otherwise version bumps end up causing errors when files get passed around. I know there are arguments about what should and shouldn't be supported when opening new files on old perfs, but in this case it's easy to only add new info to the aux header and leave the old stuff intact. > + cpu_num = arr[ARM_SPE_CPU_NUM]; > + header_size = ARM_SPE_AUXTRACE_V2_PRIV_MAX; > + per_cpu_size = ARM_SPE_AUXTRACE_V2_PRIV_PER_CPU_MAX; I think for coresight we also save the size of each per-cpu block rather than use a constant, that way new items can be appended without breaking readers. That kind of leads to another point that this mechanism is mostly duplicated from coresight. It saves a main header version, then per-cpu groups of variable size with named elements. I'm not saying we should definitely try to share the code, but it's worth keeping in mind. > + } else { > + pr_err("Cannot support metadata ver: %ld\n", spe->metadata_ver); > + return; > + } > + > + for (i = 0; i < header_size; i++) > + fprintf(stdout, metadata_hdr_fmts[i], arr[i]); > + > + arr += header_size; > + for (cpu = 0; cpu < cpu_num; cpu++) { > + for (i = 0; i < per_cpu_size; i++) > + fprintf(stdout, metadata_per_cpu_fmts[i], arr[i]); > + arr += per_cpu_size; > + } > } > > static void arm_spe_set_event_name(struct evlist *evlist, u64 id, > @@ -1383,7 +1416,7 @@ int arm_spe_process_auxtrace_info(union perf_event *event, > spe->auxtrace.evsel_is_auxtrace = arm_spe_evsel_is_auxtrace; > session->auxtrace = &spe->auxtrace; > > - arm_spe_print_info(&auxtrace_info->priv[0]); > + arm_spe_print_info(spe, &auxtrace_info->priv[0]); > > if (dump_trace) > return 0;