Commit 5d7107c7 authored by Jonathan Cameron's avatar Jonathan Cameron Committed by Dan Williams
Browse files

perf: CXL Performance Monitoring Unit driver



CXL rev 3.0 introduces a standard performance monitoring hardware
block to CXL. Instances are discovered using CXL Register Locator DVSEC
entries. Each CXL component may have multiple PMUs.

This initial driver supports a subset of types of counter.
It supports counters that are either fixed or configurable, but requires
that they support the ability to freeze and write value whilst frozen.

Development done with QEMU model which will be posted shortly.

Example:

$ perf stat -a -e cxl_pmu_mem0.0/h2d_req_snpcur/ -e cxl_pmu_mem0.0/h2d_req_snpdata/ -e cxl_pmu_mem0.0/clock_ticks/ sleep 1

Performance counter stats for 'system wide':

96,757,023,244,321      cxl_pmu_mem0.0/h2d_req_snpcur/
96,757,023,244,365      cxl_pmu_mem0.0/h2d_req_snpdata/
193,514,046,488,653      cxl_pmu_mem0.0/clock_ticks/

       1.090539600 seconds time elapsed

Reviewed-by: default avatarDave Jiang <dave.jiang@intel.com>
Reviewed-by: default avatarKan Liang <kan.liang@linux.intel.com>
Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
Link: https://lore.kernel.org/r/20230526095824.16336-5-Jonathan.Cameron@huawei.com


Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
parent 1ad3f701
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -5193,6 +5193,12 @@ S: Maintained
F:	drivers/cxl/
F:	include/uapi/linux/cxl_mem.h
COMPUTE EXPRESS LINK PMU (CPMU)
M:	Jonathan Cameron <jonathan.cameron@huawei.com>
L:	linux-cxl@vger.kernel.org
S:	Maintained
F:	drivers/perf/cxl_pmu.c
CONEXANT ACCESSRUNNER USB DRIVER
L:	accessrunner-general@lists.sourceforge.net
S:	Orphan
+13 −0
Original line number Diff line number Diff line
@@ -139,4 +139,17 @@ config CXL_REGION_INVALIDATION_TEST
	  If unsure, or if this kernel is meant for production environments,
	  say N.

config CXL_PMU
	tristate "CXL Performance Monitoring Unit"
	default CXL_BUS
	depends on PERF_EVENTS
	help
	  Support performance monitoring as defined in CXL rev 3.0
	  section 13.2: Performance Monitoring. CXL components may have
	  one or more CXL Performance Monitoring Units (CPMUs).

	  Say 'y/m' to enable a driver that will attach to performance
	  monitoring units and provide standard perf based interfaces.

	  If unsure say 'm'.
endif
+13 −0
Original line number Diff line number Diff line
@@ -213,4 +213,17 @@ source "drivers/perf/arm_cspmu/Kconfig"

source "drivers/perf/amlogic/Kconfig"

config CXL_PMU
	tristate "CXL Performance Monitoring Unit"
	depends on CXL_BUS
	help
	  Support performance monitoring as defined in CXL rev 3.0
	  section 13.2: Performance Monitoring. CXL components may have
	  one or more CXL Performance Monitoring Units (CPMUs).

	  Say 'y/m' to enable a driver that will attach to performance
	  monitoring units and provide standard perf based interfaces.

	  If unsure say 'm'.

endmenu
+1 −0
Original line number Diff line number Diff line
@@ -24,3 +24,4 @@ obj-$(CONFIG_APPLE_M1_CPU_PMU) += apple_m1_cpu_pmu.o
obj-$(CONFIG_ALIBABA_UNCORE_DRW_PMU) += alibaba_uncore_drw_pmu.o
obj-$(CONFIG_ARM_CORESIGHT_PMU_ARCH_SYSTEM_PMU) += arm_cspmu/
obj-$(CONFIG_MESON_DDR_PMU) += amlogic/
obj-$(CONFIG_CXL_PMU) += cxl_pmu.o

drivers/perf/cxl_pmu.c

0 → 100644
+990 −0

File added.

Preview size limit exceeded, changes collapsed.