 |
|
| |
PMC.CMN-600(3) |
FreeBSD Library Functions Manual |
PMC.CMN-600(3) |
pmc.cmn-600 —
Library for accessing the Arm CoreLink CMN-600 Coherent
Mesh Network Controller performance counter events
Performance Counters Library (libpmc,
-lpmc)
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.
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
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 variable hint.cmn600.{unit}.domain={value}. Where
{unit} is a cmn600 device 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.
CMN-600 PMU counters support the following capabilities:
Capability |
Support |
PMC_CAP_CASCADE |
No |
PMC_CAP_EDGE |
No |
PMC_CAP_INTERRUPT |
Yes |
PMC_CAP_INVERT |
No |
PMC_CAP_READ |
Yes |
PMC_CAP_PRECISE |
No |
PMC_CAP_SYSTEM |
Yes |
PMC_CAP_TAGGING |
No |
PMC_CAP_THRESHOLD |
Yes |
PMC_CAP_USER |
No |
PMC_CAP_WRITE |
Yes |
Event specifiers for these PMCs support the following common
qualifiers:
nodeid= nodeid
- Request counting for specific event at node
nodeid.
occupancy= value
- Filtering by occupancy type.
xpport= port
- Count only events matched by port. (East, West,
North, South, devport0, devport1 or numeric 0 to 5)
xpchannel= channel
- Filter events by XP node channel. (REQ, RSP, SNP, DAT or 0, 1, 2, 3)
These PMCs are named using a class name prefix of
“CMN600_PMU_ ”.
The following list of PMC events are available:
- 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 requests
- hnf_pocq_reqs_recvd
- Counts number of requests received by HN
- hnf_sf_hit
- Counts number of SF hits
- hnf_sf_evictions
- Counts number of SF eviction cache invalidations initiated
- hnf_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 way
- hnf_mc_retries
- Counts number of retried transactions by the MC
- hnf_mc_reqs
- Counts number of requests sent to MC
- hnf_qos_hh_retry
- Counts number of times a HighHigh priority request is protocol-retried at
the HN-F
- hnf_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 allocation
- hnf_pocq_atomic_addrhaz
- Counts number of POCQ address hazards upon allocation for atomic
operations
- hnf_ld_st_swp_adq_full
- Counts number of times ADQ is full for Ld/St/SWP type atomic operations
while POCQ has pending operations
- hnf_cmp_adq_full
- Counts number of times ADQ is full for CMP type atomic operations while
POCQ has pending operations
- hnf_txdat_stall
- Counts number of times HN-F has a pending TXDAT flit but no credits to
upload
- hnf_txrsp_stall
- Counts number of times HN-F has a pending TXRSP flit but no credits to
upload
- hnf_seq_full
- Counts number of times requests are replayed in SLC pipe due to SEQ being
full
- hnf_seq_hit
- Counts number of times a request in SLC hit a pending SF eviction in
SEQ
- hnf_snp_sent
- Counts number of snoops sent including directed, multicast, and SF back
invalidation
- hnf_sfbi_dir_snp_sent
- Counts number of times directed snoops were sent due to SF back
invalidation
- hnf_sfbi_brd_snp_sent
- Counts number of times multicast snoops were sent due to SF back
invalidation
- hnf_snp_sent_untrk
- Counts number of times snooped were sent due to untracked RNF's
- hnf_intv_dirty
- Counts number of times SF back invalidation resulted in dirty line
intervention from the RN
- hnf_stash_snp_sent
- Counts number of times stash snoops were sent
- hnf_stash_data_pull
- Counts number of times stash snoops resulted in data pull from the RN
- hnf_snp_fwded
- Counts number of times data forward snoops were sent
- 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.
- rnd_s0_rdata_beats
- Number of RData beats, RVALID and RREADY, dispatched on port 0. This is a
measure of the read bandwidth, including CMO responses.
- rnd_s1_rdata_beats
- Number of RData beats, RVALID and RREADY, dispatched on port 1. This is a
measure of the read bandwidth, including CMO responses.
- rnd_s2_rdata_beats
- Number of RData beats, RVALID and RREADY, dispatched on port 2. This is a
measure of the read bandwidth, including CMO responses.
- rnd_rxdat_flits
- Number of RXDAT flits received. This is a measure of the true read data
bandwidth, excluding CMOs.
- rnd_txdat_flits
- Number of TXDAT flits dispatched. This is a measure of the write
bandwidth.
- rnd_txreq_flits_total
- Number of TXREQ flits dispatched. This is a measure of the total request
bandwidth.
- rnd_txreq_flits_retried
- Number of retried TXREQ flits dispatched. This is a measure of the retry
rate.
- rnd_rrt_occ_ovfl
- All entries in the read request tracker are occupied. This is a measure of
oversubscription in the read request tracker.
- rnd_wrt_occ_ovfl
- All entries in the write request tracker are occupied. This is a 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. This is the measure of write cancel
rate.
- rnd_s0_wdata_beats
- Number of WData beats, WVALID and WREADY, dispatched on port 0. This is a
measure of write bandwidth on AXI port 0.
- rnd_s1_wdata_beats
- Number of WData beats, WVALID and WREADY, dispatched on port 1. This is a
measure of write bandwidth on AXI port 1.
- rnd_s2_wdata_beats
- Number of WData beats, WVALID and WREADY, dispatched on port 2. This is a
measure of write bandwidth on AXI port 2.
- rnd_rrt_alloc
- Number of allocations in the read request tracker. This is a measure of
read transaction count.
- rnd_wrt_alloc
- Number of allocations in the write request tracker. This is a 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 mix of ordered/unordered traffic.
- rnd_rdb_ord
- Number of cycles for which Read Data Buffer state machine is in ordered
Mode.
- rni_s0_rdata_beats
- Number of RData beats, RVALID and RREADY, dispatched on port 0. This is a
measure of the read bandwidth, including CMO responses.
- rni_s1_rdata_beats
- Number of RData beats, RVALID and RREADY, dispatched on port 1. This is a
measure of the read bandwidth, including CMO responses.
- rni_s2_rdata_beats
- Number of RData beats, RVALID and RREADY, dispatched on port 2. This is a
measure of the read bandwidth, including CMO responses.
- rni_rxdat_flits
- Number of RXDAT flits received. This is a measure of the true read data
bandwidth, excluding CMOs.
- rni_txdat_flits
- Number of TXDAT flits dispatched. This is a measure of the write
bandwidth.
- rni_txreq_flits_total
- Number of TXREQ flits dispatched. This is a measure of the total request
bandwidth.
- rni_txreq_flits_retried
- Number of retried TXREQ flits dispatched. This is a measure of the retry
rate.
- rni_rrt_occ_ovfl
- All entries in the read request tracker are occupied. This is a measure of
oversubscription in the read request tracker.
- rni_wrt_occ_ovfl
- All entries in the write request tracker are occupied. This is a 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. This is a
measure of write bandwidth on AXI port 0.
- rni_s1_wdata_beats
- Number of WData beats, WVALID and WREADY, dispatched on port 1. This is a
measure of write bandwidth on AXI port 1.
- rni_s2_wdata_beats
- Number of WData beats, WVALID and WREADY, dispatched on port 2. This is a
measure of write bandwidth on AXI port 2.
- rni_rrt_alloc
- Number of allocations in the read request tracker. This is a measure of
read transaction count.
- rni_wrt_alloc
- Number of allocations in the write request tracker. This is a 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 mix of ordered/unordered traffic.
- rni_rdb_ord
- Number of cycles for which Read Data Buffer state machine is in ordered
Mode.
pmc(3),
pmc.atom(3),
pmc.core(3),
pmc.core2(3),
pmc.corei7(3),
pmc.corei7uc(3),
pmc.iaf(3),
pmc.iaf(3),
pmc.k7(3),
pmc.k8(3),
pmc.soft(3),
pmc.tsc(3),
pmc.westmere(3),
pmc.westmereuc(3),
pmc_cpuinfo(3),
pmclog(3),
hwpmc(4)
The pmc library first appeared in
FreeBSD 6.0.
The pmc.cmn-600 driver was added in
FreeBSD 14.0.
The Performance Counters Library (libpmc,
-lpmc) library was written by Joseph Koshy
<jkoshy@FreeBSD.org>,
Oleksandr Rybalko
<ray@FreeBSD.org>.
The CMN-600 PMU driver was sponsored by ARM Ltd. This manual page was written
by Oleksandr Rybalko
<ray@FreeBSD.org>.
Visit the GSP FreeBSD Man Page Interface. Output converted with ManDoc.
|