Arm 一致性网状网络 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” 根据 dtm_wp_config0 的 TRM 定义指定。 如果观察点需要匹配 REQ 或 SNP 通道上两个匹配组的字段,则可以将其指定为两个事件 - 每个组一个 - 具有相同的非零 “combine” 值。 这种组合事件对的计数将归因于主要匹配。 “combine” 值为 0 的观察点事件被认为是独立的,并将单独计数。