|
| 1 | +.. SPDX-License-Identifier: GPL-2.0 |
| 2 | +
|
| 3 | +====================================== |
| 4 | +CXL Performance Monitoring Unit (CPMU) |
| 5 | +====================================== |
| 6 | + |
| 7 | +The CXL rev 3.0 specification provides a definition of CXL Performance |
| 8 | +Monitoring Unit in section 13.2: Performance Monitoring. |
| 9 | + |
| 10 | +CXL components (e.g. Root Port, Switch Upstream Port, End Point) may have |
| 11 | +any number of CPMU instances. CPMU capabilities are fully discoverable from |
| 12 | +the devices. The specification provides event definitions for all CXL protocol |
| 13 | +message types and a set of additional events for things commonly counted on |
| 14 | +CXL devices (e.g. DRAM events). |
| 15 | + |
| 16 | +CPMU driver |
| 17 | +=========== |
| 18 | + |
| 19 | +The CPMU driver registers a perf PMU with the name pmu_mem<X>.<Y> on the CXL bus |
| 20 | +representing the Yth CPMU for memX. |
| 21 | + |
| 22 | + /sys/bus/cxl/device/pmu_mem<X>.<Y> |
| 23 | + |
| 24 | +The associated PMU is registered as |
| 25 | + |
| 26 | + /sys/bus/event_sources/devices/cxl_pmu_mem<X>.<Y> |
| 27 | + |
| 28 | +In common with other CXL bus devices, the id has no specific meaning and the |
| 29 | +relationship to specific CXL device should be established via the device parent |
| 30 | +of the device on the CXL bus. |
| 31 | + |
| 32 | +PMU driver provides description of available events and filter options in sysfs. |
| 33 | + |
| 34 | +The "format" directory describes all formats of the config (event vendor id, |
| 35 | +group id and mask) config1 (threshold, filter enables) and config2 (filter |
| 36 | +parameters) fields of the perf_event_attr structure. The "events" directory |
| 37 | +describes all documented events show in perf list. |
| 38 | + |
| 39 | +The events shown in perf list are the most fine grained events with a single |
| 40 | +bit of the event mask set. More general events may be enable by setting |
| 41 | +multiple mask bits in config. For example, all Device to Host Read Requests |
| 42 | +may be captured on a single counter by setting the bits for all of |
| 43 | + |
| 44 | +* d2h_req_rdcurr |
| 45 | +* d2h_req_rdown |
| 46 | +* d2h_req_rdshared |
| 47 | +* d2h_req_rdany |
| 48 | +* d2h_req_rdownnodata |
| 49 | + |
| 50 | +Example of usage:: |
| 51 | + |
| 52 | + $#perf list |
| 53 | + cxl_pmu_mem0.0/clock_ticks/ [Kernel PMU event] |
| 54 | + cxl_pmu_mem0.0/d2h_req_rdshared/ [Kernel PMU event] |
| 55 | + cxl_pmu_mem0.0/h2d_req_snpcur/ [Kernel PMU event] |
| 56 | + cxl_pmu_mem0.0/h2d_req_snpdata/ [Kernel PMU event] |
| 57 | + cxl_pmu_mem0.0/h2d_req_snpinv/ [Kernel PMU event] |
| 58 | + ----------------------------------------------------------- |
| 59 | + |
| 60 | + $# perf stat -a -e cxl_pmu_mem0.0/clock_ticks/ -e cxl_pmu_mem0.0/d2h_req_rdshared/ |
| 61 | + |
| 62 | +Vendor specific events may also be available and if so can be used via |
| 63 | + |
| 64 | + $# perf stat -a -e cxl_pmu_mem0.0/vid=VID,gid=GID,mask=MASK/ |
| 65 | + |
| 66 | +The driver does not support sampling so "perf record" is unsupported. |
| 67 | +It only supports system-wide counting so attaching to a task is |
| 68 | +unsupported. |
0 commit comments