PMC.CMN-600(3)
πΈ pmc.cmn-600 β library functions manual, but make it cute πΈ
okay so bestie, welcome to pmc.cmn-600 (3): the library for accessing the Arm CoreLink CMN-600 Coherent Mesh Network Controller performance counter events. yes, that whole name. iconic, honestly.
π«Ά LIBRARY π«Ά
Performance Counters Library (libpmc, -lpmc).
π SYNOPSIS π
#include <pmc.h>
π DESCRIPTION π
okay so real talk: CMN-600 PMU counters may be configured to count any one of a defined set of hardware events. Unlike other performance counters, counters for the CMN-600 require the node ID to set up. no node ID, no counting, periodt.
Node ID information currently can be obtained one of two ways. Using bootverbose, for example set sysctl debug.bootverbose=1 and then load the hwpmc(4) KLD module. The cmn600 module will be loaded automatically as a dependency:
$ sysctl debug.bootverbose=1
$ kldload hwpmc
Another way is to use sysctl to trigger dump of nodes tree to system console:
$ sysctl dev.cmn600.0.dump_nodes=1
π‘ heads up, bestie: some BIOS versions of dual-socket machines have no NUMA domain information in ACPI. In such cases, to get more accurate events statistics, set the kernel environment variablehint.cmn600.{unit}.domain={value}. Where{unit}is acmn600device unit number and{value}is the NUMA domain of the CPU package containing that CMN-600 controller. Example:
$ kenv hint.cmn600.0.domain=0
$ kenv hint.cmn600.1.domain=1
$ kldunload hwpmc cmn600
$ kldload hwpmc
Arm CoreLink CMN-600 Coherent Mesh Network Controller performance counters are documented in βRevision: r3p2β, Arm CoreLink CMN-600 Coherent Mesh Network Technical Reference Manual, ARM Limited, 2020.
π PMC Capabilities π
CMN-600 PMU counters support the following capabilities:
PMC_CAP_CASCADEβ NoPMC_CAP_EDGEβ NoPMC_CAP_INTERRUPTβ YesPMC_CAP_INVERTβ NoPMC_CAP_READβ YesPMC_CAP_PRECISEβ NoPMC_CAP_SYSTEMβ YesPMC_CAP_TAGGINGβ NoPMC_CAP_THRESHOLDβ YesPMC_CAP_USERβ NoPMC_CAP_WRITEβ Yes
β¨ Event Qualifiers β¨
Event specifiers for these PMCs support the following common qualifiers:
nodeid=nodeidβ Request counting for specific event at nodenodeid.occupancy=valueβ Filtering by occupancy type.xpport=portβ Count only events matched byport. (East,West,North,South,devport0,devport1or numeric0to5)xpchannel=channelβ Filter events by XP node channel. (REQ,RSP,SNP,DATor0,1,2,3)
π¦ Class Name Prefix π¦
These PMCs are named using a class name prefix of CMN600_PMU_. iykyk.
π Event Specifiers π
The following list of PMC events are available:
π§ DVM node events π§
dn_rxreq_dvmopβ Number of DVMOP requests received. This includes all the sub-types include TLB invalidate, Branch predictor invalidate, instruction cache (physical and virtual) invalidate.dn_rxreq_dvmsyncβ Number of DVM Sync requests received.dn_rxreq_dvmop_vmid_filteredβ Number of incoming DVMOP requests that are subject to VMID based filtering. This is a measure of the effectiveness of VMID based filtering and potential reduction in DVM snoops.dn_rxreq_retriedβ Number of incoming requests that are retried. This is a measure of the retry rate.dn_rxreq_trk_occupancyβ Counts the tracker occupancy in DN."occupancy":All,dvmop,dvmsyncdn_rxreq_tlbi_dvmopβ Number of DVMOP TLB invalidate requests received.dn_rxreq_bpi_dvmopβ Number of DVMOP Branch predictor invalidate requests received.dn_rxreq_pici_dvmopβ Number of DVMOP physical instruction cache invalidate requests received.dn_rxreq_vivi_dvmopβ Number of DVMOP virtual instruction cache invalidate requests received.dn_rxreq_dvmop_other_filteredβ Number of DVM op requests to RNDs, BPI or PICI/VICI, that were filtereddn_rxreq_snp_sentβ Number of SNPs sent to RNsdn_rxreq_snp_stalledβ Number of SNPs stalled to RNs due to lack of Crdsdn_rxreq_trk_fullβ DVM tracker full counter
π HN-F node events π
hnf_cache_missβ Counts total cache misses in first lookup result (high priority)hnf_slc_sf_cache_accessβ Counts number of cache accesses in first access (high priority)hnf_cache_fillβ Counts total allocations in HN SLC (all cache line allocations to SLC)hnf_pocq_retryβ Counts number of retried requestshnf_pocq_reqs_recvdβ Counts number of requests received by HNhnf_sf_hitβ Counts number of SF hitshnf_sf_evictionsβ Counts number of SF eviction cache invalidations initiatedhnf_dir_snoops_sentβ Counts number of directed snoops sent (not including SF back invalidation)hnf_brd_snoops_sentβ Counts number of multicast snoops sent (not including SF back invalidation)hnf_slc_evictionβ Counts number of SLC evictions (dirty only)hnf_slc_fill_invalid_wayβ Counts number of SLC fills to an invalid wayhnf_mc_retriesβ Counts number of retried transactions by the MChnf_mc_reqsβ Counts number of requests sent to MChnf_qos_hh_retryβ Counts number of times a HighHigh priority request is protocol-retried at the HN-Fhnf_qos_pocqβ Counts the POCQ occupancy in HN-F. Support argument"occupancy". Accept:All,Read,Write,Atomic,Stash. Default:All.hnf_pocq_addrhazβ Counts number of POCQ address hazards upon allocationhnf_pocq_atomic_addrhazβ Counts number of POCQ address hazards upon allocation for atomic operationshnf_ld_st_swp_adq_fullβ Counts number of times ADQ is full for Ld/St/SWP type atomic operations while POCQ has pending operationshnf_cmp_adq_fullβ Counts number of times ADQ is full for CMP type atomic operations while POCQ has pending operationshnf_txdat_stallβ Counts number of times HN-F has a pending TXDAT flit but no credits to uploadhnf_txrsp_stallβ Counts number of times HN-F has a pending TXRSP flit but no credits to uploadhnf_seq_fullβ Counts number of times requests are replayed in SLC pipe due to SEQ being fullhnf_seq_hitβ Counts number of times a request in SLC hit a pending SF eviction in SEQhnf_snp_sentβ Counts number of snoops sent including directed, multicast, and SF back invalidationhnf_sfbi_dir_snp_sentβ Counts number of times directed snoops were sent due to SF back invalidationhnf_sfbi_brd_snp_sentβ Counts number of times multicast snoops were sent due to SF back invalidationhnf_snp_sent_untrkβ Counts number of times snooped were sent due to untracked RNF'shnf_intv_dirtyβ Counts number of times SF back invalidation resulted in dirty line intervention from the RNhnf_stash_snp_sentβ Counts number of times stash snoops were senthnf_stash_data_pullβ Counts number of times stash snoops resulted in data pull from the RNhnf_snp_fwdedβ Counts number of times data forward snoops were sent
π₯ HN-I node events π₯
hni_rrt_rd_occ_cnt_ovflβ RRT read occupancy count overflowhni_rrt_wr_occ_cnt_ovflβ RRT write occupancy count overflowhni_rdt_rd_occ_cnt_ovflβ RDT read occupancy count overflowhni_rdt_wr_occ_cnt_ovflβ RDT write occupancy count overflowhni_wdb_occ_cnt_ovflβ WDB occupancy count overflowhni_rrt_rd_allocβ RRT read allocationhni_rrt_wr_allocβ RRT write allocationhni_rdt_rd_allocβ RDT read allocationhni_rdt_wr_allocβ RDT write allocationhni_wdb_allocβ WDB allocationhni_txrsp_retryackβ RETRYACK TXRSP flit senthni_arvalid_no_arreadyβ ARVALID set without ARREADY eventhni_arready_no_arvalidβ ARREADY set without ARVALID eventhni_awvalid_no_awreadyβ AWVALID set without AWREADY eventhni_awready_no_awvalidβ AWREADY set without AWVALID eventhni_wvalid_no_wreadyβ WVALID set without WREADY eventhni_txdat_stallβ TXDAT stall (TXDAT valid but no link credit available)hni_nonpcie_serializationβ Non-PCIe serialization eventhni_pcie_serializationβ PCIe serialization event
β XP node events β
xp_txflit_validβ Number of flits transmitted on a specified port and CHI channel. This is a measure of the flit transfer bandwidth from an XP. Note: On device ports, this event also includes link flit transfers.xp_txflit_stallβ Number of cycles when a flit is stalled at an XP waiting for link credits at a specified port and CHI channel. This is a measure of the flit traffic congestion on the mesh and at the flit download ports.xp_partial_dat_flitβ Number of times when a partial DAT flit is uploaded onto the mesh from a RN-F_CHIA port. Partial DAT flit transmission occurs when XP is not able to combine two 128b DAT flits and send them over the 256b DAT channel. This can happen under 2 circumstances: 1. Only one 128b DAT flit is received within a transmission time window. 2. Two 128b DAT flits are received but they are not two halves of a single 256b word.
π SBSX node events π
sbsx_rd_reqβ Read requestsbsx_wr_reqβ Write requestsbsx_cmo_reqβ CMO requestsbsx_txrsp_retryackβ RETRYACK TXRSP flit sentsbsx_txdat_flitvβ TXDAT flit seensbsx_txrsp_flitvβ TXRSP flit seensbsx_rd_req_trkr_occ_cnt_ovflβ Read request tracker occupancy count overflowsbsx_wr_req_trkr_occ_cnt_ovflβ Write request tracker occupancy count overflowsbsx_cmo_req_trkr_occ_cnt_ovflβ CMO request tracker occupancy count overflowsbsx_wdb_occ_cnt_ovflβ WDB occupancy count overflowsbsx_rd_axi_trkr_occ_cnt_ovflβ Read AXI pending tracker occupancy count overflowsbsx_cmo_axi_trkr_occ_cnt_ovflβ CMO AXI pending tracker occupancy count overflowsbsx_arvalid_no_arreadyβ ARVALID set without ARREADYsbsx_awvalid_no_awreadyβ AWVALID set without AWREADYsbsx_wvalid_no_wreadyβ WVALID got set but there was, like, zero WREADY. Awkward. πsbsx_txdat_stallβ TXDAT stall, aka TXDAT is valid but there's no link credit available πsbsx_txrsp_stallβ TXRSP stall, fr the same deal: TXRSP is valid but no link credit available
π¦ RN-D node events
rnd_s0_rdata_beatsβ Number of RData beats, RVALID and RREADY, dispatched on port 0. It's a measure of the read bandwidth, and yes it includes CMO responses πrnd_s1_rdata_beatsβ Number of RData beats, RVALID and RREADY, dispatched on port 1. Measure of the read bandwidth, CMO responses included β¨rnd_s2_rdata_beatsβ Number of RData beats, RVALID and RREADY, dispatched on port 2. Measure of the read bandwidth, CMO responses included πrnd_rxdat_flitsβ Number of RXDAT flits received. This one is a measure of the true read data bandwidth, and it excludes CMOs πrnd_txdat_flitsβ Number of TXDAT flits dispatched. Measure of the write bandwidth, periodt βοΈrnd_txreq_flits_totalβ Number of TXREQ flits dispatched. Measure of the total request bandwidth πrnd_txreq_flits_retriedβ Number of retried TXREQ flits dispatched. Measure of the retry rate, iykyk πrnd_rrt_occ_ovflβ Every single entry in the read request tracker is occupied. It's a measure of oversubscription in the read request tracker π³rnd_wrt_occ_ovflβ All entries in the write request tracker are occupied. Measure of oversubscription in the write request tracker πrnd_txreq_flits_replayedβ Number of replayed TXREQ flits. This is the measure of replay rate πrnd_wrcancel_sentβ Number of write data cancels sent. The measure of write cancel rate πrnd_s0_wdata_beatsβ Number of WData beats, WVALID and WREADY, dispatched on port 0. Measure of write bandwidth on AXI port 0 πrnd_s1_wdata_beatsβ Number of WData beats, WVALID and WREADY, dispatched on port 1. Measure of write bandwidth on AXI port 1 πrnd_s2_wdata_beatsβ Number of WData beats, WVALID and WREADY, dispatched on port 2. Measure of write bandwidth on AXI port 2 πrnd_rrt_allocβ Number of allocations in the read request tracker. Measure of read transaction count π§rnd_wrt_allocβ Number of allocations in the write request tracker. Measure of write transaction count π§rnd_rdb_unordβ Number of cycles for which Read Data Buffer state machine is in Unordered Mode πͺοΈrnd_rdb_replayβ Number of cycles for which Read Data Buffer state machine is in Replay mode πrnd_rdb_hybridβ Number of cycles for which Read Data Buffer state machine is in hybrid mode. Hybrid mode is where there is a mix of ordered/unordered traffic, bestie β a little of both πrnd_rdb_ordβ Number of cycles for which Read Data Buffer state machine is in ordered Mode π§
πΈ RN-I node events
rni_s0_rdata_beatsβ Number of RData beats, RVALID and RREADY, dispatched on port 0. Measure of the read bandwidth, including CMO responses πrni_s1_rdata_beatsβ Number of RData beats, RVALID and RREADY, dispatched on port 1. Measure of the read bandwidth, including CMO responses β¨rni_s2_rdata_beatsβ Number of RData beats, RVALID and RREADY, dispatched on port 2. Measure of the read bandwidth, including CMO responses πrni_rxdat_flitsβ Number of RXDAT flits received. Measure of the true read data bandwidth, excluding CMOs πrni_txdat_flitsβ Number of TXDAT flits dispatched. Measure of the write bandwidth πrni_txreq_flits_totalβ Number of TXREQ flits dispatched. Measure of the total request bandwidth π₯rni_txreq_flits_retriedβ Number of retried TXREQ flits dispatched. Measure of the retry rate πrni_rrt_occ_ovflβ All entries in the read request tracker are occupied. Measure of oversubscription in the read request tracker π³rni_wrt_occ_ovflβ All entries in the write request tracker are occupied. Measure of oversubscription in the write request tracker πrni_txreq_flits_replayedβ Number of replayed TXREQ flits. This is the measure of replay rate πrni_wrcancel_sentβ Number of write data cancels sent. This is the measure of write cancel rate πrni_s0_wdata_beatsβ Number of WData beats, WVALID and WREADY, dispatched on port 0. Measure of write bandwidth on AXI port 0 πrni_s1_wdata_beatsβ Number of WData beats, WVALID and WREADY, dispatched on port 1. Measure of write bandwidth on AXI port 1 πrni_s2_wdata_beatsβ Number of WData beats, WVALID and WREADY, dispatched on port 2. Measure of write bandwidth on AXI port 2 πrni_rrt_allocβ Number of allocations in the read request tracker. Measure of read transaction count π§rni_wrt_allocβ Number of allocations in the write request tracker. Measure of write transaction count π§rni_rdb_unordβ Number of cycles for which Read Data Buffer state machine is in Unordered Mode πͺοΈrni_rdb_replayβ Number of cycles for which Read Data Buffer state machine is in Replay mode πrni_rdb_hybridβ Number of cycles for which Read Data Buffer state machine is in hybrid mode. Hybrid mode is where there is a mix of ordered/unordered traffic πrni_rdb_ordβ Number of cycles for which Read Data Buffer state machine is in ordered Mode π§
β CXHA node events
Heads up, bestie: the CXHA events descriptions are guessed. Not me making things up β the page literally says so π
cxha_rddatbypβ Number of Read DAT Bypasscxha_chirsp_up_stallβ Number of CHI RSP up Stallcxha_chidat_up_stallβ Number of CHI DAT up Stallcxha_snppcrd_lnk0_stallβ Number of Snoop Pcrd Stall on Link 0cxha_snppcrd_lnk1_stallβ Number of Snoop Pcrd Stall on Link 1cxha_snppcrd_lnk2_stallβ Number of Snoop Pcrd Stall on Link 2cxha_reqtrk_occβ Request Tracker Occupancycxha_rdb_occβ Read Data Buffer Occupancycxha_rdbbyp_occβ Read Data Buffer Bypass Occupancycxha_wdb_occβ Write Data Buffer Occupancycxha_snptrk_occβ Snoop Tracker Occupancycxha_sdb_occβ SDB Occupancycxha_snphaz_occβ Snoop Hazard Occupancy
π CXRA node events
cxra_req_trk_occβ Request tracker occupancycxra_snp_trk_occβ Snoop tracker occupancycxra_rd_dat_buf_occβ Read data buffer occupancycxra_wr_dat_buf_occβ Write data buffer occupancycxra_snp_sink_buf_occβ Snoop sink buffer occupancycxra_snp_bcastsβ Snoop broadcastscxra_req_chainsβ Number of request chains formed larger than onecxra_req_chain_avg_lenβ Average size of request chains, only for chain sizes larger than onecxra_chi_rsp_upload_stallsβ Local RA upload stalls to CHI because of contention with HAcxra_chi_dat_upload_stallsβ Local RA upload stalls to CHI because of contention with HAcxra_dat_pcrd_stalls_lnk0β Memory Data Request available, but no DAT Pcrd to send over CCIX per LinkEnd 0cxra_dat_pcrd_stalls_lnk1β Memory Data Request available, but no DAT Pcrd to send over CCIX per LinkEnd 1cxra_dat_pcrd_stalls_lnk2β Memory Data Request available, but no DAT Pcrd to send over CCIX per LinkEnd 2cxra_req_pcrd_stalls_lnk0β Memory Data Request available but no Req Pcrd to send over CCIX per LinkEnd 0cxra_req_pcrd_stalls_lnk1β Memory Data Request available but no Req Pcrd to send over CCIX per LinkEnd 1cxra_req_pcrd_stalls_lnk2β Memory Data Request available but no Req Pcrd to send over CCIX per LinkEnd 2cxra_ext_rsp_stallβ CHI external RSP stallcxra_ext_dat_stallβ CHI external DAT stall
π CXLA node events
cxla_rx_tlp_link0β RX TLP for Link 0cxla_rx_tlp_link1β RX TLP for Link 1cxla_rx_tlp_link2β RX TLP for Link 2cxla_tx_tlp_link0β TX TLP for Link 0cxla_tx_tlp_link1β TX TLP for Link 1cxla_tx_tlp_link2β TX TLP for Link 2cxla_rx_cxs_link0β RX CXS for Link 0cxla_rx_cxs_link1β RX CXS for Link 1cxla_rx_cxs_link2β RX CXS for Link 2cxla_tx_cxs_link0β TX CXS for Link 0cxla_tx_cxs_link1β TX CXS for Link 1cxla_tx_cxs_link2β TX CXS for Link 2cxla_avg_rx_tlp_sz_dwsβ Average RX TLP size in DWscxla_avg_tx_tlp_sz_dwsβ Average TX TLP size in DWscxla_avg_rx_tlp_sz_ccix_msgβ Average RX TLP size in CCIX messagescxla_avg_tx_tlp_sz_ccix_msgβ Average TX TLP size in CCIX messagescxla_avg_sz_rx_cxs_dw_beatβ Average size of RX CXS in DWs within a beatcxla_avg_sz_tx_cxs_dw_beatβ Average size of TX CXS in DWs within a beatcxla_tx_cxs_link_credit_backpressureβ TX CXS link credit backpressurecxla_rx_tlp_buffer_fullβ RX TLP buffer full and backpressuredcxla_tx_tlp_buffer_fullβ TX TLP buffer full and backpressuredcxla_avg_latency_process_rx_tlpβ Average latency to process an RX TLPcxla_avg_latency_form_tx_tlpβ Average latency to form a TX TLP
π SEE ALSO
pmc(3), pmc.amd(3), pmc.atom(3), pmc.core(3), pmc.core2(3), pmc.corei7(3), pmc.corei7uc(3), pmc.iaf(3), pmc.soft(3), pmc.tsc(3), pmc.westmere(3), pmc.westmereuc(3), pmc_cpuinfo(3), pmclog(3), hwpmc(4)
Go read the whole friend group, bestie π«Ά
π HISTORY
- The
pmclibrary first appeared in FreeBSD 6.0. Vintage icon behavior π - The
pmc.cmn-600driver was added in FreeBSD 14.0. Newer era, still slaying β¨
π§ AUTHORS
- The Performance Counters Library (
libpmc,-lpmc) library was written by Joseph Koshy<jkoshy@FreeBSD.org>, Oleksandr Rybalko<ray@FreeBSD.org>. Legends, honestly π - The CMN-600 PMU driver was sponsored by ARM Ltd. Shoutout π«Ά
- This manual page was written by Oleksandr Rybalko
<ray@FreeBSD.org>. Not all heroes wear capes π
and that's the whole page, bestie β Debian, December 19, 2021, PMC.CMN-600(3), ate and left no crumbs π
β¨
π¦ where this page comes from
- freebsd 15.1: base 15.1
- Copyright (c) 2021 ARM Ltd. All rights reserved
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms