Arm Coherent Mesh Network PMU¶
CMN-600 是一个可配置的网状互连,由一个交叉点 (XP) 的矩形网格组成,每个交叉点支持最多两个设备端口,各种 AMBA CHI 代理都连接到这些端口。
CMN 将分布式 PMU 设计作为其调试和跟踪功能的一部分实现。这包括每个 XP 上的本地监视器 (DTM),它可以从连接的设备节点和/或 XP 本身计数最多 4 个事件信号。这些本地计数器的溢出被累积到由主控制器 (DTC) 实现的最多 8 个全局计数器中,该主控制器为全局计数器溢出提供整体 PMU 控制和中断。
PMU 事件¶
PMU 驱动程序为整个互连注册单个 PMU 设备,请参阅 /sys/bus/event_source/devices/arm_cmn_0。多芯片系统可以通过外部 CCIX 链路连接多个 CMN - 在这种情况下,每个网格都完全独立地计数其自己的事件,并且其他 PMU 设备将被命名为 arm_cmn_{1..n}。
大多数事件都以直接基于 TRM 定义的格式指定 - “type” 选择相应的节点类型,“eventid” 选择事件编号。某些事件需要额外的占用 ID,该 ID 由 “occupid” 指定。
由于 RN-D 节点没有任何与 RN-I 节点不同的事件,因此它们被视为同一类型 (0xa),并且常见的事件模板被命名为 “rnid_*”。
循环计数器被视为属于 DTC 节点的合成事件(“type” == 0x3,“eventid” 被忽略)。
XP 事件还在 “eventid” 字段中编码端口和通道,以匹配 pmu_event_sel 寄存器的底层 pmu_event0_id 编码。事件模板以前缀命名,以涵盖所有排列。
默认情况下,每个事件都提供给定类型的所有节点的聚合计数。要定位特定节点,“bynodeid” 必须设置为 1,“nodeid” 设置为从 CMN 配置导出的适当值(如 TRM 的“节点 ID 映射”部分中所定义)。
观察点¶
PMU 还可以计数观察点事件以监视特定的微片流量。观察点被视为合成事件类型,并且像 PMU 事件一样,可以使用特定 XP 的 “nodeid” 值进行全局定位或定位。由于观察点方向在底层寄存器选择中是隐含的,因此为微片上传和下载提供了单独的事件。
微片匹配值和掩码在 config1 和 config2 中传递(分别为 “val” 和 “mask”)。“wp_dev_sel”、“wp_chn_sel”、“wp_grp” 和 “wp_exclusive” 是根据 TRM 定义为 dtm_wp_config0 指定的。当一个观察点需要匹配 REQ 或 SNP 通道上两个匹配组的字段时,它可以指定为两个事件 - 每个组一个事件 - 具有相同的非零 “combine” 值。此类组合事件对的计数将归因于主匹配。 “combine” 值为 0 的观察点事件被认为是独立的,将单独计数。