[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250429003359.375508-20-tony.luck@intel.com>
Date: Mon, 28 Apr 2025 17:33:45 -0700
From: Tony Luck <tony.luck@...el.com>
To: Fenghua Yu <fenghuay@...dia.com>,
Reinette Chatre <reinette.chatre@...el.com>,
Maciej Wieczor-Retman <maciej.wieczor-retman@...el.com>,
Peter Newman <peternewman@...gle.com>,
James Morse <james.morse@....com>,
Babu Moger <babu.moger@....com>,
Drew Fustini <dfustini@...libre.com>,
Dave Martin <Dave.Martin@....com>,
Anil Keshavamurthy <anil.s.keshavamurthy@...el.com>,
Chen Yu <yu.c.chen@...el.com>
Cc: x86@...nel.org,
linux-kernel@...r.kernel.org,
patches@...ts.linux.dev,
Tony Luck <tony.luck@...el.com>
Subject: [PATCH v4 19/31] x86,fs/resctrl: Fill in details of Clearwater Forest events
Clearwater Forest supports two energy related telemetry events
and seven perf style events.
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 <tony.luck@...el.com>
---
include/linux/resctrl_types.h | 11 +++++
arch/x86/kernel/cpu/resctrl/intel_aet.c | 31 ++++++++++++++
fs/resctrl/monitor.c | 54 +++++++++++++++++++++++++
3 files changed, 96 insertions(+)
diff --git a/include/linux/resctrl_types.h b/include/linux/resctrl_types.h
index 6245034f6c76..39de5451cff8 100644
--- a/include/linux/resctrl_types.h
+++ b/include/linux/resctrl_types.h
@@ -43,6 +43,17 @@ enum resctrl_event_id {
QOS_L3_MBM_TOTAL_EVENT_ID = 0x02,
QOS_L3_MBM_LOCAL_EVENT_ID = 0x03,
+ /* 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 03839d5c369b..7e4f6a6672d4 100644
--- a/arch/x86/kernel/cpu/resctrl/intel_aet.c
+++ b/arch/x86/kernel/cpu/resctrl/intel_aet.c
@@ -30,6 +30,18 @@ struct mmio_info {
void __iomem *addrs[] __counted_by(count);
};
+/**
+ * struct pmt_event - Telemetry event.
+ * @evtid: Resctrl event id
+ * @evt_idx: Counter index within each per-RMID block of counters
+ */
+struct pmt_event {
+ enum resctrl_event_id evtid;
+ int evt_idx;
+};
+
+#define EVT(id, idx) { .evtid = id, .evt_idx = idx }
+
/**
* struct event_group - All information about a group of telemetry events.
* Some fields initialized with MMIO layout information
@@ -38,21 +50,40 @@ struct mmio_info {
* @pfg: The pmt_feature_group for this event group
* @guid: Unique number per XML description file
* @pkginfo: Per-package MMIO addresses
+ * @num_events: Number of events in this group
+ * @evts: Array of event descriptors
*/
struct event_group {
struct pmt_feature_group *pfg;
int guid;
struct mmio_info **pkginfo;
+ int num_events;
+ struct pmt_event evts[] __counted_by(num_events);
};
/* Link: https://github.com/intel/Intel-PMT xml/CWF/OOBMSM/RMID-ENERGY *.xml */
static struct event_group energy_0x26696143 = {
.guid = 0x26696143,
+ .num_events = 2,
+ .evts = {
+ EVT(PMT_EVENT_ENERGY, 0),
+ EVT(PMT_EVENT_ACTIVITY, 1),
+ }
};
/* Link: https://github.com/intel/Intel-PMT xml/CWF/OOBMSM/RMID-PERF *.xml */
static struct event_group perf_0x26557651 = {
.guid = 0x26557651,
+ .num_events = 7,
+ .evts = {
+ EVT(PMT_EVENT_STALLS_LLC_HIT, 0),
+ EVT(PMT_EVENT_C1_RES, 1),
+ EVT(PMT_EVENT_UNHALTED_CORE_CYCLES, 2),
+ EVT(PMT_EVENT_STALLS_LLC_MISS, 3),
+ EVT(PMT_EVENT_AUTO_C6_RES, 4),
+ EVT(PMT_EVENT_UNHALTED_REF_CYCLES, 5),
+ EVT(PMT_EVENT_UOPS_RETIRED, 6),
+ }
};
static struct event_group *known_event_groups[] = {
diff --git a/fs/resctrl/monitor.c b/fs/resctrl/monitor.c
index be78488a15e5..f848325591b4 100644
--- a/fs/resctrl/monitor.c
+++ b/fs/resctrl/monitor.c
@@ -861,6 +861,60 @@ struct mon_evt mon_event_all[QOS_NUM_EVENTS] = {
.rid = RDT_RESOURCE_L3,
.display_format = EVT_FORMAT_U64,
},
+ [PMT_EVENT_ENERGY] = {
+ .name = "core_energy",
+ .evtid = PMT_EVENT_ENERGY,
+ .rid = RDT_RESOURCE_PERF_PKG,
+ .display_format = EVT_FORMAT_U46_18,
+ },
+ [PMT_EVENT_ACTIVITY] = {
+ .name = "activity",
+ .evtid = PMT_EVENT_ACTIVITY,
+ .rid = RDT_RESOURCE_PERF_PKG,
+ .display_format = EVT_FORMAT_U46_18,
+ },
+ [PMT_EVENT_STALLS_LLC_HIT] = {
+ .name = "stalls_llc_hit",
+ .evtid = PMT_EVENT_STALLS_LLC_HIT,
+ .rid = RDT_RESOURCE_PERF_PKG,
+ .display_format = EVT_FORMAT_U64,
+ },
+ [PMT_EVENT_C1_RES] = {
+ .name = "c1_res",
+ .evtid = PMT_EVENT_C1_RES,
+ .rid = RDT_RESOURCE_PERF_PKG,
+ .display_format = EVT_FORMAT_U64,
+ },
+ [PMT_EVENT_UNHALTED_CORE_CYCLES] = {
+ .name = "unhalted_core_cycles",
+ .evtid = PMT_EVENT_UNHALTED_CORE_CYCLES,
+ .rid = RDT_RESOURCE_PERF_PKG,
+ .display_format = EVT_FORMAT_U64,
+ },
+ [PMT_EVENT_STALLS_LLC_MISS] = {
+ .name = "stalls_llc_miss",
+ .evtid = PMT_EVENT_STALLS_LLC_MISS,
+ .rid = RDT_RESOURCE_PERF_PKG,
+ .display_format = EVT_FORMAT_U64,
+ },
+ [PMT_EVENT_AUTO_C6_RES] = {
+ .name = "c6_res",
+ .evtid = PMT_EVENT_AUTO_C6_RES,
+ .rid = RDT_RESOURCE_PERF_PKG,
+ .display_format = EVT_FORMAT_U64,
+ },
+ [PMT_EVENT_UNHALTED_REF_CYCLES] = {
+ .name = "unhalted_ref_cycles",
+ .evtid = PMT_EVENT_UNHALTED_REF_CYCLES,
+ .rid = RDT_RESOURCE_PERF_PKG,
+ .display_format = EVT_FORMAT_U64,
+ },
+ [PMT_EVENT_UOPS_RETIRED] = {
+ .name = "uops_retired",
+ .evtid = PMT_EVENT_UOPS_RETIRED,
+ .rid = RDT_RESOURCE_PERF_PKG,
+ .display_format = EVT_FORMAT_U64,
+ },
};
void resctrl_enable_mon_event(enum resctrl_event_id evtid, bool any_cpu)
--
2.48.1
Powered by blists - more mailing lists