From nobody Wed Oct 8 16:43:48 2025 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D5C012F0047 for ; Thu, 26 Jun 2025 16:50:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.19 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750956608; cv=none; b=SZ0n4pGMCzVVtHttqgpai1/jUiYPR4WlOTl+Ii4DprcoFIh2YrtjpemW2jA+6V0/WCWk/Gy6bub4s4vJE/SzqWSqay9geaErUx0nN8R1fVglygiGtiFRE6nK8wdbgM0jPI1EIqx7wf0lgUAJErvS9/0qTXYK/C5f2dhhHlSLiHw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750956608; c=relaxed/simple; bh=4xr2U3sYnm63ho2dRJ6aqdktQ8/1P/BpGhAPyv7nEJs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HCWbONxtAKt5TUaDeoPHZa7rhKNcZ8iCUVUmiRfrgN+coqRwOBIii4lA9L8pyjhiLirhSpeWKMfPAj1QZh9jFjxR5JrekJyQMCCfJyqLgli8q7ZHaM/g5I5HMte5OMDmUD6Z99OLhIda7kCJqDtyPwimdl86zc8HU4t+xqDSzC8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=AC+Z3WsO; arc=none smtp.client-ip=198.175.65.19 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="AC+Z3WsO" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1750956607; x=1782492607; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=4xr2U3sYnm63ho2dRJ6aqdktQ8/1P/BpGhAPyv7nEJs=; b=AC+Z3WsO0bXI3VfVEELrVwW7jWjIKzzXjzCmv/9zZ0mgK+7NmGAdF/Tf FsiVQRgvJmuFIfBY218P6obPjORPulzsc6r8yTfSUTkN9zppkbpOD0RDh m6VieBZNKJ2TI4LKTDk1xsYjPTPAoRcuMiu2RVcUW7oSNuZIHociby9rS Shj2mSaN84Qjb2MC0UovMjlrP7lrjvNcKcZoG4FFEOpNHO8rDRQXOG+HI max0KG/P0GNAVSSknJ7/CG0PdyhAEYdyMbA3WddAVHTJlflJ6LRsVC8Sz ejDaWWPEWRYF7+q5edQDEyAE3GVKmhm9/amXzMXN+XjNy2bFPd60wlw4j g==; X-CSE-ConnectionGUID: ri4VCdoST2aBmSPF3eDMXw== X-CSE-MsgGUID: hPtsMsGVQE+j/w4D2hfoYw== X-IronPort-AV: E=McAfee;i="6800,10657,11476"; a="53136478" X-IronPort-AV: E=Sophos;i="6.16,268,1744095600"; d="scan'208";a="53136478" Received: from orviesa008.jf.intel.com ([10.64.159.148]) by orvoesa111.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jun 2025 09:50:00 -0700 X-CSE-ConnectionGUID: x+DAiFY5T02d+ZujbYyuSQ== X-CSE-MsgGUID: JdOieTUpRBSkFBpIl+4wiA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.16,268,1744095600"; d="scan'208";a="153069268" Received: from agluck-desk3.sc.intel.com ([172.25.103.51]) by orviesa008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jun 2025 09:49:59 -0700 From: Tony Luck To: Fenghua Yu , Reinette Chatre , Maciej Wieczor-Retman , Peter Newman , James Morse , Babu Moger , Drew Fustini , Dave Martin , Anil Keshavamurthy , Chen Yu Cc: x86@kernel.org, linux-kernel@vger.kernel.org, patches@lists.linux.dev, Tony Luck Subject: [PATCH v6 20/30] x86,fs/resctrl: Fill in details of Clearwater Forest events Date: Thu, 26 Jun 2025 09:49:29 -0700 Message-ID: <20250626164941.106341-21-tony.luck@intel.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250626164941.106341-1-tony.luck@intel.com> References: <20250626164941.106341-1-tony.luck@intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Clearwater Forest supports two energy related telemetry events and seven perf style events. The counters are arranged in per-RMID blocks like this: MMIO offset:0x00 Counter for RMID 0 Event 0 MMIO offset:0x08 Counter for RMID 0 Event 1 MMIO offset:0x10 Counter for RMID 0 Event 2 MMIO offset:0x18 Counter for RMID 1 Event 0 MMIO offset:0x20 Counter for RMID 1 Event 1 MMIO offset:0x28 Counter for RMID 1 Event 2 ... Define these events in the file system code and add the events to the event_group structures. PMT_EVENT_ENERGY and PMT_EVENT_ACTIVITY are produced in fixed point format. File system code must output as floating point values. Signed-off-by: Tony Luck --- include/linux/resctrl_types.h | 11 ++++++++ arch/x86/kernel/cpu/resctrl/intel_aet.c | 33 +++++++++++++++++++++++ fs/resctrl/monitor.c | 35 ++++++++++++++----------- 3 files changed, 64 insertions(+), 15 deletions(-) diff --git a/include/linux/resctrl_types.h b/include/linux/resctrl_types.h index d98351663c2c..6838b02d5ca3 100644 --- a/include/linux/resctrl_types.h +++ b/include/linux/resctrl_types.h @@ -47,6 +47,17 @@ enum resctrl_event_id { QOS_L3_MBM_TOTAL_EVENT_ID =3D 0x02, QOS_L3_MBM_LOCAL_EVENT_ID =3D 0x03, =20 + /* Intel Telemetry Events */ + PMT_EVENT_ENERGY, + PMT_EVENT_ACTIVITY, + PMT_EVENT_STALLS_LLC_HIT, + PMT_EVENT_C1_RES, + PMT_EVENT_UNHALTED_CORE_CYCLES, + PMT_EVENT_STALLS_LLC_MISS, + PMT_EVENT_AUTO_C6_RES, + PMT_EVENT_UNHALTED_REF_CYCLES, + PMT_EVENT_UOPS_RETIRED, + /* Must be the last */ QOS_NUM_EVENTS, }; diff --git a/arch/x86/kernel/cpu/resctrl/intel_aet.c b/arch/x86/kernel/cpu/= resctrl/intel_aet.c index c770039b2525..f9b2959693a0 100644 --- a/arch/x86/kernel/cpu/resctrl/intel_aet.c +++ b/arch/x86/kernel/cpu/resctrl/intel_aet.c @@ -32,6 +32,20 @@ struct mmio_info { void __iomem *addrs[] __counted_by(num_regions); }; =20 +/** + * struct pmt_event - Telemetry event. + * @id: Resctrl event id. + * @idx: Counter index within each per-RMID block of counters. + * @bin_bits: Zero for integer valued events, else number bits in fixed-po= int. + */ +struct pmt_event { + enum resctrl_event_id id; + int idx; + int bin_bits; +}; + +#define EVT(_id, _idx, _bits) { .id =3D _id, .idx =3D _idx, .bin_bits =3D = _bits } + /** * struct event_group - All information about a group of telemetry events. * @pfg: Points to the aggregated telemetry space information @@ -40,6 +54,8 @@ struct mmio_info { * @pkginfo: Per-package MMIO addresses of telemetry regions belonging to= this group. * @guid: Unique number per XML description file. * @mmio_size: Number of bytes of MMIO registers for this group. + * @num_events: Number of events in this group. + * @evts: Array of event descriptors. */ struct event_group { /* Data fields for additional structures to manage this group. */ @@ -49,6 +65,8 @@ struct event_group { /* Remaining fields initialized from XML file. */ u32 guid; size_t mmio_size; + int num_events; + struct pmt_event evts[] __counted_by(num_events); }; =20 #define XML_MMIO_SIZE(num_rmids, num_events, num_extra_status) \ @@ -61,6 +79,11 @@ struct event_group { static struct event_group energy_0x26696143 =3D { .guid =3D 0x26696143, .mmio_size =3D XML_MMIO_SIZE(576, 2, 3), + .num_events =3D 2, + .evts =3D { + EVT(PMT_EVENT_ENERGY, 0, 18), + EVT(PMT_EVENT_ACTIVITY, 1, 18), + } }; =20 /* @@ -70,6 +93,16 @@ static struct event_group energy_0x26696143 =3D { static struct event_group perf_0x26557651 =3D { .guid =3D 0x26557651, .mmio_size =3D XML_MMIO_SIZE(576, 7, 3), + .num_events =3D 7, + .evts =3D { + EVT(PMT_EVENT_STALLS_LLC_HIT, 0, 0), + EVT(PMT_EVENT_C1_RES, 1, 0), + EVT(PMT_EVENT_UNHALTED_CORE_CYCLES, 2, 0), + EVT(PMT_EVENT_STALLS_LLC_MISS, 3, 0), + EVT(PMT_EVENT_AUTO_C6_RES, 4, 0), + EVT(PMT_EVENT_UNHALTED_REF_CYCLES, 5, 0), + EVT(PMT_EVENT_UOPS_RETIRED, 6, 0), + } }; =20 static struct event_group *known_event_groups[] =3D { diff --git a/fs/resctrl/monitor.c b/fs/resctrl/monitor.c index 076c0cc6e53a..cff8af3a263e 100644 --- a/fs/resctrl/monitor.c +++ b/fs/resctrl/monitor.c @@ -874,27 +874,32 @@ static void dom_data_exit(struct rdt_resource *r) mutex_unlock(&rdtgroup_mutex); } =20 +#define MON_EVENT(_eventid, _name, _res, _fp) \ + [_eventid] =3D { \ + .name =3D _name, \ + .evtid =3D _eventid, \ + .rid =3D _res, \ + .is_floating_point =3D _fp, \ +} + /* * All available events. Architecture code marks the ones that * are supported by a system using resctrl_enable_mon_event() * to set .enabled. */ struct mon_evt mon_event_all[QOS_NUM_EVENTS] =3D { - [QOS_L3_OCCUP_EVENT_ID] =3D { - .name =3D "llc_occupancy", - .evtid =3D QOS_L3_OCCUP_EVENT_ID, - .rid =3D RDT_RESOURCE_L3, - }, - [QOS_L3_MBM_TOTAL_EVENT_ID] =3D { - .name =3D "mbm_total_bytes", - .evtid =3D QOS_L3_MBM_TOTAL_EVENT_ID, - .rid =3D RDT_RESOURCE_L3, - }, - [QOS_L3_MBM_LOCAL_EVENT_ID] =3D { - .name =3D "mbm_local_bytes", - .evtid =3D QOS_L3_MBM_LOCAL_EVENT_ID, - .rid =3D RDT_RESOURCE_L3, - }, + MON_EVENT(QOS_L3_OCCUP_EVENT_ID, "llc_occupancy", RDT_RESOURCE_L3, false= ), + MON_EVENT(QOS_L3_MBM_TOTAL_EVENT_ID, "mbm_total_bytes", RDT_RESOURCE_L3,= false), + MON_EVENT(QOS_L3_MBM_LOCAL_EVENT_ID, "mbm_local_bytes", RDT_RESOURCE_L3,= false), + MON_EVENT(PMT_EVENT_ENERGY, "core_energy", RDT_RESOURCE_PERF_PKG, true= ), + MON_EVENT(PMT_EVENT_ACTIVITY, "activity", RDT_RESOURCE_PERF_PKG, true), + MON_EVENT(PMT_EVENT_STALLS_LLC_HIT, "stalls_llc_hit", RDT_RESOURCE_PERF_= PKG, false), + MON_EVENT(PMT_EVENT_C1_RES, "c1_res", RDT_RESOURCE_PERF_PKG, false), + MON_EVENT(PMT_EVENT_UNHALTED_CORE_CYCLES, "unhalted_core_cycles", RDT_RES= OURCE_PERF_PKG, false), + MON_EVENT(PMT_EVENT_STALLS_LLC_MISS, "stalls_llc_miss", RDT_RESOURCE_PER= F_PKG, false), + MON_EVENT(PMT_EVENT_AUTO_C6_RES, "c6_res", RDT_RESOURCE_PERF_PKG, false= ), + MON_EVENT(PMT_EVENT_UNHALTED_REF_CYCLES, "unhalted_ref_cycles", RDT_RESOU= RCE_PERF_PKG, false), + MON_EVENT(PMT_EVENT_UOPS_RETIRED, "uops_retired", RDT_RESOURCE_PERF_PKG= , false), }; =20 void resctrl_enable_mon_event(enum resctrl_event_id eventid, bool any_cpu,= u32 binary_bits) --=20 2.49.0