perf jevents: Add NVIDIA Tegra410 uncore PMU events and metrics
cover perf jevents: Add NVIDIA Tegra410 uncore PMU events and metrics
Add event aliases and derived metrics for the NVIDIA Tegra410 uncore PMUs.
The series covers the UCF, PCIe, PCIe target, CPU memory latency, and chip-to-chip interconnect PMUs. It provides symbolic names for the raw event encodings and metrics for bandwidth, frequency, and average read latency.
Patch 1 fixes a jevents ordering problem found with this layout: the uncore events live in arch/arm64/nvidia/t410/sys/, next to the T410 core events, and without the fix jevents puts the core tlb.json (which sorts after "sys") into the sys table, so its events are lost from perf list and perf stat.
Besar Wicaksono (6):
perf jevents: Process model files before sys subdirectories perf jevents: Add support for NVIDIA Tegra410 UCF PMU aliasing perf jevents: Add support for NVIDIA Tegra410 PCIE PMU aliasing perf jevents: Add support for NVIDIA Tegra410 PCIE-TGT PMU aliasing perf jevents: Add support for NVIDIA Tegra410 CPU Memory Latency PMU
aliasing
perf jevents: Add support for NVIDIA Tegra410 C2C PMU aliasing
.../arm64/nvidia/t410/sys/uncore-cpu_mem.json | 48 ++ .../arm64/nvidia/t410/sys/uncore-nvclink.json | 75 ++ .../arm64/nvidia/t410/sys/uncore-nvdlink.json | 48 ++ .../nvidia/t410/sys/uncore-nvlink_c2c.json | 129 ++++ .../arm64/nvidia/t410/sys/uncore-pcie.json | 247 +++++++ .../nvidia/t410/sys/uncore-pcie_tgt.json | 93 +++ .../arm64/nvidia/t410/sys/uncore-ucf.json | 693 ++++++++++++++++++ tools/perf/pmu-events/jevents.py | 4 +- 8 files changed, 1336 insertions(+), 1 deletion(-) create mode 100644 tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-cpu_mem.json create mode 100644 tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-nvclink.json create mode 100644 tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-nvdlink.json create mode 100644 tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-nvlink_c2c.json create mode 100644 tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-pcie.json create mode 100644 tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-pcie_tgt.json create mode 100644 tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-ucf.json
Signature · 1 line
2.43.0
PATCH 1/6 perf jevents: Process model files before sys subdirectories
jevents walks each directory in name order, mixing files and subdirectories. When it reaches a sys/ directory inside a model directory, process_one_file() flushes the model's pending tables and switches the pending table name to the sys table. After the walk returns from sys/, nothing switches it back, so model JSON files whose names sort after "sys" (for example tlb.json) are added to the sys table. Sys tables are only matched by Compat against uncore PMU identifiers, so these core events are lost: perf list doesn't show them and perf stat rejects them.
Visit the files of a directory before its subdirectories, so that all of a model's JSON files are added to the model's table before a sys/ subdirectory is processed. The generated pmu-events.c is unchanged for the existing event directories.
--- tools/perf/pmu-events/jevents.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
tools/perf/pmu-events/jevents.py +3 -1
@@ -1463,7 +1463,9 @@ def main() -> None: action: Callable[[Sequence[str], os.DirEntry], None]) -> None: """Replicate the directory/file walking behavior of C's file tree walk.""" assert _args is not None - for item in sorted(os.scandir(path), key=lambda e: e.name): + # Visit a directory's files before its subdirectories, because + # entering a subdirectory switches the table that files are added to. + for item in sorted(os.scandir(path), key=lambda e: (e.is_dir(), e.name)): if _args.model != 'all' and item.is_dir(): # Check if the model matches one in _args.model. if len(parents) == _args.model.split(',')[0].count('/'):
Signature · 1 line
2.43.0
[email protected]
AI reviewRe: [PATCH 1/6] perf jevents: Process model files before sys subdirectories
Sashiko has reviewed this patch and found no issues.
Quoted 10 lines
jevents walks each directory in name order, mixing files and subdirectories. When it reaches a sys/ directory inside a model directory,
process_one_file()flushes the model's pending tables and switches the pending table name to the sys table. After the walk returns from sys/, nothing switches it back, so model JSON files whose names sort after "sys" (for example tlb.json) are added to the sys table. Sys tables are only matched by Compat against uncore PMU identifiers, so these core events are lost: perf list doesn't show them and perf stat rejects them.
Quoted 6 lines
Visit the files of a directory before its subdirectories, so that all of a model's JSON files are added to the model's table before a sys/ subdirectory is processed. The generated
pmu-events.cis unchanged for the existing event directories.Signed-off-by Besar Wicaksono <[email protected]>
Sashiko has reviewed this patch and found no issues.
Signature · 1 line
Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=1
PATCH 2/6 perf jevents: Add support for NVIDIA Tegra410 UCF PMU aliasing
In reply to Besar WicaksonoAdd alias support for NVIDIA Tegra410 UCF PMU events and metrics.
--- .../arm64/nvidia/t410/sys/uncore-ucf.json | 693 ++++++++++++++++++ 1 file changed, 693 insertions(+) create mode 100644 tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-ucf.json
tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-ucf.json new file +693 -0
@@ -0,0 +1,693 @@ +[ + { + "EventCode": "0x100000000", + "EventName": "UCF_CYCLES", + "BriefDescription": "Counts UCF cycles using the dedicated PMU cycle counter.", + "PublicDescription": "Counts UCF cycles using the PMU's dedicated cycle counter.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "EventCode": "0x1d", + "EventName": "UCF_BUS_CYCLES", + "BriefDescription": "Counts UCF cycles using a programmable event counter.", + "PublicDescription": "Counts UCF cycles using a programmable event counter. The count is identical to UCF_CYCLES. Source and destination filters are ignored.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "EventCode": "0x111", + "EventName": "UCF_SLC_ACCESS_RD", + "BriefDescription": "Counts read requests from a requester to the SLC.", + "PublicDescription": "Counts read requests from a requester to the SLC. A read is a request for which the completer returns data: dataless MakeReadUnique and snoop requests are not reads, and prefetches issued by the cores' L1/L2 caches count as reads rather than as prefetch requests. Filters: src_loc_cpu, src_loc_noncpu and src_rem select the request initiator: local CPU, local non-CPU device or remote socket. dst_loc_cmem, dst_loc_gmem, dst_loc_other and dst_rem select the memory type of the request address: local CMEM, local GMEM, local CXL memory or remote memory; local or remote is determined by the home socket of the address. An unset group counts all.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "EventCode": "0x112", + "EventName": "UCF_SLC_ACCESS_WR", + "BriefDescription": "Counts write requests from a requester to the SLC.", + "PublicDescription": "Counts write requests from a requester to the SLC. A write is a request in which the requester sends data: dataless WriteEvictOrEvict is not a write, and CHI Write*Zero is a write because it eventually consumes DRAM bandwidth although it sends no data over the interface. Filters: src_loc_cpu, src_loc_noncpu and src_rem select the request initiator: local CPU, local non-CPU device or remote socket. dst_loc_cmem, dst_loc_gmem, dst_loc_other and dst_rem select the memory type of the request address: local CMEM, local GMEM, local CXL memory or remote memory; local or remote is determined by the home socket of the address. An unset group counts all.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "EventCode": "0x183", + "EventName": "UCF_SLC_ACCESS_DATALESS", + "BriefDescription": "Counts CHI Dataless requests to the SLC.", + "PublicDescription": "Counts CHI Dataless requests to the SLC. Dataless MakeReadUnique and WriteEvictOrEvict requests are not counted. Filters: src_loc_cpu, src_loc_noncpu and src_rem select the request initiator: local CPU, local non-CPU device or remote socket. dst_loc_cmem, dst_loc_gmem, dst_loc_other and dst_rem select the memory type of the request address: local CMEM, local GMEM, local CXL memory or remote memory; local or remote is determined by the home socket of the address. An unset group counts all.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "EventCode": "0x184", + "EventName": "UCF_SLC_ACCESS_ATOMIC", + "BriefDescription": "Counts CHI Atomic requests to the SLC.", + "PublicDescription": "Counts CHI Atomic requests to the SLC. Filters: src_loc_cpu, src_loc_noncpu and src_rem select the request initiator: local CPU, local non-CPU device or remote socket. dst_loc_cmem, dst_loc_gmem, dst_loc_other and dst_rem select the memory type of the request address: local CMEM, local GMEM, local CXL memory or remote memory; local or remote is determined by the home socket of the address. An unset group counts all.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "EventCode": "0x113", + "EventName": "UCF_SLC_BYTES_RD", + "BriefDescription": "Counts bytes transferred by the read requests counted by UCF_SLC_ACCESS_RD.", + "PublicDescription": "Counts the bytes transferred by the read requests counted by UCF_SLC_ACCESS_RD, including read data sent by Direct Memory Transfer (DMT) or Direct Cache Transfer (DCT). For transfers of an odd number of bytes, the count is rounded to the nearest power of 2 greater than the bytes transferred. Because reads can be smaller than 64 bytes, the count may not equal UCF_SLC_ACCESS_RD times 64. Source and destination filters work as described for UCF_SLC_ACCESS_RD.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "EventCode": "0x114", + "EventName": "UCF_SLC_BYTES_WR", + "BriefDescription": "Counts bytes transferred by the write requests counted by UCF_SLC_ACCESS_WR.", + "PublicDescription": "Counts the bytes transferred by the write requests counted by UCF_SLC_ACCESS_WR, including write data sent by Direct Write Transfer (DWT). For transfers of an odd number of bytes, the count is rounded to the nearest power of 2. Data returned to the SLC by a requester's cache in response to a snoop is not counted. Because writes can be smaller than 64 bytes, the count may not equal UCF_SLC_ACCESS_WR times 64. Source and destination filters work as described for UCF_SLC_ACCESS_WR.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "EventCode": "0x119", + "EventName": "UCF_SLC_HIT_RD", + "BriefDescription": "Counts inbound read requests that hit in the SLC's L3 cache or in a peer requester cache.", + "PublicDescription": "Counts inbound read requests that hit in the SLC's L3 cache or in a peer requester cache, including one in a remote socket. Some hits are still refilled from memory (see UCF_SLC_REFILL_RD). Filters: src_loc_cpu, src_loc_noncpu and src_rem select the request initiator: local CPU, local non-CPU device or remote socket. dst_loc_cmem, dst_loc_gmem, dst_loc_other and dst_rem select the memory type of the request address: local CMEM, local GMEM, local CXL memory or remote memory; local or remote is determined by the home socket of the address. An unset group counts all.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "EventCode": "0x109", + "EventName": "UCF_SLC_REFILL_RD", + "BriefDescription": "Counts inbound read requests not supplied by the local socket's L1, L2 or L3 caches.", + "PublicDescription": "Counts inbound read requests not supplied by the local socket's L1, L2 or L3 caches. For remote-memory addresses, it also counts each Shared-to-Unique permission upgrade (dataless MakeReadUnique) of a cache line shared by requesters in different sockets. A refill is not the same as a miss: the SLC may fetch data from memory even when a requester cache holds clean data, and such accesses are hits that are still refilled. Filters: src_loc_cpu, src_loc_noncpu and src_rem select the request initiator: local CPU, local non-CPU device or remote socket. dst_loc_cmem, dst_loc_gmem, dst_loc_other and dst_rem select the memory type of the request address: local CMEM, local GMEM, local CXL memory or remote memory; local or remote is determined by the home socket of the address. An unset group counts all.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "EventCode": "0x10a", + "EventName": "UCF_SLC_REFILL_WR", + "BriefDescription": "Counts inbound write requests not supplied by the local socket's L1, L2 or L3 caches.", + "PublicDescription": "Counts inbound write requests not supplied by the local socket's L1, L2 or L3 caches. A write refill occurs only for a partial write that needs the existing data; dataless write requests do not cause a refill and are not counted. Filters: src_loc_cpu, src_loc_noncpu and src_rem select the request initiator: local CPU, local non-CPU device or remote socket. dst_loc_cmem, dst_loc_gmem, dst_loc_other and dst_rem select the memory type of the request address: local CMEM, local GMEM, local CXL memory or remote memory; local or remote is determined by the home socket of the address. An unset group counts all.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "EventCode": "0xf0", + "EventName": "UCF_SLC_ALLOCATE", + "BriefDescription": "Counts read, write, atomic or prefetch accesses that allocate a line in the SLC's L3 cache.", + "PublicDescription": "Counts read, write, atomic or prefetch accesses that allocate a line in the SLC's L3 cache. Filters: src_loc_cpu, src_loc_noncpu and src_rem select the request initiator: local CPU, local non-CPU device or remote socket. dst_loc_cmem, dst_loc_gmem, dst_loc_other and dst_rem select the memory type of the request address: local CMEM, local GMEM, local CXL memory or remote memory; local or remote is determined by the home socket of the address. An unset group counts all.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "EventCode": "0xf3", + "EventName": "UCF_SLC_WB", + "BriefDescription": "Counts SLC eviction and coherence write-backs, and non-allocating write-backs from upstream clients.", + "PublicDescription": "Counts SLC write-backs: eviction write-backs, coherence write-backs, and non-allocating write-backs from upstream clients. Evictions include L3 cache and snoop filter evictions. A coherence write-back occurs when data is dirty in the L3 cache or another requester node cache, but a requesting agent needs clean data. A home SLC in another socket, or the GL2 of a connected local or remote GPU (the point of coherence for GPU memory), can evict a line and snoop this SLC. A data-bearing snoop response from this SLC is not counted by this event, though it uses this SLC's downstream bandwidth. For a home SLC eviction, the home SLC's events count the downstream write traffic it causes. Filters: src_loc_cpu, src_loc_noncpu and src_rem select the initiator of the request that caused the write-back: local CPU, local non-CPU device or remote socket. This need not be the agent that produced or modified the data. dst_loc_cmem, dst_loc_gmem, dst_loc_other and dst_rem select the memory type of the memory written back: local CMEM, local GMEM, local CXL memory or remote memory; local or remote is determined by the home socket of the address. An unset group counts all.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "EventCode": "0x180", + "EventName": "UCF_LOCAL_SNOOP", + "BriefDescription": "Counts snoop requests sent by this SLC to local fully coherent requester nodes or to an SLC in another socket.", + "PublicDescription": "Counts snoop requests sent by this SLC to fully coherent requester nodes in the local socket or to an SLC in another socket, including an SLC that this SLC tracks as a sharing node. Invalidating, forwarding, and non-forwarding snoops are included. Each snoop request is counted separately, even when one transaction snoops several clients for the same cache line. Snoops generated for atomic requests or dataless requests are not counted. Filters: src_loc_cpu, src_loc_noncpu and src_rem select the initiator of the request that caused the snoop: local CPU, local non-CPU device or remote socket. dst_loc_cmem, dst_loc_gmem, dst_loc_other and dst_rem select the memory type of the request address: local CMEM, local GMEM, local CXL memory or remote memory; local or remote is determined by the home socket of the address. An unset group counts all.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "EventCode": "0x181", + "EventName": "UCF_EXT_SNP_ACCESS", + "BriefDescription": "Counts snoop requests that a home SLC or GL2 in another socket sends to this SLC.", + "PublicDescription": "Counts snoop requests that a home SLC or GL2 in another socket sends to this SLC. Snoops are counted whether or not the response carries data. Filters: every counted snoop matches src_rem and dst_rem, since it comes from a remote initiator for an address homed in another socket. An unset source or destination group counts all.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "EventCode": "0x182", + "EventName": "UCF_EXT_SNP_EVICT", + "BriefDescription": "Counts snoop requests from a home SLC or GL2 in another socket that invalidate an L3 cache or snoop filter entry in this SLC.", + "PublicDescription": "Counts snoop requests from a home SLC or GL2 in another socket that invalidate an L3 cache entry or snoop filter entry in this SLC. Snoops are counted whether or not the response carries data, so this event cannot give the number or volume of data-bearing snoop responses (see UCF_SLC_WB). Filters: every counted snoop matches src_rem and dst_rem, since it comes from a remote initiator for an address homed in another socket. An unset source or destination group counts all.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "EventCode": "0x121", + "EventName": "UCF_MEM_ACCESS_RD", + "BriefDescription": "Counts read requests from the SLC toward local CMEM, local GMEM, local CXL memory or remote memory.", + "PublicDescription": "Counts read requests from the SLC toward local CMEM, local GMEM, local CXL memory or remote memory. For remote memory it can overcount: it also increments for each Shared-to-Unique permission upgrade (dataless MakeReadUnique) of a cache line shared by requesters in different sockets. To count reads from remote sources without this overcount, count UCF_SLC_ACCESS_RD on the memory's home socket with src_rem, dst_loc_cmem, dst_loc_gmem and dst_loc_other set. Filters: src_loc_cpu, src_loc_noncpu and src_rem select the request initiator: local CPU, local non-CPU device or remote socket. dst_loc_cmem, dst_loc_gmem, dst_loc_other and dst_rem select the memory type of the request address: local CMEM, local GMEM, local CXL memory or remote memory; local or remote is determined by the home socket of the address. An unset group counts all.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "EventCode": "0x122", + "EventName": "UCF_MEM_ACCESS_WR", + "BriefDescription": "Counts write requests from the SLC toward local CMEM, local GMEM, local CXL memory or remote memory.", + "PublicDescription": "Counts write requests from the SLC toward local CMEM, local GMEM, local CXL memory or remote memory. It includes SLC write-backs, which are attributed as described for UCF_SLC_WB. Data-bearing snoop responses to evictions by a home SLC in another socket or a connected GPU's GL2 are not counted (see UCF_SLC_WB). Filters: src_loc_cpu, src_loc_noncpu and src_rem select the request initiator: local CPU, local non-CPU device or remote socket. dst_loc_cmem, dst_loc_gmem, dst_loc_other and dst_rem select the memory type of the request address: local CMEM, local GMEM, local CXL memory or remote memory; local or remote is determined by the home socket of the address. An unset group counts all.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "EventCode": "0x123", + "EventName": "UCF_MEM_BYTES_RD", + "BriefDescription": "Counts bytes transferred by the read requests counted by UCF_MEM_ACCESS_RD.", + "PublicDescription": "Counts bytes transferred by the read requests counted by UCF_MEM_ACCESS_RD. Source and destination filters work as described for UCF_MEM_ACCESS_RD.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "EventCode": "0x124", + "EventName": "UCF_MEM_BYTES_WR", + "BriefDescription": "Counts bytes transferred by the write requests counted by UCF_MEM_ACCESS_WR.", + "PublicDescription": "Counts bytes transferred by the write requests counted by UCF_MEM_ACCESS_WR, including write-back data attributed as described for UCF_SLC_WB. Data-bearing snoop responses to evictions by a home SLC in another socket or a connected GPU's GL2 are not counted (see UCF_SLC_WB). Source and destination filters work as described for UCF_MEM_ACCESS_WR.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_freq", + "MetricGroup": "UCF_Frequency", + "MetricConstraint": "NO_GROUP_EVENTS", + "MetricExpr": "(UCF_CYCLES / aggr_nr(UCF_CYCLES)) / 1e9 / duration_time", + "ScaleUnit": "1GHz", + "BriefDescription": "UCF clock frequency.", + "PublicDescription": "Average UCF clock frequency over the measurement interval.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_slc_rd_bandwidth_all_src_to_all_dst", + "MetricGroup": "UCF_BW_Upstream_RD;UCF_BW_All_Src_To_All_Dst", + "MetricExpr": "UCF_SLC_BYTES_RD@src_loc_cpu=1,src_loc_noncpu=1,src_rem=1,dst_loc_cmem=1,dst_loc_gmem=1,dst_loc_other=1,dst_rem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average requester-to-SLC read bandwidth for requests from all sources to all destinations.", + "PublicDescription": "Average requester-to-SLC read bandwidth of requests from local CPUs, local non-CPU devices and remote sockets for local CMEM, local GMEM, local CXL memory and remote memory addresses.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_mem_rd_bandwidth_all_src_to_all_dst", + "MetricGroup": "UCF_BW_Downstream_RD;UCF_BW_All_Src_To_All_Dst", + "MetricExpr": "UCF_MEM_BYTES_RD@src_loc_cpu=1,src_loc_noncpu=1,src_rem=1,dst_loc_cmem=1,dst_loc_gmem=1,dst_loc_other=1,dst_rem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average SLC-to-memory read bandwidth for all memory destinations, for requests from all initiators.", + "PublicDescription": "Average SLC-to-memory read bandwidth for local CMEM, local GMEM, local CXL memory and remote memory, for requests initiated by local CPUs, local non-CPU devices and remote sockets.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_slc_wr_bandwidth_all_src_to_all_dst", + "MetricGroup": "UCF_BW_Upstream_WR;UCF_BW_All_Src_To_All_Dst", + "MetricExpr": "UCF_SLC_BYTES_WR@src_loc_cpu=1,src_loc_noncpu=1,src_rem=1,dst_loc_cmem=1,dst_loc_gmem=1,dst_loc_other=1,dst_rem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average requester-to-SLC write bandwidth for requests from all sources to all destinations.", + "PublicDescription": "Average requester-to-SLC write bandwidth of requests from local CPUs, local non-CPU devices and remote sockets for local CMEM, local GMEM, local CXL memory and remote memory addresses.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_mem_wr_bandwidth_all_src_to_all_dst", + "MetricGroup": "UCF_BW_Downstream_WR;UCF_BW_All_Src_To_All_Dst", + "MetricExpr": "UCF_MEM_BYTES_WR@src_loc_cpu=1,src_loc_noncpu=1,src_rem=1,dst_loc_cmem=1,dst_loc_gmem=1,dst_loc_other=1,dst_rem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average SLC-to-memory write bandwidth for local and remote memory, for traffic from all initiators.", + "PublicDescription": "Average SLC-to-memory write bandwidth for local CMEM, local GMEM, local CXL memory and remote memory, for traffic initiated by local CPUs, local non-CPU devices and remote sockets. Includes write-backs, attributed as described for UCF_SLC_WB. Data-bearing snoop responses to evictions by a home SLC in another socket or a connected GPU's GL2 are not counted (see UCF_SLC_WB).", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_slc_rd_bandwidth_local_cpu_to_local_cmem", + "MetricGroup": "UCF_BW_Upstream_RD;UCF_BW_Local_CPU;UCF_BW_Local_CMEM;UCF_BW_Local_CPU_To_Local_CMEM", + "MetricExpr": "UCF_SLC_BYTES_RD@src_loc_cpu=1,dst_loc_cmem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average requester-to-SLC read bandwidth for local CPU requests to local CMEM addresses.", + "PublicDescription": "Average requester-to-SLC read bandwidth of requests from local CPUs for local CMEM addresses.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_mem_rd_bandwidth_local_cpu_to_local_cmem", + "MetricGroup": "UCF_BW_Downstream_RD;UCF_BW_Local_CPU;UCF_BW_Local_CMEM;UCF_BW_Local_CPU_To_Local_CMEM", + "MetricExpr": "UCF_MEM_BYTES_RD@src_loc_cpu=1,dst_loc_cmem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average SLC-to-memory read bandwidth for local CMEM, for requests initiated by local CPUs.", + "PublicDescription": "Average SLC-to-memory read bandwidth for local CMEM, for requests initiated by local CPUs.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_slc_wr_bandwidth_local_cpu_to_local_cmem", + "MetricGroup": "UCF_BW_Upstream_WR;UCF_BW_Local_CPU;UCF_BW_Local_CMEM;UCF_BW_Local_CPU_To_Local_CMEM", + "MetricExpr": "UCF_SLC_BYTES_WR@src_loc_cpu=1,dst_loc_cmem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average requester-to-SLC write bandwidth for local CPU requests to local CMEM addresses.", + "PublicDescription": "Average requester-to-SLC write bandwidth of requests from local CPUs for local CMEM addresses.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_mem_wr_bandwidth_local_cpu_to_local_cmem", + "MetricGroup": "UCF_BW_Downstream_WR;UCF_BW_Local_CPU;UCF_BW_Local_CMEM;UCF_BW_Local_CPU_To_Local_CMEM", + "MetricExpr": "UCF_MEM_BYTES_WR@src_loc_cpu=1,dst_loc_cmem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average SLC-to-memory write bandwidth for local CMEM, for traffic initiated by local CPUs.", + "PublicDescription": "Average SLC-to-memory write bandwidth for local CMEM, for traffic initiated by local CPUs. Includes write-backs, attributed as described for UCF_SLC_WB.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_slc_rd_bandwidth_local_cpu_to_local_gmem", + "MetricGroup": "UCF_BW_Upstream_RD;UCF_BW_Local_CPU;UCF_BW_Local_GMEM;UCF_BW_Local_CPU_To_Local_GMEM", + "MetricExpr": "UCF_SLC_BYTES_RD@src_loc_cpu=1,dst_loc_gmem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average requester-to-SLC read bandwidth for local CPU requests to local GMEM addresses.", + "PublicDescription": "Average requester-to-SLC read bandwidth of requests from local CPUs for local GMEM addresses.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_mem_rd_bandwidth_local_cpu_to_local_gmem", + "MetricGroup": "UCF_BW_Downstream_RD;UCF_BW_Local_CPU;UCF_BW_Local_GMEM;UCF_BW_Local_CPU_To_Local_GMEM", + "MetricExpr": "UCF_MEM_BYTES_RD@src_loc_cpu=1,dst_loc_gmem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average SLC-to-memory read bandwidth for local GMEM, for requests initiated by local CPUs.", + "PublicDescription": "Average SLC-to-memory read bandwidth for local GMEM, for requests initiated by local CPUs.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_slc_wr_bandwidth_local_cpu_to_local_gmem", + "MetricGroup": "UCF_BW_Upstream_WR;UCF_BW_Local_CPU;UCF_BW_Local_GMEM;UCF_BW_Local_CPU_To_Local_GMEM", + "MetricExpr": "UCF_SLC_BYTES_WR@src_loc_cpu=1,dst_loc_gmem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average requester-to-SLC write bandwidth for local CPU requests to local GMEM addresses.", + "PublicDescription": "Average requester-to-SLC write bandwidth of requests from local CPUs for local GMEM addresses.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_mem_wr_bandwidth_local_cpu_to_local_gmem", + "MetricGroup": "UCF_BW_Downstream_WR;UCF_BW_Local_CPU;UCF_BW_Local_GMEM;UCF_BW_Local_CPU_To_Local_GMEM", + "MetricExpr": "UCF_MEM_BYTES_WR@src_loc_cpu=1,dst_loc_gmem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average SLC-to-memory write bandwidth for local GMEM, for traffic initiated by local CPUs.", + "PublicDescription": "Average SLC-to-memory write bandwidth for local GMEM, for traffic initiated by local CPUs. Includes write-backs, attributed as described for UCF_SLC_WB. Data-bearing snoop responses to evictions by a home SLC in another socket or a connected GPU's GL2 are not counted (see UCF_SLC_WB).", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_slc_rd_bandwidth_local_cpu_to_local_cxlmem", + "MetricGroup": "UCF_BW_Upstream_RD;UCF_BW_Local_CPU;UCF_BW_Local_CXLMEM;UCF_BW_Local_CPU_To_Local_CXLMEM", + "MetricExpr": "UCF_SLC_BYTES_RD@src_loc_cpu=1,dst_loc_other=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average requester-to-SLC read bandwidth for local CPU requests to local CXL memory addresses.", + "PublicDescription": "Average requester-to-SLC read bandwidth of requests from local CPUs for local CXL memory addresses.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_mem_rd_bandwidth_local_cpu_to_local_cxlmem", + "MetricGroup": "UCF_BW_Downstream_RD;UCF_BW_Local_CPU;UCF_BW_Local_CXLMEM;UCF_BW_Local_CPU_To_Local_CXLMEM", + "MetricExpr": "UCF_MEM_BYTES_RD@src_loc_cpu=1,dst_loc_other=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average SLC-to-memory read bandwidth for local CXL memory, for requests initiated by local CPUs.", + "PublicDescription": "Average SLC-to-memory read bandwidth for local CXL memory, for requests initiated by local CPUs.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_slc_wr_bandwidth_local_cpu_to_local_cxlmem", + "MetricGroup": "UCF_BW_Upstream_WR;UCF_BW_Local_CPU;UCF_BW_Local_CXLMEM;UCF_BW_Local_CPU_To_Local_CXLMEM", + "MetricExpr": "UCF_SLC_BYTES_WR@src_loc_cpu=1,dst_loc_other=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average requester-to-SLC write bandwidth for local CPU requests to local CXL memory addresses.", + "PublicDescription": "Average requester-to-SLC write bandwidth of requests from local CPUs for local CXL memory addresses.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_mem_wr_bandwidth_local_cpu_to_local_cxlmem", + "MetricGroup": "UCF_BW_Downstream_WR;UCF_BW_Local_CPU;UCF_BW_Local_CXLMEM;UCF_BW_Local_CPU_To_Local_CXLMEM", + "MetricExpr": "UCF_MEM_BYTES_WR@src_loc_cpu=1,dst_loc_other=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average SLC-to-memory write bandwidth for local CXL memory, for traffic initiated by local CPUs.", + "PublicDescription": "Average SLC-to-memory write bandwidth for local CXL memory, for traffic initiated by local CPUs. Includes write-backs, attributed as described for UCF_SLC_WB.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_slc_rd_bandwidth_local_cpu_to_remote_mem", + "MetricGroup": "UCF_BW_Upstream_RD;UCF_BW_Local_CPU;UCF_BW_Remote_Memory;UCF_BW_Local_CPU_To_Remote_Memory", + "MetricExpr": "UCF_SLC_BYTES_RD@src_loc_cpu=1,dst_rem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average requester-to-SLC read bandwidth for local CPU requests to remote memory addresses.", + "PublicDescription": "Average requester-to-SLC read bandwidth of requests from local CPUs for remote memory addresses.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_mem_rd_bandwidth_local_cpu_to_remote_mem", + "MetricGroup": "UCF_BW_Downstream_RD;UCF_BW_Local_CPU;UCF_BW_Remote_Memory;UCF_BW_Local_CPU_To_Remote_Memory", + "MetricExpr": "UCF_MEM_BYTES_RD@src_loc_cpu=1,dst_rem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average SLC-to-memory read bandwidth for remote memory, for requests initiated by local CPUs.", + "PublicDescription": "Average SLC-to-memory read bandwidth for remote memory, for requests initiated by local CPUs.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_slc_wr_bandwidth_local_cpu_to_remote_mem", + "MetricGroup": "UCF_BW_Upstream_WR;UCF_BW_Local_CPU;UCF_BW_Remote_Memory;UCF_BW_Local_CPU_To_Remote_Memory", + "MetricExpr": "UCF_SLC_BYTES_WR@src_loc_cpu=1,dst_rem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average requester-to-SLC write bandwidth for local CPU requests to remote memory addresses.", + "PublicDescription": "Average requester-to-SLC write bandwidth of requests from local CPUs for remote memory addresses.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_mem_wr_bandwidth_local_cpu_to_remote_mem", + "MetricGroup": "UCF_BW_Downstream_WR;UCF_BW_Local_CPU;UCF_BW_Remote_Memory;UCF_BW_Local_CPU_To_Remote_Memory", + "MetricExpr": "UCF_MEM_BYTES_WR@src_loc_cpu=1,dst_rem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average SLC-to-memory write bandwidth for remote memory, for traffic initiated by local CPUs.", + "PublicDescription": "Average SLC-to-memory write bandwidth for remote memory, for traffic initiated by local CPUs. Includes write-backs, attributed as described for UCF_SLC_WB. Data-bearing snoop responses to evictions by a home SLC in another socket or a connected GPU's GL2 are not counted (see UCF_SLC_WB).", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_slc_rd_bandwidth_local_noncpu_to_local_cmem", + "MetricGroup": "UCF_BW_Upstream_RD;UCF_BW_Local_NonCPU;UCF_BW_Local_CMEM;UCF_BW_Local_NonCPU_To_Local_CMEM", + "MetricExpr": "UCF_SLC_BYTES_RD@src_loc_noncpu=1,dst_loc_cmem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average requester-to-SLC read bandwidth for local non-CPU requests to local CMEM addresses.", + "PublicDescription": "Average requester-to-SLC read bandwidth of requests from local non-CPU devices such as the GPU and PCIe devices for local CMEM addresses.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_mem_rd_bandwidth_local_noncpu_to_local_cmem", + "MetricGroup": "UCF_BW_Downstream_RD;UCF_BW_Local_NonCPU;UCF_BW_Local_CMEM;UCF_BW_Local_NonCPU_To_Local_CMEM", + "MetricExpr": "UCF_MEM_BYTES_RD@src_loc_noncpu=1,dst_loc_cmem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average SLC-to-memory read bandwidth for local CMEM, for requests initiated by local non-CPU devices.", + "PublicDescription": "Average SLC-to-memory read bandwidth for local CMEM, for requests initiated by local non-CPU devices such as the GPU and PCIe devices.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_slc_wr_bandwidth_local_noncpu_to_local_cmem", + "MetricGroup": "UCF_BW_Upstream_WR;UCF_BW_Local_NonCPU;UCF_BW_Local_CMEM;UCF_BW_Local_NonCPU_To_Local_CMEM", + "MetricExpr": "UCF_SLC_BYTES_WR@src_loc_noncpu=1,dst_loc_cmem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average requester-to-SLC write bandwidth for local non-CPU requests to local CMEM addresses.", + "PublicDescription": "Average requester-to-SLC write bandwidth of requests from local non-CPU devices such as the GPU and PCIe devices for local CMEM addresses.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_mem_wr_bandwidth_local_noncpu_to_local_cmem", + "MetricGroup": "UCF_BW_Downstream_WR;UCF_BW_Local_NonCPU;UCF_BW_Local_CMEM;UCF_BW_Local_NonCPU_To_Local_CMEM", + "MetricExpr": "UCF_MEM_BYTES_WR@src_loc_noncpu=1,dst_loc_cmem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average SLC-to-memory write bandwidth for local CMEM, for traffic initiated by local non-CPU devices.", + "PublicDescription": "Average SLC-to-memory write bandwidth for local CMEM, for traffic initiated by local non-CPU devices such as the GPU and PCIe devices. Includes write-backs, attributed as described for UCF_SLC_WB.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_slc_rd_bandwidth_local_noncpu_to_local_gmem", + "MetricGroup": "UCF_BW_Upstream_RD;UCF_BW_Local_NonCPU;UCF_BW_Local_GMEM;UCF_BW_Local_NonCPU_To_Local_GMEM", + "MetricExpr": "UCF_SLC_BYTES_RD@src_loc_noncpu=1,dst_loc_gmem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average requester-to-SLC read bandwidth for local non-CPU requests to local GMEM addresses.", + "PublicDescription": "Average requester-to-SLC read bandwidth of requests from local non-CPU devices such as the GPU and PCIe devices for local GMEM addresses.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_mem_rd_bandwidth_local_noncpu_to_local_gmem", + "MetricGroup": "UCF_BW_Downstream_RD;UCF_BW_Local_NonCPU;UCF_BW_Local_GMEM;UCF_BW_Local_NonCPU_To_Local_GMEM", + "MetricExpr": "UCF_MEM_BYTES_RD@src_loc_noncpu=1,dst_loc_gmem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average SLC-to-memory read bandwidth for local GMEM, for requests initiated by local non-CPU devices.", + "PublicDescription": "Average SLC-to-memory read bandwidth for local GMEM, for requests initiated by local non-CPU devices such as the GPU and PCIe devices.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_slc_wr_bandwidth_local_noncpu_to_local_gmem", + "MetricGroup": "UCF_BW_Upstream_WR;UCF_BW_Local_NonCPU;UCF_BW_Local_GMEM;UCF_BW_Local_NonCPU_To_Local_GMEM", + "MetricExpr": "UCF_SLC_BYTES_WR@src_loc_noncpu=1,dst_loc_gmem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average requester-to-SLC write bandwidth for local non-CPU requests to local GMEM addresses.", + "PublicDescription": "Average requester-to-SLC write bandwidth of requests from local non-CPU devices such as the GPU and PCIe devices for local GMEM addresses.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_mem_wr_bandwidth_local_noncpu_to_local_gmem", + "MetricGroup": "UCF_BW_Downstream_WR;UCF_BW_Local_NonCPU;UCF_BW_Local_GMEM;UCF_BW_Local_NonCPU_To_Local_GMEM", + "MetricExpr": "UCF_MEM_BYTES_WR@src_loc_noncpu=1,dst_loc_gmem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average SLC-to-memory write bandwidth for local GMEM, for traffic initiated by local non-CPU devices.", + "PublicDescription": "Average SLC-to-memory write bandwidth for local GMEM, for traffic initiated by local non-CPU devices such as the GPU and PCIe devices. Includes write-backs, attributed as described for UCF_SLC_WB. Data-bearing snoop responses to evictions by a home SLC in another socket or a connected GPU's GL2 are not counted (see UCF_SLC_WB).", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_slc_rd_bandwidth_local_noncpu_to_local_cxlmem", + "MetricGroup": "UCF_BW_Upstream_RD;UCF_BW_Local_NonCPU;UCF_BW_Local_CXLMEM;UCF_BW_Local_NonCPU_To_Local_CXLMEM", + "MetricExpr": "UCF_SLC_BYTES_RD@src_loc_noncpu=1,dst_loc_other=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average requester-to-SLC read bandwidth for local non-CPU requests to local CXL memory addresses.", + "PublicDescription": "Average requester-to-SLC read bandwidth of requests from local non-CPU devices such as the GPU and PCIe devices for local CXL memory addresses.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_mem_rd_bandwidth_local_noncpu_to_local_cxlmem", + "MetricGroup": "UCF_BW_Downstream_RD;UCF_BW_Local_NonCPU;UCF_BW_Local_CXLMEM;UCF_BW_Local_NonCPU_To_Local_CXLMEM", + "MetricExpr": "UCF_MEM_BYTES_RD@src_loc_noncpu=1,dst_loc_other=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average SLC-to-memory read bandwidth for local CXL memory, for requests initiated by local non-CPU devices.", + "PublicDescription": "Average SLC-to-memory read bandwidth for local CXL memory, for requests initiated by local non-CPU devices such as the GPU and PCIe devices.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_slc_wr_bandwidth_local_noncpu_to_local_cxlmem", + "MetricGroup": "UCF_BW_Upstream_WR;UCF_BW_Local_NonCPU;UCF_BW_Local_CXLMEM;UCF_BW_Local_NonCPU_To_Local_CXLMEM", + "MetricExpr": "UCF_SLC_BYTES_WR@src_loc_noncpu=1,dst_loc_other=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average requester-to-SLC write bandwidth for local non-CPU requests to local CXL memory addresses.", + "PublicDescription": "Average requester-to-SLC write bandwidth of requests from local non-CPU devices such as the GPU and PCIe devices for local CXL memory addresses.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_mem_wr_bandwidth_local_noncpu_to_local_cxlmem", + "MetricGroup": "UCF_BW_Downstream_WR;UCF_BW_Local_NonCPU;UCF_BW_Local_CXLMEM;UCF_BW_Local_NonCPU_To_Local_CXLMEM", + "MetricExpr": "UCF_MEM_BYTES_WR@src_loc_noncpu=1,dst_loc_other=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average SLC-to-memory write bandwidth for local CXL memory, for traffic initiated by local non-CPU devices.", + "PublicDescription": "Average SLC-to-memory write bandwidth for local CXL memory, for traffic initiated by local non-CPU devices such as the GPU and PCIe devices. Includes write-backs, attributed as described for UCF_SLC_WB.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_slc_rd_bandwidth_local_noncpu_to_remote_mem", + "MetricGroup": "UCF_BW_Upstream_RD;UCF_BW_Local_NonCPU;UCF_BW_Remote_Memory;UCF_BW_Local_NonCPU_To_Remote_Memory", + "MetricExpr": "UCF_SLC_BYTES_RD@src_loc_noncpu=1,dst_rem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average requester-to-SLC read bandwidth for local non-CPU requests to remote memory addresses.", + "PublicDescription": "Average requester-to-SLC read bandwidth of requests from local non-CPU devices such as the GPU and PCIe devices for remote memory addresses.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_mem_rd_bandwidth_local_noncpu_to_remote_mem", + "MetricGroup": "UCF_BW_Downstream_RD;UCF_BW_Local_NonCPU;UCF_BW_Remote_Memory;UCF_BW_Local_NonCPU_To_Remote_Memory", + "MetricExpr": "UCF_MEM_BYTES_RD@src_loc_noncpu=1,dst_rem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average SLC-to-memory read bandwidth for remote memory, for requests initiated by local non-CPU devices.", + "PublicDescription": "Average SLC-to-memory read bandwidth for remote memory, for requests initiated by local non-CPU devices such as the GPU and PCIe devices.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_slc_wr_bandwidth_local_noncpu_to_remote_mem", + "MetricGroup": "UCF_BW_Upstream_WR;UCF_BW_Local_NonCPU;UCF_BW_Remote_Memory;UCF_BW_Local_NonCPU_To_Remote_Memory", + "MetricExpr": "UCF_SLC_BYTES_WR@src_loc_noncpu=1,dst_rem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average requester-to-SLC write bandwidth for local non-CPU requests to remote memory addresses.", + "PublicDescription": "Average requester-to-SLC write bandwidth of requests from local non-CPU devices such as the GPU and PCIe devices for remote memory addresses.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_mem_wr_bandwidth_local_noncpu_to_remote_mem", + "MetricGroup": "UCF_BW_Downstream_WR;UCF_BW_Local_NonCPU;UCF_BW_Remote_Memory;UCF_BW_Local_NonCPU_To_Remote_Memory", + "MetricExpr": "UCF_MEM_BYTES_WR@src_loc_noncpu=1,dst_rem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average SLC-to-memory write bandwidth for remote memory, for traffic initiated by local non-CPU devices.", + "PublicDescription": "Average SLC-to-memory write bandwidth for remote memory, for traffic initiated by local non-CPU devices such as the GPU and PCIe devices. Includes write-backs, attributed as described for UCF_SLC_WB. Data-bearing snoop responses to evictions by a home SLC in another socket or a connected GPU's GL2 are not counted (see UCF_SLC_WB).", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_slc_rd_bandwidth_remote_to_local_cmem", + "MetricGroup": "UCF_BW_Upstream_RD;UCF_BW_Remote_Source;UCF_BW_Local_CMEM;UCF_BW_Remote_To_Local_CMEM", + "MetricExpr": "UCF_SLC_BYTES_RD@src_rem=1,dst_loc_cmem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average requester-to-SLC read bandwidth for remote-socket requests to local CMEM addresses.", + "PublicDescription": "Average requester-to-SLC read bandwidth of requests from a remote socket for local CMEM addresses.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_mem_rd_bandwidth_remote_to_local_cmem", + "MetricGroup": "UCF_BW_Downstream_RD;UCF_BW_Remote_Source;UCF_BW_Local_CMEM;UCF_BW_Remote_To_Local_CMEM", + "MetricExpr": "UCF_MEM_BYTES_RD@src_rem=1,dst_loc_cmem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average SLC-to-memory read bandwidth for local CMEM, for requests initiated by a remote socket.", + "PublicDescription": "Average SLC-to-memory read bandwidth for local CMEM, for requests initiated by a remote socket.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_slc_wr_bandwidth_remote_to_local_cmem", + "MetricGroup": "UCF_BW_Upstream_WR;UCF_BW_Remote_Source;UCF_BW_Local_CMEM;UCF_BW_Remote_To_Local_CMEM", + "MetricExpr": "UCF_SLC_BYTES_WR@src_rem=1,dst_loc_cmem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average requester-to-SLC write bandwidth for remote-socket requests to local CMEM addresses.", + "PublicDescription": "Average requester-to-SLC write bandwidth of requests from a remote socket for local CMEM addresses.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_mem_wr_bandwidth_remote_to_local_cmem", + "MetricGroup": "UCF_BW_Downstream_WR;UCF_BW_Remote_Source;UCF_BW_Local_CMEM;UCF_BW_Remote_To_Local_CMEM", + "MetricExpr": "UCF_MEM_BYTES_WR@src_rem=1,dst_loc_cmem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average SLC-to-memory write bandwidth for local CMEM, for traffic initiated by a remote socket.", + "PublicDescription": "Average SLC-to-memory write bandwidth for local CMEM, for traffic initiated by a remote socket. Includes write-backs, attributed as described for UCF_SLC_WB.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_slc_rd_bandwidth_remote_to_local_gmem", + "MetricGroup": "UCF_BW_Upstream_RD;UCF_BW_Remote_Source;UCF_BW_Local_GMEM;UCF_BW_Remote_To_Local_GMEM", + "MetricExpr": "UCF_SLC_BYTES_RD@src_rem=1,dst_loc_gmem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average requester-to-SLC read bandwidth for remote-socket requests to local GMEM addresses.", + "PublicDescription": "Average requester-to-SLC read bandwidth of requests from a remote socket for local GMEM addresses.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_mem_rd_bandwidth_remote_to_local_gmem", + "MetricGroup": "UCF_BW_Downstream_RD;UCF_BW_Remote_Source;UCF_BW_Local_GMEM;UCF_BW_Remote_To_Local_GMEM", + "MetricExpr": "UCF_MEM_BYTES_RD@src_rem=1,dst_loc_gmem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average SLC-to-memory read bandwidth for local GMEM, for requests initiated by a remote socket.", + "PublicDescription": "Average SLC-to-memory read bandwidth for local GMEM, for requests initiated by a remote socket.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_slc_wr_bandwidth_remote_to_local_gmem", + "MetricGroup": "UCF_BW_Upstream_WR;UCF_BW_Remote_Source;UCF_BW_Local_GMEM;UCF_BW_Remote_To_Local_GMEM", + "MetricExpr": "UCF_SLC_BYTES_WR@src_rem=1,dst_loc_gmem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average requester-to-SLC write bandwidth for remote-socket requests to local GMEM addresses.", + "PublicDescription": "Average requester-to-SLC write bandwidth of requests from a remote socket for local GMEM addresses.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_mem_wr_bandwidth_remote_to_local_gmem", + "MetricGroup": "UCF_BW_Downstream_WR;UCF_BW_Remote_Source;UCF_BW_Local_GMEM;UCF_BW_Remote_To_Local_GMEM", + "MetricExpr": "UCF_MEM_BYTES_WR@src_rem=1,dst_loc_gmem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average SLC-to-memory write bandwidth for local GMEM, for traffic initiated by a remote socket.", + "PublicDescription": "Average SLC-to-memory write bandwidth for local GMEM, for traffic initiated by a remote socket. Includes write-backs, attributed as described for UCF_SLC_WB. Data-bearing snoop responses to evictions by a home SLC in another socket or a connected GPU's GL2 are not counted (see UCF_SLC_WB).", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_slc_rd_bandwidth_remote_to_local_cxlmem", + "MetricGroup": "UCF_BW_Upstream_RD;UCF_BW_Remote_Source;UCF_BW_Local_CXLMEM;UCF_BW_Remote_To_Local_CXLMEM", + "MetricExpr": "UCF_SLC_BYTES_RD@src_rem=1,dst_loc_other=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average requester-to-SLC read bandwidth for remote-socket requests to local CXL memory addresses.", + "PublicDescription": "Average requester-to-SLC read bandwidth of requests from a remote socket for local CXL memory addresses.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_mem_rd_bandwidth_remote_to_local_cxlmem", + "MetricGroup": "UCF_BW_Downstream_RD;UCF_BW_Remote_Source;UCF_BW_Local_CXLMEM;UCF_BW_Remote_To_Local_CXLMEM", + "MetricExpr": "UCF_MEM_BYTES_RD@src_rem=1,dst_loc_other=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average SLC-to-memory read bandwidth for local CXL memory, for requests initiated by a remote socket.", + "PublicDescription": "Average SLC-to-memory read bandwidth for local CXL memory, for requests initiated by a remote socket.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_slc_wr_bandwidth_remote_to_local_cxlmem", + "MetricGroup": "UCF_BW_Upstream_WR;UCF_BW_Remote_Source;UCF_BW_Local_CXLMEM;UCF_BW_Remote_To_Local_CXLMEM", + "MetricExpr": "UCF_SLC_BYTES_WR@src_rem=1,dst_loc_other=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average requester-to-SLC write bandwidth for remote-socket requests to local CXL memory addresses.", + "PublicDescription": "Average requester-to-SLC write bandwidth of requests from a remote socket for local CXL memory addresses.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_mem_wr_bandwidth_remote_to_local_cxlmem", + "MetricGroup": "UCF_BW_Downstream_WR;UCF_BW_Remote_Source;UCF_BW_Local_CXLMEM;UCF_BW_Remote_To_Local_CXLMEM", + "MetricExpr": "UCF_MEM_BYTES_WR@src_rem=1,dst_loc_other=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average SLC-to-memory write bandwidth for local CXL memory, for traffic initiated by a remote socket.", + "PublicDescription": "Average SLC-to-memory write bandwidth for local CXL memory, for traffic initiated by a remote socket. Includes write-backs, attributed as described for UCF_SLC_WB.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_slc_rd_bandwidth_remote_to_remote_mem", + "MetricGroup": "UCF_BW_Upstream_RD;UCF_BW_Remote_Source;UCF_BW_Remote_Memory;UCF_BW_Remote_To_Remote_Memory", + "MetricExpr": "UCF_SLC_BYTES_RD@src_rem=1,dst_rem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average requester-to-SLC read bandwidth for remote-socket requests to remote memory addresses.", + "PublicDescription": "Average requester-to-SLC read bandwidth of requests from a remote socket for remote memory addresses.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_mem_rd_bandwidth_remote_to_remote_mem", + "MetricGroup": "UCF_BW_Downstream_RD;UCF_BW_Remote_Source;UCF_BW_Remote_Memory;UCF_BW_Remote_To_Remote_Memory", + "MetricExpr": "UCF_MEM_BYTES_RD@src_rem=1,dst_rem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average SLC-to-memory read bandwidth for remote memory, for requests initiated by a remote socket.", + "PublicDescription": "Average SLC-to-memory read bandwidth for remote memory, for requests initiated by a remote socket.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_slc_wr_bandwidth_remote_to_remote_mem", + "MetricGroup": "UCF_BW_Upstream_WR;UCF_BW_Remote_Source;UCF_BW_Remote_Memory;UCF_BW_Remote_To_Remote_Memory", + "MetricExpr": "UCF_SLC_BYTES_WR@src_rem=1,dst_rem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average requester-to-SLC write bandwidth for remote-socket requests to remote memory addresses.", + "PublicDescription": "Average requester-to-SLC write bandwidth of requests from a remote socket for remote memory addresses.", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + }, + { + "MetricName": "ucf_avg_mem_wr_bandwidth_remote_to_remote_mem", + "MetricGroup": "UCF_BW_Downstream_WR;UCF_BW_Remote_Source;UCF_BW_Remote_Memory;UCF_BW_Remote_To_Remote_Memory", + "MetricExpr": "UCF_MEM_BYTES_WR@src_rem=1,dst_rem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average SLC-to-memory write bandwidth for remote memory, for traffic initiated by a remote socket.", + "PublicDescription": "Average SLC-to-memory write bandwidth for remote memory, for traffic initiated by a remote socket. Includes write-backs, attributed as described for UCF_SLC_WB. Data-bearing snoop responses to evictions by a home SLC in another socket or a connected GPU's GL2 are not counted (see UCF_SLC_WB).", + "Compat": "2cf2036b", + "Unit": "nvidia_ucf_pmu_" + } +]
Signature · 1 line
2.43.0
[email protected]
AI reviewRe: [PATCH 2/6] perf jevents: Add support for NVIDIA Tegra410 UCF PMU aliasing
Sashiko has reviewed this patch and found no issues.
Quoted 3 lines
Add alias support for NVIDIA Tegra410 UCF PMU events and metrics.
Signed-off-by Besar Wicaksono <[email protected]>
Sashiko has reviewed this patch and found no issues.
Signature · 1 line
Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=2
PATCH 3/6 perf jevents: Add support for NVIDIA Tegra410 PCIE PMU aliasing
In reply to Besar WicaksonoAdd alias support for NVIDIA Tegra410 PCIE PMU events and metrics.
--- .../arm64/nvidia/t410/sys/uncore-pcie.json | 247 ++++++++++++++++++ 1 file changed, 247 insertions(+) create mode 100644 tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-pcie.json
tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-pcie.json new file +247 -0
@@ -0,0 +1,247 @@ +[ + { + "EventCode": "0x100000000", + "EventName": "PCIE_CYCLES", + "BriefDescription": "Counts cycles at the PCIe interface to the Tegra SoC data fabric.", + "PublicDescription": "Counts cycles at the PCIe interface to the Tegra SoC data fabric.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "EventCode": "0x2", + "EventName": "PCIE_RD_REQ", + "BriefDescription": "Counts read requests from PCIe devices under this PCIe root complex to memory or another PCIe device.", + "PublicDescription": "Counts read requests from PCIe devices under this PCIe root complex to memory or another PCIe device, where the target responds with data. Request size can be from 1 to 256 bytes. Filters: src_rp_mask selects the requesting root ports. Alternatively, src_bdf with src_bdf_en selects one requesting device (BDF); it cannot be combined with src_rp_mask and applies to all counters of this PMU. Destination filters select the memory type of the request address: dst_loc_cmem local CMEM, dst_loc_gmem local GMEM, dst_loc_pcie_p2p local PCIe peer addresses, dst_loc_pcie_cxl local CXL memory, dst_rem remote memory. This is the address's home type, not where the data currently resides; local or remote is determined by the home socket of the address. An unset source filter counts all root ports; an unset destination filter counts all destinations.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "EventCode": "0x3", + "EventName": "PCIE_WR_REQ", + "BriefDescription": "Counts write requests from PCIe devices under this PCIe root complex to memory or another PCIe device.", + "PublicDescription": "Counts write requests from PCIe devices under this PCIe root complex to memory or another PCIe device, where the PCIe device sends data. Request size can be from 1 to 256 bytes. Filters: src_rp_mask selects the requesting root ports. Alternatively, src_bdf with src_bdf_en selects one requesting device (BDF); it cannot be combined with src_rp_mask and applies to all counters of this PMU. Destination filters select the memory type of the request address: dst_loc_cmem local CMEM, dst_loc_gmem local GMEM, dst_loc_pcie_p2p local PCIe peer addresses, dst_loc_pcie_cxl local CXL memory, dst_rem remote memory. This is the address's home type, not where the data currently resides; local or remote is determined by the home socket of the address. An unset source filter counts all root ports; an unset destination filter counts all destinations.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "EventCode": "0x0", + "EventName": "PCIE_RD_BYTES", + "BriefDescription": "Counts bytes transferred by the read requests counted by PCIE_RD_REQ.", + "PublicDescription": "Counts bytes transferred by the read requests counted by PCIE_RD_REQ. Source and destination filters work as described for PCIE_RD_REQ.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "EventCode": "0x1", + "EventName": "PCIE_WR_BYTES", + "BriefDescription": "Counts bytes transferred by the write requests counted by PCIE_WR_REQ.", + "PublicDescription": "Counts bytes transferred by the write requests counted by PCIE_WR_REQ. Source and destination filters work as described for PCIE_WR_REQ.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "EventCode": "0x4", + "EventName": "PCIE_RD_CUM_OUTS", + "BriefDescription": "Accumulates the outstanding read requests counted by PCIE_RD_REQ each cycle at the PCIe interface.", + "PublicDescription": "Accumulates the outstanding read requests counted by PCIE_RD_REQ each cycle at the PCIe interface. Pair the two under the same filters for the average read latency. Source and destination filters work as described for PCIE_RD_REQ.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_freq", + "MetricGroup": "PCIE_Frequency;PCIE_Read_Latency", + "MetricConstraint": "NO_GROUP_EVENTS", + "MetricExpr": "(PCIE_CYCLES / aggr_nr(PCIE_CYCLES)) / 1e9 / duration_time", + "ScaleUnit": "1GHz", + "BriefDescription": "Frequency of the cycles at the PCIe interface to the Tegra SoC data fabric.", + "PublicDescription": "Average frequency of the cycles at the PCIe interface to the Tegra SoC data fabric over the measurement interval.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_rd_bandwidth_to_all_dst", + "MetricGroup": "PCIE_Bandwidth;PCIE_To_All_Destinations", + "MetricExpr": "PCIE_RD_BYTES@dst_loc_cmem=1,dst_loc_gmem=1,dst_loc_pcie_p2p=1,dst_loc_pcie_cxl=1,dst_rem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average read bandwidth from PCIe devices under this PCIe root complex to all destinations.", + "PublicDescription": "Average read bandwidth of requests from all PCIe devices under this PCIe root complex to all destinations: local CMEM, local GMEM, local PCIe peer addresses, local CXL memory and remote memory.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_wr_bandwidth_to_all_dst", + "MetricGroup": "PCIE_Bandwidth;PCIE_To_All_Destinations", + "MetricExpr": "PCIE_WR_BYTES@dst_loc_cmem=1,dst_loc_gmem=1,dst_loc_pcie_p2p=1,dst_loc_pcie_cxl=1,dst_rem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average write bandwidth from PCIe devices under this PCIe root complex to all destinations.", + "PublicDescription": "Average write bandwidth of requests from all PCIe devices under this PCIe root complex to all destinations: local CMEM, local GMEM, local PCIe peer addresses, local CXL memory and remote memory.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_rd_latency_to_all_dst", + "MetricGroup": "PCIE_Read_Latency;PCIE_To_All_Destinations", + "MetricConstraint": "NO_GROUP_EVENTS", + "MetricExpr": "(PCIE_RD_CUM_OUTS@dst_loc_cmem=1,dst_loc_gmem=1,dst_loc_pcie_p2p=1,dst_loc_pcie_cxl=1,dst_rem=1@ / PCIE_RD_REQ@dst_loc_cmem=1,dst_loc_gmem=1,dst_loc_pcie_p2p=1,dst_loc_pcie_cxl=1,dst_rem=1@) / pcie_freq", + "ScaleUnit": "1ns/request", + "BriefDescription": "Average read latency from PCIe devices under this PCIe root complex to all destinations.", + "PublicDescription": "Average latency of read requests from all PCIe devices under this PCIe root complex to all destinations: local CMEM, local GMEM, local PCIe peer addresses, local CXL memory and remote memory.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_rd_bandwidth_to_local_cmem", + "MetricGroup": "PCIE_Bandwidth;PCIE_Read;PCIE_To_Local_CMEM", + "MetricExpr": "PCIE_RD_BYTES@dst_loc_cmem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average read bandwidth from PCIe devices under this PCIe root complex to local CMEM.", + "PublicDescription": "Average read bandwidth of requests from all PCIe devices under this PCIe root complex to local CMEM.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_wr_bandwidth_to_local_cmem", + "MetricGroup": "PCIE_Bandwidth;PCIE_Write;PCIE_To_Local_CMEM", + "MetricExpr": "PCIE_WR_BYTES@dst_loc_cmem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average write bandwidth from PCIe devices under this PCIe root complex to local CMEM.", + "PublicDescription": "Average write bandwidth of requests from all PCIe devices under this PCIe root complex to local CMEM.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_rd_latency_to_local_cmem", + "MetricGroup": "PCIE_Read_Latency;PCIE_Read;PCIE_To_Local_CMEM", + "MetricConstraint": "NO_GROUP_EVENTS", + "MetricExpr": "(PCIE_RD_CUM_OUTS@dst_loc_cmem=1@ / PCIE_RD_REQ@dst_loc_cmem=1@) / pcie_freq", + "ScaleUnit": "1ns/request", + "BriefDescription": "Average read latency from PCIe devices under this PCIe root complex to local CMEM.", + "PublicDescription": "Average latency of read requests from all PCIe devices under this PCIe root complex to local CMEM.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_rd_bandwidth_to_local_gmem", + "MetricGroup": "PCIE_Bandwidth;PCIE_Read;PCIE_To_Local_GMEM", + "MetricExpr": "PCIE_RD_BYTES@dst_loc_gmem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average read bandwidth from PCIe devices under this PCIe root complex to local GMEM.", + "PublicDescription": "Average read bandwidth of requests from all PCIe devices under this PCIe root complex to local GMEM.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_wr_bandwidth_to_local_gmem", + "MetricGroup": "PCIE_Bandwidth;PCIE_Write;PCIE_To_Local_GMEM", + "MetricExpr": "PCIE_WR_BYTES@dst_loc_gmem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average write bandwidth from PCIe devices under this PCIe root complex to local GMEM.", + "PublicDescription": "Average write bandwidth of requests from all PCIe devices under this PCIe root complex to local GMEM.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_rd_latency_to_local_gmem", + "MetricGroup": "PCIE_Read_Latency;PCIE_Read;PCIE_To_Local_GMEM", + "MetricConstraint": "NO_GROUP_EVENTS", + "MetricExpr": "(PCIE_RD_CUM_OUTS@dst_loc_gmem=1@ / PCIE_RD_REQ@dst_loc_gmem=1@) / pcie_freq", + "ScaleUnit": "1ns/request", + "BriefDescription": "Average read latency from PCIe devices under this PCIe root complex to local GMEM.", + "PublicDescription": "Average latency of read requests from all PCIe devices under this PCIe root complex to local GMEM.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_rd_bandwidth_to_local_cxlmem", + "MetricGroup": "PCIE_Bandwidth;PCIE_Read;PCIE_To_Local_CXLMEM", + "MetricExpr": "PCIE_RD_BYTES@dst_loc_pcie_cxl=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average read bandwidth from PCIe devices under this PCIe root complex to local CXL memory.", + "PublicDescription": "Average read bandwidth of requests from all PCIe devices under this PCIe root complex to local CXL memory.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_wr_bandwidth_to_local_cxlmem", + "MetricGroup": "PCIE_Bandwidth;PCIE_Write;PCIE_To_Local_CXLMEM", + "MetricExpr": "PCIE_WR_BYTES@dst_loc_pcie_cxl=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average write bandwidth from PCIe devices under this PCIe root complex to local CXL memory.", + "PublicDescription": "Average write bandwidth of requests from all PCIe devices under this PCIe root complex to local CXL memory.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_rd_latency_to_local_cxlmem", + "MetricGroup": "PCIE_Read_Latency;PCIE_Read;PCIE_To_Local_CXLMEM", + "MetricConstraint": "NO_GROUP_EVENTS", + "MetricExpr": "(PCIE_RD_CUM_OUTS@dst_loc_pcie_cxl=1@ / PCIE_RD_REQ@dst_loc_pcie_cxl=1@) / pcie_freq", + "ScaleUnit": "1ns/request", + "BriefDescription": "Average read latency from PCIe devices under this PCIe root complex to local CXL memory.", + "PublicDescription": "Average latency of read requests from all PCIe devices under this PCIe root complex to local CXL memory.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_rd_bandwidth_to_remote_mem", + "MetricGroup": "PCIE_Bandwidth;PCIE_Read;PCIE_To_Remote_Memory", + "MetricExpr": "PCIE_RD_BYTES@dst_rem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average read bandwidth from PCIe devices under this PCIe root complex to remote memory.", + "PublicDescription": "Average read bandwidth of requests from all PCIe devices under this PCIe root complex to remote memory.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_wr_bandwidth_to_remote_mem", + "MetricGroup": "PCIE_Bandwidth;PCIE_Write;PCIE_To_Remote_Memory", + "MetricExpr": "PCIE_WR_BYTES@dst_rem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average write bandwidth from PCIe devices under this PCIe root complex to remote memory.", + "PublicDescription": "Average write bandwidth of requests from all PCIe devices under this PCIe root complex to remote memory.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_rd_latency_to_remote_mem", + "MetricGroup": "PCIE_Read_Latency;PCIE_Read;PCIE_To_Remote_Memory", + "MetricConstraint": "NO_GROUP_EVENTS", + "MetricExpr": "(PCIE_RD_CUM_OUTS@dst_rem=1@ / PCIE_RD_REQ@dst_rem=1@) / pcie_freq", + "ScaleUnit": "1ns/request", + "BriefDescription": "Average read latency from PCIe devices under this PCIe root complex to remote memory.", + "PublicDescription": "Average latency of read requests from all PCIe devices under this PCIe root complex to remote memory.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_rd_bandwidth_to_local_pcie_peer", + "MetricGroup": "PCIE_Bandwidth;PCIE_Read;PCIE_To_Local_PCIE_Peer", + "MetricExpr": "PCIE_RD_BYTES@dst_loc_pcie_p2p=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average read bandwidth from PCIe devices under this PCIe root complex to local PCIe peer addresses.", + "PublicDescription": "Average read bandwidth of requests from all PCIe devices under this PCIe root complex to local PCIe peer addresses.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_wr_bandwidth_to_local_pcie_peer", + "MetricGroup": "PCIE_Bandwidth;PCIE_Write;PCIE_To_Local_PCIE_Peer", + "MetricExpr": "PCIE_WR_BYTES@dst_loc_pcie_p2p=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average write bandwidth from PCIe devices under this PCIe root complex to local PCIe peer addresses.", + "PublicDescription": "Average write bandwidth of requests from all PCIe devices under this PCIe root complex to local PCIe peer addresses.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_rd_latency_to_local_pcie_peer", + "MetricGroup": "PCIE_Read_Latency;PCIE_Read;PCIE_To_Local_PCIE_Peer", + "MetricConstraint": "NO_GROUP_EVENTS", + "MetricExpr": "(PCIE_RD_CUM_OUTS@dst_loc_pcie_p2p=1@ / PCIE_RD_REQ@dst_loc_pcie_p2p=1@) / pcie_freq", + "ScaleUnit": "1ns/request", + "BriefDescription": "Average read latency from PCIe devices under this PCIe root complex to local PCIe peer addresses.", + "PublicDescription": "Average latency of read requests from all PCIe devices under this PCIe root complex to local PCIe peer addresses.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + } +]
Signature · 1 line
2.43.0
[email protected]
AI reviewRe: [PATCH 3/6] perf jevents: Add support for NVIDIA Tegra410 PCIE PMU aliasing
Sashiko has reviewed this patch and found no issues.
Quoted 3 lines
Add alias support for NVIDIA Tegra410 PCIE PMU events and metrics.
Signed-off-by Besar Wicaksono <[email protected]>
Sashiko has reviewed this patch and found no issues.
Signature · 1 line
Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=3
Re: [PATCH 3/6] perf jevents: Add support for NVIDIA Tegra410 PCIE PMU aliasing
In reply to Besar WicaksonoHi Besar,
Thanks for the series. I tested this on a 2-socket Tegra410. With --metric-only, each PCIe metric shows up once per socket, with nan ("none" with -j) in the other socket's column, so -j has the same key twice in each row. "counters" is also 0 for socket 1, because it comes from the first event, which belongs to socket 0:
```
$ perf stat -a --per-socket -M pcie_avg_wr_bandwidth_to_all_dst -j
--metric-only -- sleep 1
{"socket" : "S268435456", "counters" : 6, "MB/s
pcie_avg_wr_bandwidth_to_all_dst" : "0.1", "MB/s
pcie_avg_wr_bandwidth_to_all_dst" : "none"}
{"socket" : "S285212672", "counters" : 0, "MB/s
pcie_avg_wr_bandwidth_to_all_dst" : "none", "MB/s
pcie_avg_wr_bandwidth_to_all_dst" : "0.9"}
```As in [1], a single PMU per RC with cpumask 0,88, or the socket last in the PMU name, would fix this.
Thanks,
CT
Quoted 265 lines · Besar Wicaksono
Add alias support for NVIDIA Tegra410 PCIE PMU events and metrics.
Signed-off-by Besar Wicaksono <[email protected]>--- .../arm64/nvidia/t410/sys/uncore-pcie.json | 247 ++++++++++++++++++ 1 file changed, 247 insertions(+) create mode 100644 tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-pcie.jsontools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-pcie.json new file +247
-1@@ -0,0 +1,247 @@ +[ + { + "EventCode": "0x100000000", + "EventName": "PCIE_CYCLES", + "BriefDescription": "Counts cycles at the PCIe interface to the Tegra SoC data fabric.", + "PublicDescription": "Counts cycles at the PCIe interface to the Tegra SoC data fabric.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "EventCode": "0x2", + "EventName": "PCIE_RD_REQ", + "BriefDescription": "Counts read requests from PCIe devices under this PCIe root complex to memory or another PCIe device.", + "PublicDescription": "Counts read requests from PCIe devices under this PCIe root complex to memory or another PCIe device, where the target responds with data. Request size can be from 1 to 256 bytes. Filters: src_rp_mask selects the requesting root ports. Alternatively, src_bdf with src_bdf_en selects one requesting device (BDF); it cannot be combined with src_rp_mask and applies to all counters of this PMU. Destination filters select the memory type of the request address: dst_loc_cmem local CMEM, dst_loc_gmem local GMEM, dst_loc_pcie_p2p local PCIe peer addresses, dst_loc_pcie_cxl local CXL memory, dst_rem remote memory. This is the address's home type, not where the data currently resides; local or remote is determined by the home socket of the address. An unset source filter counts all root ports; an unset destination filter counts all destinations.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "EventCode": "0x3", + "EventName": "PCIE_WR_REQ", + "BriefDescription": "Counts write requests from PCIe devices under this PCIe root complex to memory or another PCIe device.", + "PublicDescription": "Counts write requests from PCIe devices under this PCIe root complex to memory or another PCIe device, where the PCIe device sends data. Request size can be from 1 to 256 bytes. Filters: src_rp_mask selects the requesting root ports. Alternatively, src_bdf with src_bdf_en selects one requesting device (BDF); it cannot be combined with src_rp_mask and applies to all counters of this PMU. Destination filters select the memory type of the request address: dst_loc_cmem local CMEM, dst_loc_gmem local GMEM, dst_loc_pcie_p2p local PCIe peer addresses, dst_loc_pcie_cxl local CXL memory, dst_rem remote memory. This is the address's home type, not where the data currently resides; local or remote is determined by the home socket of the address. An unset source filter counts all root ports; an unset destination filter counts all destinations.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "EventCode": "0x0", + "EventName": "PCIE_RD_BYTES", + "BriefDescription": "Counts bytes transferred by the read requests counted by PCIE_RD_REQ.", + "PublicDescription": "Counts bytes transferred by the read requests counted by PCIE_RD_REQ. Source and destination filters work as described for PCIE_RD_REQ.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "EventCode": "0x1", + "EventName": "PCIE_WR_BYTES", + "BriefDescription": "Counts bytes transferred by the write requests counted by PCIE_WR_REQ.", + "PublicDescription": "Counts bytes transferred by the write requests counted by PCIE_WR_REQ. Source and destination filters work as described for PCIE_WR_REQ.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "EventCode": "0x4", + "EventName": "PCIE_RD_CUM_OUTS", + "BriefDescription": "Accumulates the outstanding read requests counted by PCIE_RD_REQ each cycle at the PCIe interface.", + "PublicDescription": "Accumulates the outstanding read requests counted by PCIE_RD_REQ each cycle at the PCIe interface. Pair the two under the same filters for the average read latency. Source and destination filters work as described for PCIE_RD_REQ.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_freq", + "MetricGroup": "PCIE_Frequency;PCIE_Read_Latency", + "MetricConstraint": "NO_GROUP_EVENTS", + "MetricExpr": "(PCIE_CYCLES / aggr_nr(PCIE_CYCLES)) / 1e9 / duration_time", + "ScaleUnit": "1GHz", + "BriefDescription": "Frequency of the cycles at the PCIe interface to the Tegra SoC data fabric.", + "PublicDescription": "Average frequency of the cycles at the PCIe interface to the Tegra SoC data fabric over the measurement interval.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_rd_bandwidth_to_all_dst", + "MetricGroup": "PCIE_Bandwidth;PCIE_To_All_Destinations", + "MetricExpr": "PCIE_RD_BYTES@dst_loc_cmem=1,dst_loc_gmem=1,dst_loc_pcie_p2p=1,dst_loc_pcie_cxl=1,dst_rem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average read bandwidth from PCIe devices under this PCIe root complex to all destinations.", + "PublicDescription": "Average read bandwidth of requests from all PCIe devices under this PCIe root complex to all destinations: local CMEM, local GMEM, local PCIe peer addresses, local CXL memory and remote memory.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_wr_bandwidth_to_all_dst", + "MetricGroup": "PCIE_Bandwidth;PCIE_To_All_Destinations", + "MetricExpr": "PCIE_WR_BYTES@dst_loc_cmem=1,dst_loc_gmem=1,dst_loc_pcie_p2p=1,dst_loc_pcie_cxl=1,dst_rem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average write bandwidth from PCIe devices under this PCIe root complex to all destinations.", + "PublicDescription": "Average write bandwidth of requests from all PCIe devices under this PCIe root complex to all destinations: local CMEM, local GMEM, local PCIe peer addresses, local CXL memory and remote memory.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_rd_latency_to_all_dst", + "MetricGroup": "PCIE_Read_Latency;PCIE_To_All_Destinations", + "MetricConstraint": "NO_GROUP_EVENTS", + "MetricExpr": "(PCIE_RD_CUM_OUTS@dst_loc_cmem=1,dst_loc_gmem=1,dst_loc_pcie_p2p=1,dst_loc_pcie_cxl=1,dst_rem=1@ / PCIE_RD_REQ@dst_loc_cmem=1,dst_loc_gmem=1,dst_loc_pcie_p2p=1,dst_loc_pcie_cxl=1,dst_rem=1@) / pcie_freq", + "ScaleUnit": "1ns/request", + "BriefDescription": "Average read latency from PCIe devices under this PCIe root complex to all destinations.", + "PublicDescription": "Average latency of read requests from all PCIe devices under this PCIe root complex to all destinations: local CMEM, local GMEM, local PCIe peer addresses, local CXL memory and remote memory.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_rd_bandwidth_to_local_cmem", + "MetricGroup": "PCIE_Bandwidth;PCIE_Read;PCIE_To_Local_CMEM", + "MetricExpr": "PCIE_RD_BYTES@dst_loc_cmem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average read bandwidth from PCIe devices under this PCIe root complex to local CMEM.", + "PublicDescription": "Average read bandwidth of requests from all PCIe devices under this PCIe root complex to local CMEM.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_wr_bandwidth_to_local_cmem", + "MetricGroup": "PCIE_Bandwidth;PCIE_Write;PCIE_To_Local_CMEM", + "MetricExpr": "PCIE_WR_BYTES@dst_loc_cmem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average write bandwidth from PCIe devices under this PCIe root complex to local CMEM.", + "PublicDescription": "Average write bandwidth of requests from all PCIe devices under this PCIe root complex to local CMEM.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_rd_latency_to_local_cmem", + "MetricGroup": "PCIE_Read_Latency;PCIE_Read;PCIE_To_Local_CMEM", + "MetricConstraint": "NO_GROUP_EVENTS", + "MetricExpr": "(PCIE_RD_CUM_OUTS@dst_loc_cmem=1@ / PCIE_RD_REQ@dst_loc_cmem=1@) / pcie_freq", + "ScaleUnit": "1ns/request", + "BriefDescription": "Average read latency from PCIe devices under this PCIe root complex to local CMEM.", + "PublicDescription": "Average latency of read requests from all PCIe devices under this PCIe root complex to local CMEM.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_rd_bandwidth_to_local_gmem", + "MetricGroup": "PCIE_Bandwidth;PCIE_Read;PCIE_To_Local_GMEM", + "MetricExpr": "PCIE_RD_BYTES@dst_loc_gmem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average read bandwidth from PCIe devices under this PCIe root complex to local GMEM.", + "PublicDescription": "Average read bandwidth of requests from all PCIe devices under this PCIe root complex to local GMEM.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_wr_bandwidth_to_local_gmem", + "MetricGroup": "PCIE_Bandwidth;PCIE_Write;PCIE_To_Local_GMEM", + "MetricExpr": "PCIE_WR_BYTES@dst_loc_gmem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average write bandwidth from PCIe devices under this PCIe root complex to local GMEM.", + "PublicDescription": "Average write bandwidth of requests from all PCIe devices under this PCIe root complex to local GMEM.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_rd_latency_to_local_gmem", + "MetricGroup": "PCIE_Read_Latency;PCIE_Read;PCIE_To_Local_GMEM", + "MetricConstraint": "NO_GROUP_EVENTS", + "MetricExpr": "(PCIE_RD_CUM_OUTS@dst_loc_gmem=1@ / PCIE_RD_REQ@dst_loc_gmem=1@) / pcie_freq", + "ScaleUnit": "1ns/request", + "BriefDescription": "Average read latency from PCIe devices under this PCIe root complex to local GMEM.", + "PublicDescription": "Average latency of read requests from all PCIe devices under this PCIe root complex to local GMEM.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_rd_bandwidth_to_local_cxlmem", + "MetricGroup": "PCIE_Bandwidth;PCIE_Read;PCIE_To_Local_CXLMEM", + "MetricExpr": "PCIE_RD_BYTES@dst_loc_pcie_cxl=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average read bandwidth from PCIe devices under this PCIe root complex to local CXL memory.", + "PublicDescription": "Average read bandwidth of requests from all PCIe devices under this PCIe root complex to local CXL memory.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_wr_bandwidth_to_local_cxlmem", + "MetricGroup": "PCIE_Bandwidth;PCIE_Write;PCIE_To_Local_CXLMEM", + "MetricExpr": "PCIE_WR_BYTES@dst_loc_pcie_cxl=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average write bandwidth from PCIe devices under this PCIe root complex to local CXL memory.", + "PublicDescription": "Average write bandwidth of requests from all PCIe devices under this PCIe root complex to local CXL memory.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_rd_latency_to_local_cxlmem", + "MetricGroup": "PCIE_Read_Latency;PCIE_Read;PCIE_To_Local_CXLMEM", + "MetricConstraint": "NO_GROUP_EVENTS", + "MetricExpr": "(PCIE_RD_CUM_OUTS@dst_loc_pcie_cxl=1@ / PCIE_RD_REQ@dst_loc_pcie_cxl=1@) / pcie_freq", + "ScaleUnit": "1ns/request", + "BriefDescription": "Average read latency from PCIe devices under this PCIe root complex to local CXL memory.", + "PublicDescription": "Average latency of read requests from all PCIe devices under this PCIe root complex to local CXL memory.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_rd_bandwidth_to_remote_mem", + "MetricGroup": "PCIE_Bandwidth;PCIE_Read;PCIE_To_Remote_Memory", + "MetricExpr": "PCIE_RD_BYTES@dst_rem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average read bandwidth from PCIe devices under this PCIe root complex to remote memory.", + "PublicDescription": "Average read bandwidth of requests from all PCIe devices under this PCIe root complex to remote memory.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_wr_bandwidth_to_remote_mem", + "MetricGroup": "PCIE_Bandwidth;PCIE_Write;PCIE_To_Remote_Memory", + "MetricExpr": "PCIE_WR_BYTES@dst_rem=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average write bandwidth from PCIe devices under this PCIe root complex to remote memory.", + "PublicDescription": "Average write bandwidth of requests from all PCIe devices under this PCIe root complex to remote memory.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_rd_latency_to_remote_mem", + "MetricGroup": "PCIE_Read_Latency;PCIE_Read;PCIE_To_Remote_Memory", + "MetricConstraint": "NO_GROUP_EVENTS", + "MetricExpr": "(PCIE_RD_CUM_OUTS@dst_rem=1@ / PCIE_RD_REQ@dst_rem=1@) / pcie_freq", + "ScaleUnit": "1ns/request", + "BriefDescription": "Average read latency from PCIe devices under this PCIe root complex to remote memory.", + "PublicDescription": "Average latency of read requests from all PCIe devices under this PCIe root complex to remote memory.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_rd_bandwidth_to_local_pcie_peer", + "MetricGroup": "PCIE_Bandwidth;PCIE_Read;PCIE_To_Local_PCIE_Peer", + "MetricExpr": "PCIE_RD_BYTES@dst_loc_pcie_p2p=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average read bandwidth from PCIe devices under this PCIe root complex to local PCIe peer addresses.", + "PublicDescription": "Average read bandwidth of requests from all PCIe devices under this PCIe root complex to local PCIe peer addresses.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_wr_bandwidth_to_local_pcie_peer", + "MetricGroup": "PCIE_Bandwidth;PCIE_Write;PCIE_To_Local_PCIE_Peer", + "MetricExpr": "PCIE_WR_BYTES@dst_loc_pcie_p2p=1@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average write bandwidth from PCIe devices under this PCIe root complex to local PCIe peer addresses.", + "PublicDescription": "Average write bandwidth of requests from all PCIe devices under this PCIe root complex to local PCIe peer addresses.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + }, + { + "MetricName": "pcie_avg_rd_latency_to_local_pcie_peer", + "MetricGroup": "PCIE_Read_Latency;PCIE_Read;PCIE_To_Local_PCIE_Peer", + "MetricConstraint": "NO_GROUP_EVENTS", + "MetricExpr": "(PCIE_RD_CUM_OUTS@dst_loc_pcie_p2p=1@ / PCIE_RD_REQ@dst_loc_pcie_p2p=1@) / pcie_freq", + "ScaleUnit": "1ns/request", + "BriefDescription": "Average read latency from PCIe devices under this PCIe root complex to local PCIe peer addresses.", + "PublicDescription": "Average latency of read requests from all PCIe devices under this PCIe root complex to local PCIe peer addresses.", + "Compat": "1030136b", + "Unit": "nvidia_pcie_pmu_,rc_" + } +] --2.43.0
PATCH 4/6 perf jevents: Add support for NVIDIA Tegra410 PCIE-TGT PMU aliasing
In reply to Besar WicaksonoAdd alias support for NVIDIA Tegra410 PCIE-TGT PMU events and metrics.
--- .../nvidia/t410/sys/uncore-pcie_tgt.json | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-pcie_tgt.json
tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-pcie_tgt.json new file +93 -0
@@ -0,0 +1,93 @@ +[ + { + "EventCode": "0x4", + "EventName": "PCIE_TGT_CYCLES", + "BriefDescription": "Counts cycles at the PCIe interface to the Tegra SoC data fabric.", + "PublicDescription": "Counts cycles at the PCIe interface to the Tegra SoC data fabric.", + "Compat": "1070036b", + "Unit": "nvidia_pcie_tgt_pmu_,rc_" + }, + { + "EventCode": "0x2", + "EventName": "PCIE_TGT_RD_REQ", + "BriefDescription": "Counts read requests from any source to PCIe BAR or CXL HDM ranges under this PCIe root complex.", + "PublicDescription": "Counts read requests from any source to PCIe BAR or CXL HDM ranges under this PCIe root complex, where the target responds with data. Request size can be from 1 to 256 bytes. Filters: dst_rp_mask selects PCIe BAR traffic to root ports (bit n = root port n). dst_addr_en with dst_addr_base and dst_addr_mask selects PCIe BAR or CXL HDM addresses that equal the base in the mask's set bits. If both dst_rp_mask and the address filter are set, a request matching either is counted. With no filter, PCIe BAR traffic to all root ports is counted.", + "Compat": "1070036b", + "Unit": "nvidia_pcie_tgt_pmu_,rc_" + }, + { + "EventCode": "0x3", + "EventName": "PCIE_TGT_WR_REQ", + "BriefDescription": "Counts write requests from any source to PCIe BAR or CXL HDM ranges under this PCIe root complex.", + "PublicDescription": "Counts write requests from any source to PCIe BAR or CXL HDM ranges under this PCIe root complex, where the source sends data. Request size can be from 1 to 256 bytes. Filters: dst_rp_mask selects PCIe BAR traffic to root ports (bit n = root port n). dst_addr_en with dst_addr_base and dst_addr_mask selects PCIe BAR or CXL HDM addresses that equal the base in the mask's set bits. If both dst_rp_mask and the address filter are set, a request matching either is counted. With no filter, PCIe BAR traffic to all root ports is counted.", + "Compat": "1070036b", + "Unit": "nvidia_pcie_tgt_pmu_,rc_" + }, + { + "EventCode": "0x0", + "EventName": "PCIE_TGT_RD_BYTES", + "BriefDescription": "Counts bytes transferred by the read requests counted by PCIE_TGT_RD_REQ.", + "PublicDescription": "Counts bytes transferred by the read requests counted by PCIE_TGT_RD_REQ. Destination filters work as described for PCIE_TGT_RD_REQ.", + "Compat": "1070036b", + "Unit": "nvidia_pcie_tgt_pmu_,rc_" + }, + { + "EventCode": "0x1", + "EventName": "PCIE_TGT_WR_BYTES", + "BriefDescription": "Counts bytes transferred by the write requests counted by PCIE_TGT_WR_REQ.", + "PublicDescription": "Counts bytes transferred by the write requests counted by PCIE_TGT_WR_REQ. Destination filters work as described for PCIE_TGT_WR_REQ.", + "Compat": "1070036b", + "Unit": "nvidia_pcie_tgt_pmu_,rc_" + }, + { + "MetricName": "pcie_tgt_freq", + "MetricGroup": "PCIE_TGT_Frequency", + "MetricConstraint": "NO_GROUP_EVENTS", + "MetricExpr": "(PCIE_TGT_CYCLES / aggr_nr(PCIE_TGT_CYCLES)) / 1e9 / duration_time", + "ScaleUnit": "1GHz", + "BriefDescription": "Frequency of the cycles at the PCIe interface to the Tegra SoC data fabric.", + "PublicDescription": "Average frequency of the cycles at the PCIe interface to the Tegra SoC data fabric over the measurement interval.", + "Compat": "1070036b", + "Unit": "nvidia_pcie_tgt_pmu_,rc_" + }, + { + "MetricName": "pcie_tgt_avg_rd_bandwidth_to_all_dst", + "MetricGroup": "PCIE_TGT_Bandwidth;PCIE_TGT_BW_PCIE_BAR_CXL_HDM", + "MetricExpr": "PCIE_TGT_RD_BYTES@dst_addr_en=1,dst_addr_base=0,dst_addr_mask=0@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average read bandwidth to all PCIe BAR and CXL HDM ranges under this PCIe root complex.", + "PublicDescription": "Average read bandwidth of requests from any source to all PCIe BAR and CXL HDM ranges under this PCIe root complex.", + "Compat": "1070036b", + "Unit": "nvidia_pcie_tgt_pmu_,rc_" + }, + { + "MetricName": "pcie_tgt_avg_wr_bandwidth_to_all_dst", + "MetricGroup": "PCIE_TGT_Bandwidth;PCIE_TGT_BW_PCIE_BAR_CXL_HDM", + "MetricExpr": "PCIE_TGT_WR_BYTES@dst_addr_en=1,dst_addr_base=0,dst_addr_mask=0@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average write bandwidth to all PCIe BAR and CXL HDM ranges under this PCIe root complex.", + "PublicDescription": "Average write bandwidth of requests from any source to all PCIe BAR and CXL HDM ranges under this PCIe root complex.", + "Compat": "1070036b", + "Unit": "nvidia_pcie_tgt_pmu_,rc_" + }, + { + "MetricName": "pcie_tgt_avg_rd_bandwidth_to_pcie_bar", + "MetricGroup": "PCIE_TGT_Bandwidth;PCIE_TGT_BW_PCIE_BAR", + "MetricExpr": "PCIE_TGT_RD_BYTES / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average read bandwidth of PCIe BAR traffic to all root ports under this PCIe root complex.", + "PublicDescription": "Average read bandwidth of PCIe BAR traffic from any source to all root ports under this PCIe root complex.", + "Compat": "1070036b", + "Unit": "nvidia_pcie_tgt_pmu_,rc_" + }, + { + "MetricName": "pcie_tgt_avg_wr_bandwidth_to_pcie_bar", + "MetricGroup": "PCIE_TGT_Bandwidth;PCIE_TGT_BW_PCIE_BAR", + "MetricExpr": "PCIE_TGT_WR_BYTES / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average write bandwidth of PCIe BAR traffic to all root ports under this PCIe root complex.", + "PublicDescription": "Average write bandwidth of PCIe BAR traffic from any source to all root ports under this PCIe root complex.", + "Compat": "1070036b", + "Unit": "nvidia_pcie_tgt_pmu_,rc_" + } +]
Signature · 1 line
2.43.0
[email protected]
AI reviewRe: [PATCH 4/6] perf jevents: Add support for NVIDIA Tegra410 PCIE-TGT PMU aliasing
Sashiko has reviewed this patch and found no issues.
Quoted 3 lines
Add alias support for NVIDIA Tegra410 PCIE-TGT PMU events and metrics.
Signed-off-by Besar Wicaksono <[email protected]>
Sashiko has reviewed this patch and found no issues.
Signature · 1 line
Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=4
Ian Rogers
reviewerRe: [PATCH 4/6] perf jevents: Add support for NVIDIA Tegra410 PCIE-TGT PMU aliasing
In reply to Besar WicaksonoQuoted 15 lines · Besar Wicaksono
Add alias support for NVIDIA Tegra410 PCIE-TGT PMU events and metrics.
Signed-off-by Besar Wicaksono <[email protected]>--- .../nvidia/t410/sys/uncore-pcie_tgt.json | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-pcie_tgt.jsontools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-pcie_tgt.json new file +0
-0
tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-pcie_tgt.json line 8
Quoted 8 lines
tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-pcie_tgt.json new file +8
-0@@ -0,0 +1,93 @@ +[ + { + "EventCode": "0x4", + "EventName": "PCIE_TGT_CYCLES", + "BriefDescription": "Counts cycles at the PCIe interface to the Tegra SoC data fabric.", + "PublicDescription": "Counts cycles at the PCIe interface to the Tegra SoC data fabric.", + "Compat": "1070036b", + "Unit": "nvidia_pcie_tgt_pmu_,rc_"
It looks like the PMU names are broken because of the _rc_ in their names:
https://web.git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/perf/arm_cspmu/nvidia_cspmu.c#n901
``` .name_pattern = "nvidia_pcie_pmu_%u_rc_%u", ```
The convention is for either a numeric (preferable) or hexadecimal suffix:
https://web.git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/ABI/testing/sysfs-bus-event_source-devices
Extra information about the PMU belongs in a caps file.
By definition nothing can work with wildcard matching using the existing PMU name, so please rename it. If a new suffix convention is necessary then you should update the ABI and perf tool suffix matching logic like pmu_name_len_no_suffix:
https://web.git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/tools/perf/util/pmus.c#n65
Thanks,
Ian Rogers
Quoted 89 lines
tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-pcie_tgt.json new file +85
-1+ }, + { + "EventCode": "0x2", + "EventName": "PCIE_TGT_RD_REQ", + "BriefDescription": "Counts read requests from any source to PCIe BAR or CXL HDM ranges under this PCIe root complex.", + "PublicDescription": "Counts read requests from any source to PCIe BAR or CXL HDM ranges under this PCIe root complex, where the target responds with data. Request size can be from 1 to 256 bytes. Filters: dst_rp_mask selects PCIe BAR traffic to root ports (bit n = root port n). dst_addr_en with dst_addr_base and dst_addr_mask selects PCIe BAR or CXL HDM addresses that equal the base in the mask's set bits. If both dst_rp_mask and the address filter are set, a request matching either is counted. With no filter, PCIe BAR traffic to all root ports is counted.", + "Compat": "1070036b", + "Unit": "nvidia_pcie_tgt_pmu_,rc_" + }, + { + "EventCode": "0x3", + "EventName": "PCIE_TGT_WR_REQ", + "BriefDescription": "Counts write requests from any source to PCIe BAR or CXL HDM ranges under this PCIe root complex.", + "PublicDescription": "Counts write requests from any source to PCIe BAR or CXL HDM ranges under this PCIe root complex, where the source sends data. Request size can be from 1 to 256 bytes. Filters: dst_rp_mask selects PCIe BAR traffic to root ports (bit n = root port n). dst_addr_en with dst_addr_base and dst_addr_mask selects PCIe BAR or CXL HDM addresses that equal the base in the mask's set bits. If both dst_rp_mask and the address filter are set, a request matching either is counted. With no filter, PCIe BAR traffic to all root ports is counted.", + "Compat": "1070036b", + "Unit": "nvidia_pcie_tgt_pmu_,rc_" + }, + { + "EventCode": "0x0", + "EventName": "PCIE_TGT_RD_BYTES", + "BriefDescription": "Counts bytes transferred by the read requests counted by PCIE_TGT_RD_REQ.", + "PublicDescription": "Counts bytes transferred by the read requests counted by PCIE_TGT_RD_REQ. Destination filters work as described for PCIE_TGT_RD_REQ.", + "Compat": "1070036b", + "Unit": "nvidia_pcie_tgt_pmu_,rc_" + }, + { + "EventCode": "0x1", + "EventName": "PCIE_TGT_WR_BYTES", + "BriefDescription": "Counts bytes transferred by the write requests counted by PCIE_TGT_WR_REQ.", + "PublicDescription": "Counts bytes transferred by the write requests counted by PCIE_TGT_WR_REQ. Destination filters work as described for PCIE_TGT_WR_REQ.", + "Compat": "1070036b", + "Unit": "nvidia_pcie_tgt_pmu_,rc_" + }, + { + "MetricName": "pcie_tgt_freq", + "MetricGroup": "PCIE_TGT_Frequency", + "MetricConstraint": "NO_GROUP_EVENTS", + "MetricExpr": "(PCIE_TGT_CYCLES / aggr_nr(PCIE_TGT_CYCLES)) / 1e9 / duration_time", + "ScaleUnit": "1GHz", + "BriefDescription": "Frequency of the cycles at the PCIe interface to the Tegra SoC data fabric.", + "PublicDescription": "Average frequency of the cycles at the PCIe interface to the Tegra SoC data fabric over the measurement interval.", + "Compat": "1070036b", + "Unit": "nvidia_pcie_tgt_pmu_,rc_" + }, + { + "MetricName": "pcie_tgt_avg_rd_bandwidth_to_all_dst", + "MetricGroup": "PCIE_TGT_Bandwidth;PCIE_TGT_BW_PCIE_BAR_CXL_HDM", + "MetricExpr": "PCIE_TGT_RD_BYTES@dst_addr_en=1,dst_addr_base=0,dst_addr_mask=0@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average read bandwidth to all PCIe BAR and CXL HDM ranges under this PCIe root complex.", + "PublicDescription": "Average read bandwidth of requests from any source to all PCIe BAR and CXL HDM ranges under this PCIe root complex.", + "Compat": "1070036b", + "Unit": "nvidia_pcie_tgt_pmu_,rc_" + }, + { + "MetricName": "pcie_tgt_avg_wr_bandwidth_to_all_dst", + "MetricGroup": "PCIE_TGT_Bandwidth;PCIE_TGT_BW_PCIE_BAR_CXL_HDM", + "MetricExpr": "PCIE_TGT_WR_BYTES@dst_addr_en=1,dst_addr_base=0,dst_addr_mask=0@ / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average write bandwidth to all PCIe BAR and CXL HDM ranges under this PCIe root complex.", + "PublicDescription": "Average write bandwidth of requests from any source to all PCIe BAR and CXL HDM ranges under this PCIe root complex.", + "Compat": "1070036b", + "Unit": "nvidia_pcie_tgt_pmu_,rc_" + }, + { + "MetricName": "pcie_tgt_avg_rd_bandwidth_to_pcie_bar", + "MetricGroup": "PCIE_TGT_Bandwidth;PCIE_TGT_BW_PCIE_BAR", + "MetricExpr": "PCIE_TGT_RD_BYTES / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average read bandwidth of PCIe BAR traffic to all root ports under this PCIe root complex.", + "PublicDescription": "Average read bandwidth of PCIe BAR traffic from any source to all root ports under this PCIe root complex.", + "Compat": "1070036b", + "Unit": "nvidia_pcie_tgt_pmu_,rc_" + }, + { + "MetricName": "pcie_tgt_avg_wr_bandwidth_to_pcie_bar", + "MetricGroup": "PCIE_TGT_Bandwidth;PCIE_TGT_BW_PCIE_BAR", + "MetricExpr": "PCIE_TGT_WR_BYTES / 1e6 / duration_time", + "ScaleUnit": "1MB/s", + "BriefDescription": "Average write bandwidth of PCIe BAR traffic to all root ports under this PCIe root complex.", + "PublicDescription": "Average write bandwidth of PCIe BAR traffic from any source to all root ports under this PCIe root complex.", + "Compat": "1070036b", + "Unit": "nvidia_pcie_tgt_pmu_,rc_" + } +] --2.43.0
RE: [PATCH 4/6] perf jevents: Add support for NVIDIA Tegra410 PCIE-TGT PMU aliasing
Quoted 57 lines
-----Original Message-----
From: Ian Rogers <[email protected]>
Sent: Monday, October 19, 2026 11:18 PM
To: Besar Wicaksono <[email protected]>
Cc: [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; Vikram Sethi <[email protected]>; Rich Wiley <[email protected]>; Sean Kelley <[email protected]>; Matt Ochs <[email protected]>; Raj Joshi <[email protected]>; Thierry Reding <[email protected]>; Jon Hunter <[email protected]>; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]
Subject: Re: [PATCH 4/6] perf jevents: Add support for NVIDIA Tegra410 PCIE-TGT PMU aliasingExternal email: Use caution opening links or attachments
Quoted 8 lines · Besar Wicaksono
Add alias support for NVIDIA Tegra410 PCIE-TGT PMU events and metrics.
Signed-off-by Besar Wicaksono <[email protected]>--- .../nvidia/t410/sys/uncore-pcie_tgt.json | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 tools/perf/pmu-
events/arch/arm64/nvidia/t410/sys/uncore-pcie_tgt.jsonReview
Quoted 2 lines
(quoted diff) +0
-0pcie_tgt.json b/tools/perf/pmu-
events/arch/arm64/nvidia/t410/sys/uncore-pcie_tgt.jsontools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-
Quoted 4 lines
new file mode 100644
index 000000000000..74786fc3d578tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore- new file +0
-0pcie_tgt.json
tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore- line 5
Quoted 6 lines
tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore- new file +5
-0@@ -0,0 +1,93 @@ +[ + { + "EventCode": "0x4", + "EventName": "PCIE_TGT_CYCLES", + "BriefDescription": "Counts cycles at the PCIe interface to the TegraSoC data fabric.",
tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore- line 6
Quoted 1 line
tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore- new file +1
-0+ "PublicDescription": "Counts cycles at the PCIe interface to the TegraSoC data fabric.",
tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore- line 8
Quoted 2 lines
tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore- new file +2
-0+ "Compat": "1070036b", + "Unit": "nvidia_pcie_tgt_pmu_,rc_"It looks like the PMU names are broken because of the _rc_ in their names:
https://web.git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree
/drivers/perf/arm_cspmu/nvidia_cspmu.c#n901
Quoted 8 lines
``` .name_pattern = "nvidia_pcie_pmu_%u_rc_%u", ```The convention is for either a numeric (preferable) or hexadecimal suffix:
https://web.git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree
/Documentation/ABI/testing/sysfs-bus-event_source-devices Extra information about the PMU belongs in a caps file.
Hi Ian,
Thanks for the pointers.
My interpretation is the ABI document doesn’t prevent driver from naming the PMU with multiple numbering format. Other PMUs already did this, e.g. HiSilicon hisi_sccl<sccl>_ddrc<n>, Arm NI arm_ni_<ni>_cd_<cd> and Qualcomm l3cache_<x>_<y>.
Quoted 7 lines
By definition nothing can work with wildcard matching using the existing PMU name, so please rename it. If a new suffix convention is necessary then you should update the ABI and perf tool suffix matching logic like
pmu_name_len_no_suffix:
https://web.git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree
/tools/perf/util/pmus.c#n65
The JSON "Unit" attribute takes a comma-separated form:
"nvidia_pcie_pmu_,rc_", like HiSilicon's "hisi_sccl,ddrc", which perf_pmu__match_wildcard_uncore() matches against "socketX_pmunameY" names. The issues seem to be on the reporting side. The counting looks ok. I guess JSON "Unit" matching logic is not applied everywhere in perf.
For example below is the counting from my 2-socket machine.
Test workload: read 4 GiB from an NVMe on socket 0 RC 0 and 8 GiB from an NVMe on socket 1 RC 0, in parallel (dd ... of=/dev/null iflag=direct).
Counting is correct with the wildcards:
$ perf stat -a -e 'nvidia_pcie_pmu_0_rc*/PCIE_WR_BYTES/,nvidia_pcie_pmu_1_rc*/PCIE_WR_BYTES/' -- <workload>
4,362,223,228 nvidia_pcie_pmu_0_rc*/PCIE_WR_BYTES/
8,623,751,168 nvidia_pcie_pmu_1_rc*/PCIE_WR_BYTES/$ perf stat -a --per-socket -e 'nvidia_pcie_pmu_*_rc_0/PCIE_WR_BYTES/' -- <workload> S268435456 1 4,362,207,232 nvidia_pcie_pmu_0_rc_0/nvidia_pcie_pmu_*_rc_0,PCIE_WR_BYTES/ S285212672 1 8,724,414,784 nvidia_pcie_pmu_1_rc_0/nvidia_pcie_pmu_*_rc_0,PCIE_WR_BYTES/
The reporting is where it goes wrong:
1) RC 0 of all sockets is not merged into one line, and the wildcard ends up in the event name:
$ perf stat -a -e 'nvidia_pcie_pmu_*_rc_0/PCIE_WR_BYTES/' -- <workload>
4,311,875,584 nvidia_pcie_pmu_0_rc_0/nvidia_pcie_pmu_*_rc_0,PCIE_WR_BYTES/
8,623,751,168 nvidia_pcie_pmu_1_rc_0/nvidia_pcie_pmu_*_rc_0,PCIE_WR_BYTES/2) The json event is split per socket, and each line is labelled with RC 0 although it is the sum of all RCs of that socket:
$ perf stat -a -e PCIE_WR_BYTES -- <workload>
4,311,880,848 nvidia_pcie_pmu_0_rc_0/PCIE_WR_BYTES/
8,724,414,784 nvidia_pcie_pmu_1_rc_0/PCIE_WR_BYTES/3) The metric is computed per socket, instead of total. With --metric-only both values end up under one header, and the reader can't tell which socket is which:
$ perf stat -a -M pcie_avg_wr_bandwidth_to_all_dst --metric-only -- <workload>
MB/s pcie_avg_wr_bandwidth_to_all_dst
3113.5 6227.04) With --per-socket, each row shows both copies: the other socket's copy prints nan, and socket 1's counters is 0 instead of 6:
$ perf stat -a --per-socket -M pcie_avg_wr_bandwidth_to_all_dst --metric-only -- <workload>
MB/s pcie_avg_wr_bandwidth_to_all_dst
S268435456 6 3127.5 nan
S285212672 0 nan 6182.8$ perf stat -a --per-socket -j -M pcie_avg_wr_bandwidth_to_all_dst --metric-only -- <workload>
{"socket" : "S268435456", "counters" : 6, "MB/s pcie_avg_wr_bandwidth_to_all_dst" : "3087.8", "MB/s pcie_avg_wr_bandwidth_to_all_dst" : "none"}
{"socket" : "S285212672", "counters" : 0, "MB/s pcie_avg_wr_bandwidth_to_all_dst" : "none", "MB/s pcie_avg_wr_bandwidth_to_all_dst" : "6247.8"}All of these, I think, come from perf treating nvidia_pcie_pmu_0_rc_* and nvidia_pcie_pmu_1_rc_* as two different PMUs instead of one PMU, i.e nvidia_pcie_pmu.
I will investigate further and see if I can come up with a perf patch to fix this.
Regards,
Besar
Quoted 3 lines
Thanks,
Ian Rogers
Re: [PATCH 4/6] perf jevents: Add support for NVIDIA Tegra410 PCIE-TGT PMU aliasing
Quoted 67 lines · Besar Wicaksono
Quoted 58 lines
-----Original Message-----
From: Ian Rogers <[email protected]>
Sent: Monday, October 19, 2026 11:18 PM
To: Besar Wicaksono <[email protected]>
Cc: [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; Vikram Sethi <[email protected]>; Rich Wiley <[email protected]>; Sean Kelley <[email protected]>; Matt Ochs <[email protected]>; Raj Joshi <[email protected]>; Thierry Reding <[email protected]>; Jon Hunter <[email protected]>; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]
Subject: Re: [PATCH 4/6] perf jevents: Add support for NVIDIA Tegra410 PCIE-TGT PMU aliasingExternal email: Use caution opening links or attachments
Quoted 8 lines · Besar Wicaksono
Add alias support for NVIDIA Tegra410 PCIE-TGT PMU events and metrics.
Signed-off-by Besar Wicaksono <[email protected]>--- .../nvidia/t410/sys/uncore-pcie_tgt.json | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 tools/perf/pmu-
events/arch/arm64/nvidia/t410/sys/uncore-pcie_tgt.jsonReview
Quoted 2 lines
(quoted diff) +0
-0pcie_tgt.json b/tools/perf/pmu-
events/arch/arm64/nvidia/t410/sys/uncore-pcie_tgt.jsontools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-
Quoted 4 lines
new file mode 100644
index 000000000000..74786fc3d578tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore- new file +0
-0pcie_tgt.json
tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore- line 5
Quoted 6 lines
tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore- new file +5
-0@@ -0,0 +1,93 @@ +[ + { + "EventCode": "0x4", + "EventName": "PCIE_TGT_CYCLES", + "BriefDescription": "Counts cycles at the PCIe interface to the TegraSoC data fabric.",
tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore- line 6
Quoted 1 line
tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore- new file +1
-0+ "PublicDescription": "Counts cycles at the PCIe interface to the TegraSoC data fabric.",
tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore- line 8
Quoted 2 lines
tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore- new file +2
-0+ "Compat": "1070036b", + "Unit": "nvidia_pcie_tgt_pmu_,rc_"It looks like the PMU names are broken because of the _rc_ in their names:
https://web.git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree
/drivers/perf/arm_cspmu/nvidia_cspmu.c#n901Quoted 8 lines
``` .name_pattern = "nvidia_pcie_pmu_%u_rc_%u", ```The convention is for either a numeric (preferable) or hexadecimal suffix:
https://web.git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree
/Documentation/ABI/testing/sysfs-bus-event_source-devices Extra information about the PMU belongs in a caps file.
Quoted 8 lines
Hi Ian,
Thanks for the pointers.
My interpretation is the ABI document doesn’t prevent driver from naming the PMU with multiple numbering format. Other PMUs already did this, e.g. HiSilicon hisi_sccl<sccl>_ddrc<n>, Arm NI arm_ni_<ni>_cd_<cd> and Qualcomm l3cache_<x>_<y>.
Hi Besar,
The ABI only defines a single _<num> suffix, and that is all perf supports. perf treats nvidia_pcie_pmu_0_rc_* and nvidia_pcie_pmu_1_rc_* as two different PMUs, which is the root cause of the reporting issues you listed. The hisi_sccl, arm_ni and Qualcomm PMUs have the same problem.
We can always add a new naming format to the ABI and perf, but each new format makes PMU name handling harder to maintain.
A PMU per rc, for example, nvidia_pcie_pmu_<rc> with one cpu per socket in its cpumask (like Intel uncore_imc_<n>), works with perf as is.
Thanks,
CT
Quoted 79 lines
Quoted 8 lines
By definition nothing can work with wildcard matching using the existing PMU name, so please rename it. If a new suffix convention is necessary then you should update the ABI and perf tool suffix matching logic like
pmu_name_len_no_suffix:
https://web.git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree
/tools/perf/util/pmus.c#n65The JSON "Unit" attribute takes a comma-separated form:
"nvidia_pcie_pmu_,rc_", like HiSilicon's "hisi_sccl,ddrc", whichperf_pmu__match_wildcard_uncore()matches against "socketX_pmunameY" names. The issues seem to be on the reporting side. The counting looks ok. I guess JSON "Unit" matching logic is not applied everywhere in perf.For example below is the counting from my 2-socket machine.
Test workload: read 4 GiB from an NVMe on socket 0 RC 0 and 8 GiB from an NVMe on socket 1 RC 0, in parallel (dd ... of=/dev/null iflag=direct).
Counting is correct with the wildcards:
$ perf stat -a -e 'nvidia_pcie_pmu_0_rc*/PCIE_WR_BYTES/,nvidia_pcie_pmu_1_rc*/PCIE_WR_BYTES/' -- <workload> 4,362,223,228 nvidia_pcie_pmu_0_rc*/PCIE_WR_BYTES/ 8,623,751,168 nvidia_pcie_pmu_1_rc*/PCIE_WR_BYTES/$ perf stat -a --per-socket -e 'nvidia_pcie_pmu_*_rc_0/PCIE_WR_BYTES/' -- <workload> S268435456 1 4,362,207,232 nvidia_pcie_pmu_0_rc_0/nvidia_pcie_pmu_*_rc_0,PCIE_WR_BYTES/ S285212672 1 8,724,414,784 nvidia_pcie_pmu_1_rc_0/nvidia_pcie_pmu_*_rc_0,PCIE_WR_BYTES/The reporting is where it goes wrong:
1) RC 0 of all sockets is not merged into one line, and the wildcard ends up in the event name:
$ perf stat -a -e 'nvidia_pcie_pmu_*_rc_0/PCIE_WR_BYTES/' -- <workload> 4,311,875,584 nvidia_pcie_pmu_0_rc_0/nvidia_pcie_pmu_*_rc_0,PCIE_WR_BYTES/ 8,623,751,168 nvidia_pcie_pmu_1_rc_0/nvidia_pcie_pmu_*_rc_0,PCIE_WR_BYTES/2) The json event is split per socket, and each line is labelled with RC 0 although it is the sum of all RCs of that socket:
$ perf stat -a -e PCIE_WR_BYTES -- <workload> 4,311,880,848 nvidia_pcie_pmu_0_rc_0/PCIE_WR_BYTES/ 8,724,414,784 nvidia_pcie_pmu_1_rc_0/PCIE_WR_BYTES/3) The metric is computed per socket, instead of total. With --metric-only both values end up under one header, and the reader can't tell which socket is which:
$ perf stat -a -M pcie_avg_wr_bandwidth_to_all_dst --metric-only -- <workload> MB/s pcie_avg_wr_bandwidth_to_all_dst 3113.5 6227.04) With --per-socket, each row shows both copies: the other socket's copy prints nan, and socket 1's counters is 0 instead of 6:
$ perf stat -a --per-socket -M pcie_avg_wr_bandwidth_to_all_dst --metric-only -- <workload> MB/s pcie_avg_wr_bandwidth_to_all_dst S268435456 6 3127.5 nan S285212672 0 nan 6182.8$ perf stat -a --per-socket -j -M pcie_avg_wr_bandwidth_to_all_dst --metric-only -- <workload> {"socket" : "S268435456", "counters" : 6, "MB/s pcie_avg_wr_bandwidth_to_all_dst" : "3087.8", "MB/s pcie_avg_wr_bandwidth_to_all_dst" : "none"} {"socket" : "S285212672", "counters" : 0, "MB/s pcie_avg_wr_bandwidth_to_all_dst" : "none", "MB/s pcie_avg_wr_bandwidth_to_all_dst" : "6247.8"}All of these, I think, come from perf treating nvidia_pcie_pmu_0_rc_* and nvidia_pcie_pmu_1_rc_* as two different PMUs instead of one PMU, i.e
nvidia_pcie_pmu.I will investigate further and see if I can come up with a perf patch to fix this.
Regards,
BesarQuoted 3 lines
Thanks,
Ian Rogers
Quoted 154 lines · Besar Wicaksono
Quoted 58 lines
-----Original Message-----
From: Ian Rogers <[email protected]>
Sent: Monday, October 19, 2026 11:18 PM
To: Besar Wicaksono <[email protected]>
Cc: [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; Vikram Sethi <[email protected]>; Rich Wiley <[email protected]>; Sean Kelley <[email protected]>; Matt Ochs <[email protected]>; Raj Joshi <[email protected]>; Thierry Reding <[email protected]>; Jon Hunter <[email protected]>; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]
Subject: Re: [PATCH 4/6] perf jevents: Add support for NVIDIA Tegra410 PCIE-TGT PMU aliasingExternal email: Use caution opening links or attachments
Quoted 8 lines · Besar Wicaksono
Add alias support for NVIDIA Tegra410 PCIE-TGT PMU events and metrics.
Signed-off-by Besar Wicaksono <[email protected]>--- .../nvidia/t410/sys/uncore-pcie_tgt.json | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 tools/perf/pmu-
events/arch/arm64/nvidia/t410/sys/uncore-pcie_tgt.jsonReview
Quoted 2 lines
(quoted diff) +0
-0pcie_tgt.json b/tools/perf/pmu-
events/arch/arm64/nvidia/t410/sys/uncore-pcie_tgt.jsontools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-
Quoted 4 lines
new file mode 100644
index 000000000000..74786fc3d578tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore- new file +0
-0pcie_tgt.json
tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore- line 5
Quoted 6 lines
tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore- new file +5
-0@@ -0,0 +1,93 @@ +[ + { + "EventCode": "0x4", + "EventName": "PCIE_TGT_CYCLES", + "BriefDescription": "Counts cycles at the PCIe interface to the TegraSoC data fabric.",
tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore- line 6
Quoted 1 line
tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore- new file +1
-0+ "PublicDescription": "Counts cycles at the PCIe interface to the TegraSoC data fabric.",
tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore- line 8
Quoted 2 lines
tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore- new file +2
-0+ "Compat": "1070036b", + "Unit": "nvidia_pcie_tgt_pmu_,rc_"It looks like the PMU names are broken because of the _rc_ in their names:
https://web.git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree
/drivers/perf/arm_cspmu/nvidia_cspmu.c#n901Quoted 8 lines
``` .name_pattern = "nvidia_pcie_pmu_%u_rc_%u", ```The convention is for either a numeric (preferable) or hexadecimal suffix:
https://web.git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree
/Documentation/ABI/testing/sysfs-bus-event_source-devices Extra information about the PMU belongs in a caps file.Hi Ian,
Thanks for the pointers.
My interpretation is the ABI document doesn’t prevent driver from naming the PMU with multiple numbering format. Other PMUs already did this, e.g. HiSilicon hisi_sccl<sccl>_ddrc<n>, Arm NI arm_ni_<ni>_cd_<cd> and Qualcomm l3cache_<x>_<y>.
Quoted 7 lines
By definition nothing can work with wildcard matching using the existing PMU name, so please rename it. If a new suffix convention is necessary then you should update the ABI and perf tool suffix matching logic like
pmu_name_len_no_suffix:
https://web.git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree
/tools/perf/util/pmus.c#n65The JSON "Unit" attribute takes a comma-separated form:
"nvidia_pcie_pmu_,rc_", like HiSilicon's "hisi_sccl,ddrc", whichperf_pmu__match_wildcard_uncore()matches against "socketX_pmunameY" names. The issues seem to be on the reporting side. The counting looks ok. I guess JSON "Unit" matching logic is not applied everywhere in perf.For example below is the counting from my 2-socket machine.
Test workload: read 4 GiB from an NVMe on socket 0 RC 0 and 8 GiB from an NVMe on socket 1 RC 0, in parallel (dd ... of=/dev/null iflag=direct).
Counting is correct with the wildcards:
$ perf stat -a -e 'nvidia_pcie_pmu_0_rc*/PCIE_WR_BYTES/,nvidia_pcie_pmu_1_rc*/PCIE_WR_BYTES/' -- <workload> 4,362,223,228 nvidia_pcie_pmu_0_rc*/PCIE_WR_BYTES/ 8,623,751,168 nvidia_pcie_pmu_1_rc*/PCIE_WR_BYTES/$ perf stat -a --per-socket -e 'nvidia_pcie_pmu_*_rc_0/PCIE_WR_BYTES/' -- <workload> S268435456 1 4,362,207,232 nvidia_pcie_pmu_0_rc_0/nvidia_pcie_pmu_*_rc_0,PCIE_WR_BYTES/ S285212672 1 8,724,414,784 nvidia_pcie_pmu_1_rc_0/nvidia_pcie_pmu_*_rc_0,PCIE_WR_BYTES/The reporting is where it goes wrong:
1) RC 0 of all sockets is not merged into one line, and the wildcard ends up in the event name:
$ perf stat -a -e 'nvidia_pcie_pmu_*_rc_0/PCIE_WR_BYTES/' -- <workload> 4,311,875,584 nvidia_pcie_pmu_0_rc_0/nvidia_pcie_pmu_*_rc_0,PCIE_WR_BYTES/ 8,623,751,168 nvidia_pcie_pmu_1_rc_0/nvidia_pcie_pmu_*_rc_0,PCIE_WR_BYTES/2) The json event is split per socket, and each line is labelled with RC 0 although it is the sum of all RCs of that socket:
$ perf stat -a -e PCIE_WR_BYTES -- <workload> 4,311,880,848 nvidia_pcie_pmu_0_rc_0/PCIE_WR_BYTES/ 8,724,414,784 nvidia_pcie_pmu_1_rc_0/PCIE_WR_BYTES/3) The metric is computed per socket, instead of total. With --metric-only both values end up under one header, and the reader can't tell which socket is which:
$ perf stat -a -M pcie_avg_wr_bandwidth_to_all_dst --metric-only -- <workload> MB/s pcie_avg_wr_bandwidth_to_all_dst 3113.5 6227.04) With --per-socket, each row shows both copies: the other socket's copy prints nan, and socket 1's counters is 0 instead of 6:
$ perf stat -a --per-socket -M pcie_avg_wr_bandwidth_to_all_dst --metric-only -- <workload> MB/s pcie_avg_wr_bandwidth_to_all_dst S268435456 6 3127.5 nan S285212672 0 nan 6182.8$ perf stat -a --per-socket -j -M pcie_avg_wr_bandwidth_to_all_dst --metric-only -- <workload> {"socket" : "S268435456", "counters" : 6, "MB/s pcie_avg_wr_bandwidth_to_all_dst" : "3087.8", "MB/s pcie_avg_wr_bandwidth_to_all_dst" : "none"} {"socket" : "S285212672", "counters" : 0, "MB/s pcie_avg_wr_bandwidth_to_all_dst" : "none", "MB/s pcie_avg_wr_bandwidth_to_all_dst" : "6247.8"}All of these, I think, come from perf treating nvidia_pcie_pmu_0_rc_* and nvidia_pcie_pmu_1_rc_* as two different PMUs instead of one PMU, i.e
nvidia_pcie_pmu.I will investigate further and see if I can come up with a perf patch to fix this.
Regards,
BesarQuoted 3 lines
Thanks,
Ian Rogers
PATCH 5/6 perf jevents: Add support for NVIDIA Tegra410 CPU Memory Latency PMU aliasing
In reply to Besar WicaksonoAdd alias support for NVIDIA Tegra410 CPU Memory Latency PMU events.
--- .../arm64/nvidia/t410/sys/uncore-cpu_mem.json | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-cpu_mem.json
tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-cpu_mem.json new file +48 -0
@@ -0,0 +1,48 @@ +[ + { + "EventCode": "0x0", + "EventName": "CMEM_CYCLES", + "BriefDescription": "Counts elapsed MSN bridge cycles for the CMEM read-latency counters.", + "PublicDescription": "Counts elapsed Memory Switch Node (MSN) bridge cycles for the CMEM read-latency counters. All MSN instances share this clock, so the count is read from the first instance.", + "Compat": "NVDA2021", + "Unit": "nvidia_cmem_latency_pmu_" + }, + { + "EventCode": "0x1", + "EventName": "CMEM_RD_REQ", + "BriefDescription": "Counts local CMEM read requests at the edge of the UCF (post SLC), in 32-byte units, from all requesters.", + "PublicDescription": "Counts read requests at the edge of the Unified Coherence Fabric (UCF), after the System Level Cache (SLC), to local CPU DRAM (CMEM), at 32-byte granularity. A read of up to 32 bytes adds one; a 64-byte read adds two. It counts reads from all requesters, local and remote, summed over all Memory Switch Node (MSN) instances and channels. There is no requester or security-state filtering.", + "Compat": "NVDA2021", + "Unit": "nvidia_cmem_latency_pmu_" + }, + { + "EventCode": "0x2", + "EventName": "CMEM_RD_CUM_OUTS", + "BriefDescription": "Accumulates the in-flight read requests counted by CMEM_RD_REQ each MSN bridge cycle.", + "PublicDescription": "Accumulates the in-flight read requests counted by CMEM_RD_REQ each Memory Switch Node (MSN) bridge cycle. Pair the two for the average read latency.", + "Compat": "NVDA2021", + "Unit": "nvidia_cmem_latency_pmu_" + }, + { + "MetricName": "cmem_freq", + "MetricGroup": "CMEM_Frequency;CMEM_Read_Latency", + "MetricConstraint": "NO_GROUP_EVENTS", + "MetricExpr": "(CMEM_CYCLES / aggr_nr(CMEM_CYCLES)) / 1e9 / duration_time", + "ScaleUnit": "1GHz", + "BriefDescription": "MSN bridge clock frequency of the CMEM read-latency counters.", + "PublicDescription": "Average Memory Switch Node (MSN) bridge clock frequency over the measurement interval. This is the clock of the CMEM read-latency counters.", + "Compat": "NVDA2021", + "Unit": "nvidia_cmem_latency_pmu_" + }, + { + "MetricName": "cmem_avg_rd_latency", + "MetricGroup": "CMEM_Read_Latency", + "MetricConstraint": "NO_GROUP_EVENTS", + "MetricExpr": "(CMEM_RD_CUM_OUTS / CMEM_RD_REQ) / cmem_freq", + "ScaleUnit": "1ns/request", + "BriefDescription": "Average local CMEM read latency from the edge of the UCF (post SLC) to CPU DRAM, for all requesters.", + "PublicDescription": "Average latency of the read requests counted by CMEM_RD_REQ, from the edge of the Unified Coherence Fabric (UCF), after the System Level Cache (SLC), to local CPU DRAM (CMEM).", + "Compat": "NVDA2021", + "Unit": "nvidia_cmem_latency_pmu_" + } +]
Signature · 1 line
2.43.0
[email protected]
AI reviewRe: [PATCH 5/6] perf jevents: Add support for NVIDIA Tegra410 CPU Memory Latency PMU aliasing
Sashiko has reviewed this patch and found no issues.
Quoted 3 lines
Add alias support for NVIDIA Tegra410 CPU Memory Latency PMU events.
Signed-off-by Besar Wicaksono <[email protected]>
Sashiko has reviewed this patch and found no issues.
Signature · 1 line
Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=5
PATCH 6/6 perf jevents: Add support for NVIDIA Tegra410 C2C PMU aliasing
In reply to Besar WicaksonoAdd alias support for NVIDIA Tegra410 C2C PMU events.
--- .../arm64/nvidia/t410/sys/uncore-nvclink.json | 75 ++++++++++ .../arm64/nvidia/t410/sys/uncore-nvdlink.json | 48 +++++++ .../nvidia/t410/sys/uncore-nvlink_c2c.json | 129 ++++++++++++++++++ 3 files changed, 252 insertions(+) create mode 100644 tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-nvclink.json create mode 100644 tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-nvdlink.json create mode 100644 tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-nvlink_c2c.json
tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-nvclink.json new file +75 -0
@@ -0,0 +1,75 @@ +[ + { + "EventCode": "0x0", + "EventName": "NVCLINK_CYCLES", + "BriefDescription": "Counts NV-CLink interface clock cycles.", + "PublicDescription": "Counts NV-CLink interface clock cycles. All NV-CLink instances share this clock, so the count is read from the first instance.", + "Compat": "NVDA2022", + "Unit": "nvidia_nvclink_pmu_" + }, + { + "EventCode": "0x1", + "EventName": "NVCLINK_IN_RD_CUM_OUTS", + "BriefDescription": "Accumulates the outstanding incoming read requests counted by NVCLINK_IN_RD_REQ each NV-CLink interface cycle.", + "PublicDescription": "Accumulates the outstanding incoming read requests counted by NVCLINK_IN_RD_REQ each NV-CLink interface cycle. Pair the two for the average read latency.", + "Compat": "NVDA2022", + "Unit": "nvidia_nvclink_pmu_" + }, + { + "EventCode": "0x2", + "EventName": "NVCLINK_IN_RD_REQ", + "BriefDescription": "Counts incoming read requests from the remote Tegra SoC at the NV-CLink interface.", + "PublicDescription": "Counts incoming read requests from the remote Tegra SoC at the NV-CLink interface, where local memory or a local device responds with data. Request size can be from 1 to 256 bytes. The count is summed over all NV-CLink instances.", + "Compat": "NVDA2022", + "Unit": "nvidia_nvclink_pmu_" + }, + { + "EventCode": "0x5", + "EventName": "NVCLINK_OUT_RD_CUM_OUTS", + "BriefDescription": "Accumulates the outstanding outgoing read requests counted by NVCLINK_OUT_RD_REQ each NV-CLink interface cycle.", + "PublicDescription": "Accumulates the outstanding outgoing read requests counted by NVCLINK_OUT_RD_REQ each NV-CLink interface cycle. Pair the two for the average read latency.", + "Compat": "NVDA2022", + "Unit": "nvidia_nvclink_pmu_" + }, + { + "EventCode": "0x6", + "EventName": "NVCLINK_OUT_RD_REQ", + "BriefDescription": "Counts outgoing read requests from the local Tegra SoC to the remote Tegra SoC at the NV-CLink interface.", + "PublicDescription": "Counts outgoing read requests from the local Tegra SoC to the remote Tegra SoC at the NV-CLink interface, where memory on the remote Tegra SoC responds with data. Request size can be from 1 to 256 bytes. The count is summed over all NV-CLink instances.", + "Compat": "NVDA2022", + "Unit": "nvidia_nvclink_pmu_" + }, + { + "MetricName": "nvclink_freq", + "MetricGroup": "NVCLINK_Frequency;NVCLINK_Latency;NVCLINK_Read_Latency", + "MetricConstraint": "NO_GROUP_EVENTS", + "MetricExpr": "(NVCLINK_CYCLES / aggr_nr(NVCLINK_CYCLES)) / 1e9 / duration_time", + "ScaleUnit": "1GHz", + "BriefDescription": "NV-CLink interface clock frequency.", + "PublicDescription": "Average NV-CLink interface clock frequency over the measurement interval.", + "Compat": "NVDA2022", + "Unit": "nvidia_nvclink_pmu_" + }, + { + "MetricName": "nvclink_in_avg_rd_latency", + "MetricGroup": "NVCLINK_Latency;NVCLINK_Read_Latency;NVCLINK_Incoming", + "MetricConstraint": "NO_GROUP_EVENTS", + "MetricExpr": "(NVCLINK_IN_RD_CUM_OUTS / NVCLINK_IN_RD_REQ) / nvclink_freq", + "ScaleUnit": "1ns/request", + "BriefDescription": "Average latency of incoming read requests from the remote Tegra SoC at the NV-CLink interface.", + "PublicDescription": "Average latency of the incoming read requests counted by NVCLINK_IN_RD_REQ, measured at the NV-CLink interface.", + "Compat": "NVDA2022", + "Unit": "nvidia_nvclink_pmu_" + }, + { + "MetricName": "nvclink_out_avg_rd_latency", + "MetricGroup": "NVCLINK_Latency;NVCLINK_Read_Latency;NVCLINK_Outgoing", + "MetricConstraint": "NO_GROUP_EVENTS", + "MetricExpr": "(NVCLINK_OUT_RD_CUM_OUTS / NVCLINK_OUT_RD_REQ) / nvclink_freq", + "ScaleUnit": "1ns/request", + "BriefDescription": "Average latency of outgoing read requests sent by the local Tegra SoC to the remote Tegra SoC at the NV-CLink interface.", + "PublicDescription": "Average latency of the outgoing read requests counted by NVCLINK_OUT_RD_REQ, measured at the NV-CLink interface.", + "Compat": "NVDA2022", + "Unit": "nvidia_nvclink_pmu_" + } +]
tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-nvdlink.json new file +48 -0
48 lines not on this page · raw message
tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-nvlink_c2c.json new file +129 -0
129 lines not on this page · raw message
Signature · 1 line
2.43.0
[email protected]
AI reviewRe: [PATCH 6/6] perf jevents: Add support for NVIDIA Tegra410 C2C PMU aliasing
Sashiko has reviewed this patch and found no issues.
Quoted 3 lines
Add alias support for NVIDIA Tegra410 C2C PMU events.
Signed-off-by Besar Wicaksono <[email protected]>
Sashiko has reviewed this patch and found no issues.
Signature · 1 line
Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=6
Quoted 32 lines · Besar Wicaksono
Add event aliases and derived metrics for the NVIDIA Tegra410 uncore PMUs.
The series covers the UCF, PCIe, PCIe target, CPU memory latency, and chip-to-chip interconnect PMUs. It provides symbolic names for the raw event encodings and metrics for bandwidth, frequency, and average read latency.
Patch 1 fixes a jevents ordering problem found with this layout: the uncore events live in
arch/arm64/nvidia/t410/sys/, next to the T410 core events, and without the fix jevents puts the core tlb.json (which sorts after "sys") into the sys table, so its events are lost from perf list and perf stat.Besar Wicaksono (6):
perf jevents: Process model files before sys subdirectories perf jevents: Add support for NVIDIA Tegra410 UCF PMU aliasing perf jevents: Add support for NVIDIA Tegra410 PCIE PMU aliasing perf jevents: Add support for NVIDIA Tegra410 PCIE-TGT PMU aliasing perf jevents: Add support for NVIDIA Tegra410 CPU Memory Latency PMU
aliasing
perf jevents: Add support for NVIDIA Tegra410 C2C PMU aliasing.../arm64/nvidia/t410/sys/uncore-cpu_mem.json | 48 ++ .../arm64/nvidia/t410/sys/uncore-nvclink.json | 75 ++ .../arm64/nvidia/t410/sys/uncore-nvdlink.json | 48 ++ .../nvidia/t410/sys/uncore-nvlink_c2c.json | 129 ++++ .../arm64/nvidia/t410/sys/uncore-pcie.json | 247 +++++++ .../nvidia/t410/sys/uncore-pcie_tgt.json | 93 +++ .../arm64/nvidia/t410/sys/uncore-ucf.json | 693 ++++++++++++++++++ tools/perf/pmu-events/jevents.py | 4 +- 8 files changed, 1336 insertions(+), 1 deletion(-)
Quoted 8 lines
create mode 100644
tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-cpu_mem.jsoncreate mode 100644tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-nvclink.jsoncreate mode 100644tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-nvdlink.jsoncreate mode 100644tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-nvlink_c2c.jsoncreate mode 100644tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-pcie.jsoncreate mode 100644tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-pcie_tgt.jsoncreate mode 100644tools/perf/pmu-events/arch/arm64/nvidia/t410/sys/uncore-ucf.json
Quoted 5 lines · James Clark
Quoted 2 lines · Besar Wicaksono
Add event aliases and derived metrics for the NVIDIA Tegra410 uncore PMUs.
Reviewed-by James Clark <[email protected]>
Thanks, applied to perf-tools-next, for v7.4.
- Arnaldo
Ian Rogers
reviewerQuoted 9 lines · Arnaldo Carvalho de Melo
Quoted 5 lines · James Clark
Quoted 2 lines · Besar Wicaksono
Add event aliases and derived metrics for the NVIDIA Tegra410 uncore PMUs.
Reviewed-by James Clark <[email protected]>Thanks, applied to perf-tools-next, for v7.4.
Hi Arnaldo,
can we not take these in v7.4 as there is unaddressed feedback:
https://lore.kernel.org/linux-perf-users/CAP-5=fWucvdYefDOL3Vn=O=YUPEXE+tngDDfPLv-T5i3WkCJVA@mail.gmail.com/
The specific problem is that the NVidia PMUs have adopted a convention not supported by the perf tool of 'pmu_name_<socket>_rc_<num>'. rc stands for root complex. What ends up happening is that aggregation is broken as the json is claiming that pmu_name is the PMU's name while the suffix perf_pmus code thinks pmu_name_<socket>_rc is the pmu name. They've wrangled support via the json by claiming these are sys events.
We can either:
1) support a new suffix convention of <num>_rc_<num>
2) push back and ask the driver writers to name their PMU correctly as defined in the ABI:
https://web.git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/ABI/testing/sysfs-bus-event_source-devices
If we do (1) then it would be nice if the support for that could be contained in this patch series. In any case these events don't belong in sys.
Thanks,
Ian
Quoted 1 line
- Arnaldo
Quoted 8 lines · Ian Rogers
Quoted 6 lines · Arnaldo Carvalho de Melo
Quoted 3 lines · James Clark
Quoted 2 lines · Besar Wicaksono
Add event aliases and derived metrics for the NVIDIA Tegra410 uncore PMUs.
Quoted 8 lines
Quoted 3 lines
Quoted 1 line
Reviewed-by James Clark <[email protected]>Thanks, applied to perf-tools-next, for v7.4.
Hi Arnaldo,
can we not take these in v7.4 as there is unaddressed feedback:
https://lore.kernel.org/linux-perf-users/CAP-5=fWucvdYefDOL3Vn=O=YUPEXE+tngDDfPLv-T5i3WkCJVA@mail.gmail.com
Sure, will remove until the discussion comes to a conclusion.
- Arnaldo
Quoted 15 lines
The specific problem is that the NVidia PMUs have adopted a convention not supported by the perf tool of 'pmu_name_<socket>_rc_<num>'. rc stands for root complex. What ends up happening is that aggregation is broken as the json is claiming that
pmu_nameis the PMU's name while the suffixperf_pmuscode thinks pmu_name_<socket>_rc is the pmu name. They've wrangled support via the json by claiming these are sys events.We can either:
1) support a new suffix convention of <num>_rc_<num>
2) push back and ask the driver writers to name their PMU correctly as defined in the ABI:
https://web.git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/ABI/testing/sysfs-bus-event_source-devices
Quoted 8 lines
If we do (1) then it would be nice if the support for that could be contained in this patch series. In any case these events don't belong in sys.
Thanks,
IanQuoted 1 line
- Arnaldo
- Arnaldo
Quoted 57 lines
-----Original Message-----
From: Ian Rogers <[email protected]>
Sent: Tuesday, October 20, 2026 8:33 PM
To: Arnaldo Carvalho de Melo <[email protected]>
Cc: James Clark <[email protected]>; Besar Wicaksono <[email protected]>; [email protected]; linux- [email protected]; [email protected]; linux-perf- [email protected]; [email protected]; Vikram Sethi <[email protected]>; Rich Wiley <[email protected]>; Sean Kelley <[email protected]>; Matt Ochs <[email protected]>; Raj Joshi <[email protected]>; Thierry Reding <[email protected]>; Jon Hunter <[email protected]>; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]
Subject: Re: [PATCH 0/6] perf jevents: Add NVIDIA Tegra410 uncore PMU events and metricsExternal email: Use caution opening links or attachments
Quoted 9 lines · Arnaldo Carvalho de Melo
Quoted 5 lines · James Clark
Quoted 2 lines · Besar Wicaksono
Add event aliases and derived metrics for the NVIDIA Tegra410 uncore PMUs.
Reviewed-by James Clark <[email protected]>Thanks, applied to perf-tools-next, for v7.4.
Hi Arnaldo,
can we not take these in v7.4 as there is unaddressed feedback:
https://lore.kernel.org/linux-perf-users/CAP-
5=fWucvdYefDOL3Vn=O=YUPEXE+tngDDfPLv- [email protected]/The specific problem is that the NVidia PMUs have adopted a convention not supported by the perf tool of 'pmu_name_<socket>_rc_<num>'. rc stands for root complex. What ends up happening is that aggregation is broken as the json is claiming that
pmu_nameis the PMU's name while the suffixperf_pmuscode thinks pmu_name_<socket>_rc is the pmu name. They've wrangled support via the json by claiming these are sys events.We can either:
1) support a new suffix convention of <num>_rc_<num>
2) push back and ask the driver writers to name their PMU correctly as defined in the ABI:
https://web.git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree
/Documentation/ABI/testing/sysfs-bus-event_source-devices
Quoted 3 lines
If we do (1) then it would be nice if the support for that could be contained in this patch series. In any case these events don't belong in sys.
Hi Ian,
Could you elaborate more on why these uncore events don't belong in sys directory? Is it because T410 already has an entry in mapfile.csv?
I put them in sys so perf matches them to the PMU by its identifier ("Compat") rather than by the CPU, similar to hisilicon/hip09/sys and thead/yitian710/sys.
For the aggregation concern, I replied on PATCH 4/6 and will look into it further.
Thanks,
Besar
Quoted 5 lines
Thanks,
IanQuoted 1 line
- Arnaldo
Ian Rogers
reviewerQuoted 56 lines · Besar Wicaksono
Quoted 56 lines
-----Original Message-----
From: Ian Rogers <[email protected]>
Sent: Tuesday, October 20, 2026 8:33 PM
To: Arnaldo Carvalho de Melo <[email protected]>
Cc: James Clark <[email protected]>; Besar Wicaksono <[email protected]>; [email protected]; linux- [email protected]; [email protected]; linux-perf- [email protected]; [email protected]; Vikram Sethi <[email protected]>; Rich Wiley <[email protected]>; Sean Kelley <[email protected]>; Matt Ochs <[email protected]>; Raj Joshi <[email protected]>; Thierry Reding <[email protected]>; Jon Hunter <[email protected]>; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]
Subject: Re: [PATCH 0/6] perf jevents: Add NVIDIA Tegra410 uncore PMU events and metricsExternal email: Use caution opening links or attachments
Quoted 9 lines · Arnaldo Carvalho de Melo
Quoted 5 lines · James Clark
Quoted 2 lines · Besar Wicaksono
Add event aliases and derived metrics for the NVIDIA Tegra410 uncore PMUs.
Reviewed-by James Clark <[email protected]>Thanks, applied to perf-tools-next, for v7.4.
Hi Arnaldo,
can we not take these in v7.4 as there is unaddressed feedback:
https://lore.kernel.org/linux-perf-users/CAP-
5=fWucvdYefDOL3Vn=O=YUPEXE+tngDDfPLv- [email protected]/The specific problem is that the NVidia PMUs have adopted a convention not supported by the perf tool of 'pmu_name_<socket>_rc_<num>'. rc stands for root complex. What ends up happening is that aggregation is broken as the json is claiming that
pmu_nameis the PMU's name while the suffixperf_pmuscode thinks pmu_name_<socket>_rc is the pmu name. They've wrangled support via the json by claiming these are sys events.We can either:
1) support a new suffix convention of <num>_rc_<num>
2) push back and ask the driver writers to name their PMU correctly as defined in the ABI:
https://web.git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree
/Documentation/ABI/testing/sysfs-bus-event_source-devices
Quoted 8 lines
Quoted 3 lines
If we do (1) then it would be nice if the support for that could be contained in this patch series. In any case these events don't belong in sys.
Hi Ian,
Could you elaborate more on why these uncore events don't belong in sys directory? Is it because T410 already has an entry in mapfile.csv?
I think the meaning of sys and system events has always been unclear. The original patch series is:
https://lore.kernel.org/lkml/[email protected]/
However, since it isn't tied to a CPUID it should refer to things like accelerator or network cards, not regular uncore PMUs.
The whole notion of sys events/metrics needs TLC as it doesn't make sense for them to be in vendor directories if they aren't tied to CPUIDs.
Quoted 2 lines
I put them in sys so perf matches them to the PMU by its identifier ("Compat") rather than by the CPU, similar to hisilicon/hip09/sys and thead/yitian710/sys.
So it would be better to follow x86 as a model.
Quoted 2 lines
For the aggregation concern, I replied on PATCH 4/6 and will look into it further.
So CT replied. The ABI document was created because the hex suffix broke aggregation, which we fixed. As your reply details, cross-PMU aggregation has been broken by your new suffix convention. With the conventions we have, PMU names like i915 will match a name of just "i" and ARM CPU names tend to be valid hex suffixes in things like armv8_pmu_a53 - so we ignore suffixes on core PMUs. The distinction between core and uncore PMUs in sysfs is also strange. Anyway, it isn't perfect, but we documented it so that future PMUs wouldn't break aggregation again - or if they did they can detail in the ABI and perf code what the new additional convention is.
Ideally we wouldn't include anything fancy like physical addresses and socket numbers in PMU names. Such information is already present in /proc/iomem or the topology code, and the naming irregularities only serve to break aggregation. To add detail to the PMU, use the caps files. I don't think the perf tool should add new ways for every vendor to aggregate, determine sockets, etc. It is bad enough we have to carry fixes for ARM PMUs not honoring hot plugging and for the cpumasks not being set up properly on Intel PMUs for sub-NUMA clustering. Ideally, the perf tool could work in a user space emulator—say, an x86 perf tool running under QEMU user emulation on an ARM64 CPU. Special-casing CPU type and PMU logic defeats this goal.
Thanks,
Ian
Quoted 8 lines
Thanks,
BesarQuoted 5 lines
Thanks,
IanQuoted 1 line
- Arnaldo