[PATCH 1/4] drm/xe/pmu: Enable PMU interface

Lucas De Marchi lucas.demarchi at intel.com
Wed Aug 28 19:33:59 UTC 2024


On Tue, Aug 27, 2024 at 09:41:04AM GMT, Vinay Belgaumkar wrote:
>diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
>index b6fbe4988f2e..de6f39db618c 100644
>--- a/include/uapi/drm/xe_drm.h
>+++ b/include/uapi/drm/xe_drm.h
>@@ -1389,6 +1389,40 @@ struct drm_xe_wait_user_fence {
> 	__u64 reserved[2];
> };
>
>+/**
>+ * DOC: XE PMU event config IDs
>+ *
>+ * Check 'man perf_event_open' to use the ID's XE_PMU_XXXX listed in xe_drm.h
>+ * in 'struct perf_event_attr' as part of perf_event_open syscall to read a
>+ * particular event.
>+ *
>+ * For example to open the XE_PMU_RENDER_GROUP_BUSY(0):
>+ *
>+ * .. code-block:: C
>+ *
>+ *	struct perf_event_attr attr;
>+ *	long long count;
>+ *	int cpu = 0;
>+ *	int fd;
>+ *
>+ *	memset(&attr, 0, sizeof(struct perf_event_attr));
>+ *	attr.type = type; // eg: /sys/bus/event_source/devices/xe_0000_56_00.0/type
>+ *	attr.read_format = PERF_FORMAT_TOTAL_TIME_ENABLED;
>+ *	attr.use_clockid = 1;
>+ *	attr.clockid = CLOCK_MONOTONIC;
>+ *	attr.config = XE_PMU_RENDER_GROUP_BUSY(0);
>+ *
>+ *	fd = syscall(__NR_perf_event_open, &attr, -1, cpu, -1, 0);
>+ */
>+
>+/*
>+ * Top bits of every counter are GT id.
>+ */
>+#define __XE_PMU_GT_SHIFT (56)
>+
>+#define ___XE_PMU_OTHER(gt, x) \
>+	(((__u64)(x)) | ((__u64)(gt) << __XE_PMU_GT_SHIFT))
>+

The perf uapi is self-describing and users should look up on sysfs what
to use. Example for i915 since it's what I'm currently working on:

	$ cat /sys/bus/event_source/devices/i915/events/actual-frequency
	config=0x100000
	$ cat  /sys/bus/event_source/devices/i915/events/actual-frequency.unit
	M

`perf list` works fine and doesn't know anything about this xe-only
header. Why would we add anything here rather than encourage other users
to read from the generic interface?

Lucas De Marchi


More information about the Intel-xe mailing list