Message ID | 20230522113040.2329924-1-kan.liang@linux.intel.com |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp1388227vqo; Mon, 22 May 2023 04:56:20 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5xafDO7i7z7DhJ78WAU4EhdOATfZ1ml/IYhsb2K5zkZTymrVdm9G6Kkqhum6+uXeK4/Dq5 X-Received: by 2002:a05:6a00:290a:b0:643:4608:7c2d with SMTP id cg10-20020a056a00290a00b0064346087c2dmr14061352pfb.12.1684756580315; Mon, 22 May 2023 04:56:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1684756580; cv=none; d=google.com; s=arc-20160816; b=y7Wtjmy9ki6FBUl7G8smNtMfCTQxFMjcso46r/lBza2yhyv8qgPZiR4z8Sym+3+b6R rtv3Dec1RPp+hQSJfN/9bCLdiVjyl9QVivVHhipxVkR8VUPQPD3qaoUCO1PoWDK1sJpc jmDaDULauc5iKFVOZxPxIX1fwYSV7uLBatN+eVMz/pY/neIegZW2frgM2gQEFYmie4LN J2LPuvx58UgJMVOlYxYIXQlyk0OlOd1zD+mvBNVCkTDnt+MDz4OaQyd91VFUfL67eymg M75B+fIaNWi8wk8YQgMKj2b+lj2+5FPYiW1lWtE4NIVgFLo6M6TxO3EzOdeKOOciynuf 4skg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=wyXsgoPne4Fk/eqLtJJm6Mh5WR5k2BaxxF8CmWginXk=; b=GYPXi1bHlq1bSV1toj15iURuCBwpEE/YJU3xpgSU86KWgMPWJ0F5dltfb17rTHxhps i8f0VC+/ZsCtU3sVHSVtmlflb0lPIrMI1ByS75LFSCiXWfF+2t5RPkbGPmMmwvmzI0UG qSsfOIyWmuAwhNhpcMbdRLB3cBphZbUYrhwgvUEO6l5QUBoQfnNBeoiv8+Ain0g3+v6y 9sqAyWEEX6fzfu+UfSWokuDzZ5apC9M5WiplKMsQksNTZjMPwZG5Wp9gtMY+SRVCOruC dsaOT9HA/0ZQqwaLZsdHPFswu/xzJwILCfX7UPtyZJ7TGmfLe2vZj8NNXw2Tf2khyrm1 1Hag== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=hf89YbJy; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id z2-20020aa79582000000b0064d740b7459si1119161pfj.102.2023.05.22.04.56.05; Mon, 22 May 2023 04:56:20 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=hf89YbJy; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230018AbjEVLbM (ORCPT <rfc822;cscallsign@gmail.com> + 99 others); Mon, 22 May 2023 07:31:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43912 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230424AbjEVLbJ (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Mon, 22 May 2023 07:31:09 -0400 Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 164A5DC for <linux-kernel@vger.kernel.org>; Mon, 22 May 2023 04:30:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1684755056; x=1716291056; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=pcNY+douPUH+tIBftDWU0u4zR1ZXX1Y9AQDCN8nPlSc=; b=hf89YbJyzCy/N4FfGBvpzRXlOb1KULfWII0448OvlQUmjAPmj9/EwJob 2/LqlPbbBwfEJvf73Ke17WdbSIc7TFEANHXwkAQtx9n4YEOZ+wCfxYNfp 9H8fXhqGlKHb4DuXh2E/drFwDC5LpphRul7AHTXm02FD/XKS2HOH4U5sH 6w1Lu8Sb21eY5/lFCSQNL7WMRFN5Twh3/+nATTppAHpIEmR/MGs6+pdWf thcaHYCeFqdO7xVLMzUgZmqcYGDQUQH2h/Ge3cwFvU9yii8/Sy4ySdUdC L+WVrPzO6MkTqKNIBmoFo+ZYFUuB+kcytH9BW6ekc8wHF7VWyZt+3ilbK A==; X-IronPort-AV: E=McAfee;i="6600,9927,10717"; a="416356729" X-IronPort-AV: E=Sophos;i="6.00,184,1681196400"; d="scan'208";a="416356729" Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 22 May 2023 04:30:55 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10717"; a="703468236" X-IronPort-AV: E=Sophos;i="6.00,184,1681196400"; d="scan'208";a="703468236" Received: from kanliang-dev.jf.intel.com ([10.165.154.102]) by orsmga002.jf.intel.com with ESMTP; 22 May 2023 04:30:55 -0700 From: kan.liang@linux.intel.com To: peterz@infradead.org, mingo@redhat.com, acme@kernel.org, linux-kernel@vger.kernel.org Cc: mark.rutland@arm.com, alexander.shishkin@linux.intel.com, jolsa@kernel.org, namhyung@kernel.org, irogers@google.com, adrian.hunter@intel.com, ak@linux.intel.com, eranian@google.com, alexey.v.bayduraev@linux.intel.com, tinghao.zhang@intel.com, Kan Liang <kan.liang@linux.intel.com> Subject: [PATCH V2 1/6] perf/x86/intel: Add Grand Ridge and Sierra Forest Date: Mon, 22 May 2023 04:30:35 -0700 Message-Id: <20230522113040.2329924-1-kan.liang@linux.intel.com> X-Mailer: git-send-email 2.35.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_NONE,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1766595315839921534?= X-GMAIL-MSGID: =?utf-8?q?1766595315839921534?= |
Series |
[V2,1/6] perf/x86/intel: Add Grand Ridge and Sierra Forest
|
|
Commit Message
Liang, Kan
May 22, 2023, 11:30 a.m. UTC
From: Kan Liang <kan.liang@linux.intel.com> The Grand Ridge and Sierra Forest are successors to Snow Ridge. They both have Crestmont core. From the core PMU's perspective, they are similar to the e-core of MTL. The only difference is the LBR event logging feature, which will be implemented in the following patches. Create a non-hybrid PMU setup for Grand Ridge and Sierra Forest. Reviewed-by: Andi Kleen <ak@linux.intel.com> Signed-off-by: Kan Liang <kan.liang@linux.intel.com> --- No changes since V1. arch/x86/events/intel/core.c | 52 +++++++++++++++++++++++++++++++++++- arch/x86/events/intel/ds.c | 9 +++++-- arch/x86/events/perf_event.h | 2 ++ 3 files changed, 60 insertions(+), 3 deletions(-)
Comments
On Mon, May 22, 2023 at 04:30:35AM -0700, kan.liang@linux.intel.com wrote: > From: Kan Liang <kan.liang@linux.intel.com> > > The Grand Ridge and Sierra Forest are successors to Snow Ridge. They > both have Crestmont core. From the core PMU's perspective, they are > similar to the e-core of MTL. The only difference is the LBR event > logging feature, which will be implemented in the following patches. > > Create a non-hybrid PMU setup for Grand Ridge and Sierra Forest. Moo... Tony, did you sneak product names instead of uarch names in the intel-family thing again? That is; I'm thinking we want the below, no? --- diff --git a/arch/x86/include/asm/intel-family.h b/arch/x86/include/asm/intel-family.h index b3af2d45bbbb..0e804d189e63 100644 --- a/arch/x86/include/asm/intel-family.h +++ b/arch/x86/include/asm/intel-family.h @@ -116,16 +116,16 @@ #define INTEL_FAM6_ALDERLAKE_L 0x9A /* Golden Cove / Gracemont */ #define INTEL_FAM6_ALDERLAKE_N 0xBE -#define INTEL_FAM6_RAPTORLAKE 0xB7 +#define INTEL_FAM6_RAPTORLAKE 0xB7 /* Raptor Cove / Enhanced Gracemont */ #define INTEL_FAM6_RAPTORLAKE_P 0xBA #define INTEL_FAM6_RAPTORLAKE_S 0xBF -#define INTEL_FAM6_METEORLAKE 0xAC +#define INTEL_FAM6_METEORLAKE 0xAC /* Redwood Cove / Crestmont */ #define INTEL_FAM6_METEORLAKE_L 0xAA -#define INTEL_FAM6_LUNARLAKE_M 0xBD +#define INTEL_FAM6_ARROWLAKE 0xC6 /* Lion Cove / Skymont */ -#define INTEL_FAM6_ARROWLAKE 0xC6 +#define INTEL_FAM6_LUNARLAKE_M 0xBD /* "Small Core" Processors (Atom/E-Core) */ @@ -154,9 +154,8 @@ #define INTEL_FAM6_ATOM_TREMONT 0x96 /* Elkhart Lake */ #define INTEL_FAM6_ATOM_TREMONT_L 0x9C /* Jasper Lake */ -#define INTEL_FAM6_SIERRAFOREST_X 0xAF - -#define INTEL_FAM6_GRANDRIDGE 0xB6 +#define INTEL_FAM6_ATOM_CRESTMONT_X 0xAF /* Sierra Forest */ +#define INTEL_FAM6_ATOM_CRESTMONT 0xB6 /* Grand Ridge */ /* Xeon Phi */
> Moo... Tony, did you sneak product names instead of uarch names in the > intel-family thing again? The difficult part is that I've finally got Intel to release product names reasonable time ahead of launch. But details like which core architecture is used by each lags behind. But I think you just announced the Crestmont core. -Tony
On Mon, May 22, 2023 at 08:42:14PM +0000, Luck, Tony wrote: > > Moo... Tony, did you sneak product names instead of uarch names in the > > intel-family thing again? > > The difficult part is that I've finally got Intel to release product names reasonable > time ahead of launch. But details like which core architecture is used by each > lags behind. > > But I think you just announced the Crestmont core. Crestmont was in Kan's original Changelog, also: https://en.wikichip.org/wiki/intel/microarchitectures/meteor_lake has: Core Names Redwood Cove, Crestmont And: https://wccftech.com/intel-next-gen-arrow-lake-lunar-lake-cpus-get-preliminary-support-in-aida64/ has a giant list of names too. Basically, I never can remember these things and I use Google because I can't be bothered to learn how the intraweb muck works.
Hi Peter, On 2023-05-22 7:30 a.m., kan.liang@linux.intel.com wrote: > From: Kan Liang <kan.liang@linux.intel.com> > > The Grand Ridge and Sierra Forest are successors to Snow Ridge. They > both have Crestmont core. From the core PMU's perspective, they are > similar to the e-core of MTL. The only difference is the LBR event > logging feature, which will be implemented in the following patches. > > Create a non-hybrid PMU setup for Grand Ridge and Sierra Forest. > > Reviewed-by: Andi Kleen <ak@linux.intel.com> > Signed-off-by: Kan Liang <kan.liang@linux.intel.com> > --- > Gentle ping. Do you have any comments for the patch set? The patch set based on the perf/core branch which doesn't include the latest fix, 90befef5a9e8 ("perf/x86: Fix missing sample size update on AMD BRS"). https://lore.kernel.org/lkml/2f09023a-cccb-35df-da0a-d245ee5238be@linux.intel.com/ Should I rebase it on the perf/urgent and send the V3? Thanks, Kan > No changes since V1. > > arch/x86/events/intel/core.c | 52 +++++++++++++++++++++++++++++++++++- > arch/x86/events/intel/ds.c | 9 +++++-- > arch/x86/events/perf_event.h | 2 ++ > 3 files changed, 60 insertions(+), 3 deletions(-) > > diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c > index a3fb996a86a1..ba2a971e6b8a 100644 > --- a/arch/x86/events/intel/core.c > +++ b/arch/x86/events/intel/core.c > @@ -2119,6 +2119,17 @@ static struct extra_reg intel_grt_extra_regs[] __read_mostly = { > EVENT_EXTRA_END > }; > > +EVENT_ATTR_STR(topdown-retiring, td_retiring_cmt, "event=0x72,umask=0x0"); > +EVENT_ATTR_STR(topdown-bad-spec, td_bad_spec_cmt, "event=0x73,umask=0x0"); > + > +static struct attribute *cmt_events_attrs[] = { > + EVENT_PTR(td_fe_bound_tnt), > + EVENT_PTR(td_retiring_cmt), > + EVENT_PTR(td_bad_spec_cmt), > + EVENT_PTR(td_be_bound_tnt), > + NULL > +}; > + > static struct extra_reg intel_cmt_extra_regs[] __read_mostly = { > /* must define OFFCORE_RSP_X first, see intel_fixup_er() */ > INTEL_UEVENT_EXTRA_REG(0x01b7, MSR_OFFCORE_RSP_0, 0x800ff3ffffffffffull, RSP_0), > @@ -4830,6 +4841,8 @@ PMU_FORMAT_ATTR(ldlat, "config1:0-15"); > > PMU_FORMAT_ATTR(frontend, "config1:0-23"); > > +PMU_FORMAT_ATTR(snoop_rsp, "config1:0-63"); > + > static struct attribute *intel_arch3_formats_attr[] = { > &format_attr_event.attr, > &format_attr_umask.attr, > @@ -4860,6 +4873,13 @@ static struct attribute *slm_format_attr[] = { > NULL > }; > > +static struct attribute *cmt_format_attr[] = { > + &format_attr_offcore_rsp.attr, > + &format_attr_ldlat.attr, > + &format_attr_snoop_rsp.attr, > + NULL > +}; > + > static struct attribute *skl_format_attr[] = { > &format_attr_frontend.attr, > NULL, > @@ -5630,7 +5650,6 @@ static struct attribute *adl_hybrid_extra_attr[] = { > NULL > }; > > -PMU_FORMAT_ATTR_SHOW(snoop_rsp, "config1:0-63"); > FORMAT_ATTR_HYBRID(snoop_rsp, hybrid_small); > > static struct attribute *mtl_hybrid_extra_attr_rtm[] = { > @@ -6178,6 +6197,37 @@ __init int intel_pmu_init(void) > name = "gracemont"; > break; > > + case INTEL_FAM6_GRANDRIDGE: > + case INTEL_FAM6_SIERRAFOREST_X: > + x86_pmu.mid_ack = true; > + memcpy(hw_cache_event_ids, glp_hw_cache_event_ids, > + sizeof(hw_cache_event_ids)); > + memcpy(hw_cache_extra_regs, tnt_hw_cache_extra_regs, > + sizeof(hw_cache_extra_regs)); > + hw_cache_event_ids[C(ITLB)][C(OP_READ)][C(RESULT_ACCESS)] = -1; > + > + x86_pmu.event_constraints = intel_slm_event_constraints; > + x86_pmu.pebs_constraints = intel_grt_pebs_event_constraints; > + x86_pmu.extra_regs = intel_cmt_extra_regs; > + > + x86_pmu.pebs_aliases = NULL; > + x86_pmu.pebs_prec_dist = true; > + x86_pmu.lbr_pt_coexist = true; > + x86_pmu.pebs_block = true; > + x86_pmu.flags |= PMU_FL_HAS_RSP_1; > + x86_pmu.flags |= PMU_FL_INSTR_LATENCY; > + > + intel_pmu_pebs_data_source_cmt(); > + x86_pmu.pebs_latency_data = mtl_latency_data_small; > + x86_pmu.get_event_constraints = cmt_get_event_constraints; > + x86_pmu.limit_period = spr_limit_period; > + td_attr = cmt_events_attrs; > + mem_attr = grt_mem_attrs; > + extra_attr = cmt_format_attr; > + pr_cont("Crestmont events, "); > + name = "crestmont"; > + break; > + > case INTEL_FAM6_WESTMERE: > case INTEL_FAM6_WESTMERE_EP: > case INTEL_FAM6_WESTMERE_EX: > diff --git a/arch/x86/events/intel/ds.c b/arch/x86/events/intel/ds.c > index a2e566e53076..608e220e46aa 100644 > --- a/arch/x86/events/intel/ds.c > +++ b/arch/x86/events/intel/ds.c > @@ -144,7 +144,7 @@ void __init intel_pmu_pebs_data_source_adl(void) > __intel_pmu_pebs_data_source_grt(data_source); > } > > -static void __init intel_pmu_pebs_data_source_cmt(u64 *data_source) > +static void __init __intel_pmu_pebs_data_source_cmt(u64 *data_source) > { > data_source[0x07] = OP_LH | P(LVL, L3) | LEVEL(L3) | P(SNOOPX, FWD); > data_source[0x08] = OP_LH | P(LVL, L3) | LEVEL(L3) | P(SNOOP, HITM); > @@ -164,7 +164,12 @@ void __init intel_pmu_pebs_data_source_mtl(void) > > data_source = x86_pmu.hybrid_pmu[X86_HYBRID_PMU_ATOM_IDX].pebs_data_source; > memcpy(data_source, pebs_data_source, sizeof(pebs_data_source)); > - intel_pmu_pebs_data_source_cmt(data_source); > + __intel_pmu_pebs_data_source_cmt(data_source); > +} > + > +void __init intel_pmu_pebs_data_source_cmt(void) > +{ > + __intel_pmu_pebs_data_source_cmt(pebs_data_source); > } > > static u64 precise_store_data(u64 status) > diff --git a/arch/x86/events/perf_event.h b/arch/x86/events/perf_event.h > index d6de4487348c..c8ba2be7585d 100644 > --- a/arch/x86/events/perf_event.h > +++ b/arch/x86/events/perf_event.h > @@ -1606,6 +1606,8 @@ void intel_pmu_pebs_data_source_grt(void); > > void intel_pmu_pebs_data_source_mtl(void); > > +void intel_pmu_pebs_data_source_cmt(void); > + > int intel_pmu_setup_lbr_filter(struct perf_event *event); > > void intel_pt_interrupt(void);
On Tue, Jun 06, 2023 at 08:42:42AM -0400, Liang, Kan wrote: > Hi Peter, > > On 2023-05-22 7:30 a.m., kan.liang@linux.intel.com wrote: > > From: Kan Liang <kan.liang@linux.intel.com> > > > > The Grand Ridge and Sierra Forest are successors to Snow Ridge. They > > both have Crestmont core. From the core PMU's perspective, they are > > similar to the e-core of MTL. The only difference is the LBR event > > logging feature, which will be implemented in the following patches. > > > > Create a non-hybrid PMU setup for Grand Ridge and Sierra Forest. > > > > Reviewed-by: Andi Kleen <ak@linux.intel.com> > > Signed-off-by: Kan Liang <kan.liang@linux.intel.com> > > --- > > > > > Gentle ping. > > Do you have any comments for the patch set? > > The patch set based on the perf/core branch which doesn't > include the latest fix, 90befef5a9e8 ("perf/x86: Fix missing sample size > update on AMD BRS"). > https://lore.kernel.org/lkml/2f09023a-cccb-35df-da0a-d245ee5238be@linux.intel.com/ > > Should I rebase it on the perf/urgent and send the V3? > I can pull urgent into perf/core, but: > > + case INTEL_FAM6_GRANDRIDGE: > > + case INTEL_FAM6_SIERRAFOREST_X: ^^^^^^^^^^^^^^^ Those are just plain wrong; please fix up the intel-family.h thing like suggested earlier in this thread. And Tony, please no more of that platform name nonsense.. we want uarch names for a reason, so that enums like the above become something sensible like: case INTEL_FAM6_ATOM_CRESTMONT: case INTEL_FAM6_ATOM_CRESTMONT_X: and now it's super obvious why they're grouped. > > + pr_cont("Crestmont events, ");
On 2023-06-06 9:24 a.m., Peter Zijlstra wrote: > On Tue, Jun 06, 2023 at 08:42:42AM -0400, Liang, Kan wrote: >> Hi Peter, >> >> On 2023-05-22 7:30 a.m., kan.liang@linux.intel.com wrote: >>> From: Kan Liang <kan.liang@linux.intel.com> >>> >>> The Grand Ridge and Sierra Forest are successors to Snow Ridge. They >>> both have Crestmont core. From the core PMU's perspective, they are >>> similar to the e-core of MTL. The only difference is the LBR event >>> logging feature, which will be implemented in the following patches. >>> >>> Create a non-hybrid PMU setup for Grand Ridge and Sierra Forest. >>> >>> Reviewed-by: Andi Kleen <ak@linux.intel.com> >>> Signed-off-by: Kan Liang <kan.liang@linux.intel.com> >>> --- >>> >> >> >> Gentle ping. >> >> Do you have any comments for the patch set? >> >> The patch set based on the perf/core branch which doesn't >> include the latest fix, 90befef5a9e8 ("perf/x86: Fix missing sample size >> update on AMD BRS"). >> https://lore.kernel.org/lkml/2f09023a-cccb-35df-da0a-d245ee5238be@linux.intel.com/ >> >> Should I rebase it on the perf/urgent and send the V3? >> > > I can pull urgent into perf/core, but: Thanks. > >>> + case INTEL_FAM6_GRANDRIDGE: >>> + case INTEL_FAM6_SIERRAFOREST_X: > ^^^^^^^^^^^^^^^ > > Those are just plain wrong; please fix up the intel-family.h thing like > suggested earlier in this thread. >> And Tony, please no more of that platform name nonsense.. we want uarch > names for a reason, so that enums like the above become something > sensible like: > > case INTEL_FAM6_ATOM_CRESTMONT: > case INTEL_FAM6_ATOM_CRESTMONT_X: > > and now it's super obvious why they're grouped. > >>> + pr_cont("Crestmont events, "); The Sierra Forest should not be a platform name. I think it's the code name of the processor. The problem is that the uarch name doesn't work for the hybrid, since it has different uarchs in the same processors. To make the naming rules consistent among big core, atom, and hybrid, maybe we should use the code name of the processor in intel-family.h. I will propose a patch to update the rules of using the processor name. I think we may want to have further discussion there. Thanks, Kan
On Tue, Jun 06, 2023 at 12:16:29PM -0400, Liang, Kan wrote: > > names for a reason, so that enums like the above become something > > sensible like: > > > > case INTEL_FAM6_ATOM_CRESTMONT: > > case INTEL_FAM6_ATOM_CRESTMONT_X: > > > > and now it's super obvious why they're grouped. > > > >>> + pr_cont("Crestmont events, "); > > The Sierra Forest should not be a platform name. I think it's the code > name of the processor. > > The problem is that the uarch name doesn't work for the hybrid, since it > has different uarchs in the same processors. To make the naming rules > consistent among big core, atom, and hybrid, maybe we should use the > code name of the processor in intel-family.h. I obviously disagree; these are not hybrid and calling them both CRESTMONT makes *far* more sense than the random gibberish they're called now. Yes, hybrid made a complete mess of things (in many ways), but we should then not do the obvious correct thing for when we can.
On 2023-06-06 2:17 p.m., Peter Zijlstra wrote: > On Tue, Jun 06, 2023 at 12:16:29PM -0400, Liang, Kan wrote: > >>> names for a reason, so that enums like the above become something >>> sensible like: >>> >>> case INTEL_FAM6_ATOM_CRESTMONT: >>> case INTEL_FAM6_ATOM_CRESTMONT_X: >>> >>> and now it's super obvious why they're grouped. >>> >>>>> + pr_cont("Crestmont events, "); >> >> The Sierra Forest should not be a platform name. I think it's the code >> name of the processor. >> >> The problem is that the uarch name doesn't work for the hybrid, since it >> has different uarchs in the same processors. To make the naming rules >> consistent among big core, atom, and hybrid, maybe we should use the >> code name of the processor in intel-family.h. > > I obviously disagree; these are not hybrid and calling them both > CRESTMONT makes *far* more sense than the random gibberish they're > called now. > > Yes, hybrid made a complete mess of things (in many ways), but we should > then not do the obvious correct thing for when we can. Besides hybrid, it seems there is a bigger problem for the big core. The big core uses the processor code name since Ice Lake. In the perf code, we also uses the processor code name for the big core. pr_cont("Icelake events, "); Is it OK to leave the big core as is (using processor code name), but only change the name for Grand Ridge and Sierra Forest? Thanks, Kan
On Tue, Jun 06, 2023 at 02:34:47PM -0400, Liang, Kan wrote: > > > On 2023-06-06 2:17 p.m., Peter Zijlstra wrote: > > On Tue, Jun 06, 2023 at 12:16:29PM -0400, Liang, Kan wrote: > > > >>> names for a reason, so that enums like the above become something > >>> sensible like: > >>> > >>> case INTEL_FAM6_ATOM_CRESTMONT: > >>> case INTEL_FAM6_ATOM_CRESTMONT_X: > >>> > >>> and now it's super obvious why they're grouped. > >>> > >>>>> + pr_cont("Crestmont events, "); > >> > >> The Sierra Forest should not be a platform name. I think it's the code > >> name of the processor. > >> > >> The problem is that the uarch name doesn't work for the hybrid, since it > >> has different uarchs in the same processors. To make the naming rules > >> consistent among big core, atom, and hybrid, maybe we should use the > >> code name of the processor in intel-family.h. > > > > I obviously disagree; these are not hybrid and calling them both > > CRESTMONT makes *far* more sense than the random gibberish they're > > called now. > > > > Yes, hybrid made a complete mess of things (in many ways), but we should > > then not do the obvious correct thing for when we can. > > Besides hybrid, it seems there is a bigger problem for the big core. > > The big core uses the processor code name since Ice Lake. In the perf > code, we also uses the processor code name for the big core. > pr_cont("Icelake events, "); Yeah, it's a mess :/ Ideally that would print "Sunny Cove", but I think there's userspace looking at that string :-( > Is it OK to leave the big core as is (using processor code name), but > only change the name for Grand Ridge and Sierra Forest? Arguably we should also rename ALDERLAKE_N to ATOM_GRACEMONT We should also do something about that whole hybrid init thing, the meteorlake stuff is quite a mess as well. Perhaps we can add hybrid_pmu next to intel_pmu to have a better start in life for x86_pmu. Anyway, we should really try not to make a bigger mess and try and clean up where we can.
On 2023-06-06 3:37 p.m., Peter Zijlstra wrote: > On Tue, Jun 06, 2023 at 02:34:47PM -0400, Liang, Kan wrote: >> >> >> On 2023-06-06 2:17 p.m., Peter Zijlstra wrote: >>> On Tue, Jun 06, 2023 at 12:16:29PM -0400, Liang, Kan wrote: >>> >>>>> names for a reason, so that enums like the above become something >>>>> sensible like: >>>>> >>>>> case INTEL_FAM6_ATOM_CRESTMONT: >>>>> case INTEL_FAM6_ATOM_CRESTMONT_X: >>>>> >>>>> and now it's super obvious why they're grouped. >>>>> >>>>>>> + pr_cont("Crestmont events, "); >>>> >>>> The Sierra Forest should not be a platform name. I think it's the code >>>> name of the processor. >>>> >>>> The problem is that the uarch name doesn't work for the hybrid, since it >>>> has different uarchs in the same processors. To make the naming rules >>>> consistent among big core, atom, and hybrid, maybe we should use the >>>> code name of the processor in intel-family.h. >>> >>> I obviously disagree; these are not hybrid and calling them both >>> CRESTMONT makes *far* more sense than the random gibberish they're >>> called now. >>> >>> Yes, hybrid made a complete mess of things (in many ways), but we should >>> then not do the obvious correct thing for when we can. >> >> Besides hybrid, it seems there is a bigger problem for the big core. >> >> The big core uses the processor code name since Ice Lake. In the perf >> code, we also uses the processor code name for the big core. >> pr_cont("Icelake events, "); > > Yeah, it's a mess :/ Ideally that would print "Sunny Cove", but I think > there's userspace looking at that string :-( Yes, for the existing names, we probably cannot change it. I will try to only use the micro-architecture name for the future platforms in perf. > >> Is it OK to leave the big core as is (using processor code name), but >> only change the name for Grand Ridge and Sierra Forest? > > Arguably we should also rename ALDERLAKE_N to ATOM_GRACEMONT > > > We should also do something about that whole hybrid init thing, the > meteorlake stuff is quite a mess as well. Perhaps we can add hybrid_pmu > next to intel_pmu to have a better start in life for x86_pmu. > I will think about it and try to clean up the hybrid init. > Anyway, we should really try not to make a bigger mess and try and clean > up where we can. Sure. Thanks, Kan
> > Create a non-hybrid PMU setup for Grand Ridge and Sierra Forest. > > Moo... Tony, did you sneak product names instead of uarch names in the > intel-family thing again? > > That is; I'm thinking we want the below, no? > > -#define INTEL_FAM6_SIERRAFOREST_X 0xAF > - > -#define INTEL_FAM6_GRANDRIDGE 0xB6 > +#define INTEL_FAM6_ATOM_CRESTMONT_X 0xAF /* Sierra Forest */ > +#define INTEL_FAM6_ATOM_CRESTMONT 0xB6 /* Grand Ridge */ I don't think that's really any more helpful. Using the code name of the model makes it easy to look things up in ark.intel.com. Using the "core" name doesn't even work for hybrid CPU models which have more than one core type. So I'd like to keep it as it is. But if you want to change to the core name, then please just do it now. There are folks internally worried that all upstream work for these two CPU models is going to be blocked while this is discussed. -Tony
On Wed, Jun 07, 2023 at 09:43:57PM +0000, Luck, Tony wrote: > > > Create a non-hybrid PMU setup for Grand Ridge and Sierra Forest. > > > > Moo... Tony, did you sneak product names instead of uarch names in the > > intel-family thing again? > > > > That is; I'm thinking we want the below, no? > > > > -#define INTEL_FAM6_SIERRAFOREST_X 0xAF > > - > > -#define INTEL_FAM6_GRANDRIDGE 0xB6 > > +#define INTEL_FAM6_ATOM_CRESTMONT_X 0xAF /* Sierra Forest */ > > +#define INTEL_FAM6_ATOM_CRESTMONT 0xB6 /* Grand Ridge */ > > I don't think that's really any more helpful. Well, it clearly shows why these two are grouped together. They are the same bloody uarch. OTOH 'Sierra Forest' and 'Grand Ridge' is just random gibberish that nobody can relate without looking up some website. > Using the code name of the model makes it easy to look things > up in ark.intel.com. Using the "core" name doesn't even work for > hybrid CPU models which have more than one core type. > So I'd like to keep it as it is. ark.intel.com is a travesty anyway... if I get it as a result to a Google query I will almost always avoid it because it is not useful. Wikipedia and Wikichip are by far more useful. > But if you want to change to the core name, then please just > do it now. > > There are folks internally worried that all upstream work for > these two CPU models is going to be blocked while this > is discussed. Then I'm hoping their take-away is that random gibberish names don't help anybody. The whole Intel naming scheme is impenetrable crap.
> Then I'm hoping their take-away is that random gibberish names don't > help anybody. The whole Intel naming scheme is impenetrable crap. > > +#define INTEL_FAM6_ATOM_CRESTMONT_X 0xAF /* Sierra Forest */ > > +#define INTEL_FAM6_ATOM_CRESTMONT 0xB6 /* Grand Ridge */ This just adds another layer of confusion. Sure, these two models are based on the same core. But giving the illusion that they are somehow the same will lead to tears before bedtime: 1) They each took a snapshot of that core design on different dates, so there are logic differences. 2) Feature fuses will be different 3) Microcode will be different 4) BIOS will be different 5) "uncore" is different, so anything implemented outside of the core will be different. -Tony
On Thu, Jun 08, 2023 at 04:20:22PM +0000, Luck, Tony wrote: > > Then I'm hoping their take-away is that random gibberish names don't > > help anybody. The whole Intel naming scheme is impenetrable crap. > > > > +#define INTEL_FAM6_ATOM_CRESTMONT_X 0xAF /* Sierra Forest */ > > > +#define INTEL_FAM6_ATOM_CRESTMONT 0xB6 /* Grand Ridge */ > > This just adds another layer of confusion. Sure, these two models are based > on the same core. But giving the illusion that they are somehow the same will > lead to tears before bedtime: > > 1) They each took a snapshot of that core design on different dates, so there > are logic differences. > 2) Feature fuses will be different > 3) Microcode will be different > 4) BIOS will be different > 5) "uncore" is different, so anything implemented outside of the core > will be different. This thread stalled. But the internal conversation continued. There seems a strong argument that enough things changed when Xeon-izing the core to go into Sierra Forest that using Crestmont will cause confusion in more places than it helps. There seem to be some internal folks using an entirely different name for this core (which I won't repeat here, but some of the usual external sites have mentions of this other name). Can we just keep: #define INTEL_FAM6_SIERRAFOREST_X 0xAF and move on to more interesting things? -Tony
On Thu, Jun 08, 2023 at 04:20:22PM +0000, Luck, Tony wrote: > > Then I'm hoping their take-away is that random gibberish names don't > > help anybody. The whole Intel naming scheme is impenetrable crap. > > > > +#define INTEL_FAM6_ATOM_CRESTMONT_X 0xAF /* Sierra Forest */ > > > +#define INTEL_FAM6_ATOM_CRESTMONT 0xB6 /* Grand Ridge */ > > This just adds another layer of confusion. Sure, these two models are based > on the same core. But giving the illusion that they are somehow the same will > lead to tears before bedtime: > > 1) They each took a snapshot of that core design on different dates, so there > are logic differences. > 2) Feature fuses will be different > 3) Microcode will be different > 4) BIOS will be different > 5) "uncore" is different, so anything implemented outside of the core > will be different. All those things are true for INTEL_FAM6_SKYLAKE vs INTEL_FAM6_SKYLAKE_X and all the other pre-hybrid desktop/server parts. And we used to do the same with the previous ATOM things, see GOLDMONT / GOLDMONT_D, TREMONT / TREMONT_D etc.. So why should this atom be treated differently? We get a server atom and a client atom, yes they different in all the usual way, but they still more similar to one another than to any other random chip we have. In short, we used to have this for core parts, we used to have this for atom parts, but now we magically need to break from it? Anyway, let me do the rename and squish everything into a git tree.
diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c index a3fb996a86a1..ba2a971e6b8a 100644 --- a/arch/x86/events/intel/core.c +++ b/arch/x86/events/intel/core.c @@ -2119,6 +2119,17 @@ static struct extra_reg intel_grt_extra_regs[] __read_mostly = { EVENT_EXTRA_END }; +EVENT_ATTR_STR(topdown-retiring, td_retiring_cmt, "event=0x72,umask=0x0"); +EVENT_ATTR_STR(topdown-bad-spec, td_bad_spec_cmt, "event=0x73,umask=0x0"); + +static struct attribute *cmt_events_attrs[] = { + EVENT_PTR(td_fe_bound_tnt), + EVENT_PTR(td_retiring_cmt), + EVENT_PTR(td_bad_spec_cmt), + EVENT_PTR(td_be_bound_tnt), + NULL +}; + static struct extra_reg intel_cmt_extra_regs[] __read_mostly = { /* must define OFFCORE_RSP_X first, see intel_fixup_er() */ INTEL_UEVENT_EXTRA_REG(0x01b7, MSR_OFFCORE_RSP_0, 0x800ff3ffffffffffull, RSP_0), @@ -4830,6 +4841,8 @@ PMU_FORMAT_ATTR(ldlat, "config1:0-15"); PMU_FORMAT_ATTR(frontend, "config1:0-23"); +PMU_FORMAT_ATTR(snoop_rsp, "config1:0-63"); + static struct attribute *intel_arch3_formats_attr[] = { &format_attr_event.attr, &format_attr_umask.attr, @@ -4860,6 +4873,13 @@ static struct attribute *slm_format_attr[] = { NULL }; +static struct attribute *cmt_format_attr[] = { + &format_attr_offcore_rsp.attr, + &format_attr_ldlat.attr, + &format_attr_snoop_rsp.attr, + NULL +}; + static struct attribute *skl_format_attr[] = { &format_attr_frontend.attr, NULL, @@ -5630,7 +5650,6 @@ static struct attribute *adl_hybrid_extra_attr[] = { NULL }; -PMU_FORMAT_ATTR_SHOW(snoop_rsp, "config1:0-63"); FORMAT_ATTR_HYBRID(snoop_rsp, hybrid_small); static struct attribute *mtl_hybrid_extra_attr_rtm[] = { @@ -6178,6 +6197,37 @@ __init int intel_pmu_init(void) name = "gracemont"; break; + case INTEL_FAM6_GRANDRIDGE: + case INTEL_FAM6_SIERRAFOREST_X: + x86_pmu.mid_ack = true; + memcpy(hw_cache_event_ids, glp_hw_cache_event_ids, + sizeof(hw_cache_event_ids)); + memcpy(hw_cache_extra_regs, tnt_hw_cache_extra_regs, + sizeof(hw_cache_extra_regs)); + hw_cache_event_ids[C(ITLB)][C(OP_READ)][C(RESULT_ACCESS)] = -1; + + x86_pmu.event_constraints = intel_slm_event_constraints; + x86_pmu.pebs_constraints = intel_grt_pebs_event_constraints; + x86_pmu.extra_regs = intel_cmt_extra_regs; + + x86_pmu.pebs_aliases = NULL; + x86_pmu.pebs_prec_dist = true; + x86_pmu.lbr_pt_coexist = true; + x86_pmu.pebs_block = true; + x86_pmu.flags |= PMU_FL_HAS_RSP_1; + x86_pmu.flags |= PMU_FL_INSTR_LATENCY; + + intel_pmu_pebs_data_source_cmt(); + x86_pmu.pebs_latency_data = mtl_latency_data_small; + x86_pmu.get_event_constraints = cmt_get_event_constraints; + x86_pmu.limit_period = spr_limit_period; + td_attr = cmt_events_attrs; + mem_attr = grt_mem_attrs; + extra_attr = cmt_format_attr; + pr_cont("Crestmont events, "); + name = "crestmont"; + break; + case INTEL_FAM6_WESTMERE: case INTEL_FAM6_WESTMERE_EP: case INTEL_FAM6_WESTMERE_EX: diff --git a/arch/x86/events/intel/ds.c b/arch/x86/events/intel/ds.c index a2e566e53076..608e220e46aa 100644 --- a/arch/x86/events/intel/ds.c +++ b/arch/x86/events/intel/ds.c @@ -144,7 +144,7 @@ void __init intel_pmu_pebs_data_source_adl(void) __intel_pmu_pebs_data_source_grt(data_source); } -static void __init intel_pmu_pebs_data_source_cmt(u64 *data_source) +static void __init __intel_pmu_pebs_data_source_cmt(u64 *data_source) { data_source[0x07] = OP_LH | P(LVL, L3) | LEVEL(L3) | P(SNOOPX, FWD); data_source[0x08] = OP_LH | P(LVL, L3) | LEVEL(L3) | P(SNOOP, HITM); @@ -164,7 +164,12 @@ void __init intel_pmu_pebs_data_source_mtl(void) data_source = x86_pmu.hybrid_pmu[X86_HYBRID_PMU_ATOM_IDX].pebs_data_source; memcpy(data_source, pebs_data_source, sizeof(pebs_data_source)); - intel_pmu_pebs_data_source_cmt(data_source); + __intel_pmu_pebs_data_source_cmt(data_source); +} + +void __init intel_pmu_pebs_data_source_cmt(void) +{ + __intel_pmu_pebs_data_source_cmt(pebs_data_source); } static u64 precise_store_data(u64 status) diff --git a/arch/x86/events/perf_event.h b/arch/x86/events/perf_event.h index d6de4487348c..c8ba2be7585d 100644 --- a/arch/x86/events/perf_event.h +++ b/arch/x86/events/perf_event.h @@ -1606,6 +1606,8 @@ void intel_pmu_pebs_data_source_grt(void); void intel_pmu_pebs_data_source_mtl(void); +void intel_pmu_pebs_data_source_cmt(void); + int intel_pmu_setup_lbr_filter(struct perf_event *event); void intel_pt_interrupt(void);