APM X-Gene SoC 性能监控单元 (PMU)

X-Gene SoC PMU 由各种独立的系统设备 PMU 组成,例如 L3 缓存、I/O 网桥、内存控制器网桥和内存控制器。这些 PMU 设备在架构上大致遵循与 ARM 内核 PMU 相同的模型。这些 PMU 共享相同的顶层中断和状态 CSR 区域。

PMU (perf) 驱动程序

xgene-pmu 驱动程序注册了多个 perf PMU 驱动程序。每个 perf 驱动程序都在 sysfs 中提供了其可用事件和配置选项的描述,请参阅 /sys/bus/event_source/devices/<l3cX/iobX/mcbX/mcX>/。

“format” 目录描述了 perf_event_attr 结构体中 config(事件 ID)和 config1(代理 ID)字段的格式。“events” 目录提供了可与 perf 工具一起使用的所有支持事件类型的配置模板。例如,“l3c0/bank-fifo-full/” 等同于 “l3c0/config=0x0b/”。

大多数 SoC PMU 都有一个特定的代理 ID 列表,用于监控特定数据通路的性能。例如,L3 缓存的代理可以是特定的 CPU 或 I/O 网桥。每个 PMU 都有 2 个寄存器,能够屏蔽发出请求的代理。如果设置了与代理对应的位(位号),则仅当事件是由来自该代理的请求引起时,才会对该事件进行计数。每个代理 ID 位都反向映射到 “config1” 字段中的相应位。默认情况下,将对所有代理请求进行事件计数(config1 = 0x0)。有关每个 PMU 支持的所有代理,请参阅《APM X-Gene 用户手册》。

每个 perf 驱动程序还提供一个 “cpumask” sysfs 属性,其中包含将用于处理所有 PMU 事件的单个处理器的 CPU ID。

perf 工具使用示例

/ # perf list | grep -e l3c -e iob -e mcb -e mc
  l3c0/ackq-full/                                    [Kernel PMU event]
<...>
  mcb1/mcb-csw-stall/                                [Kernel PMU event]

/ # perf stat -a -e l3c0/read-miss/,mcb1/csw-write-request/ sleep 1

/ # perf stat -a -e l3c0/read-miss,config1=0xfffffffffffffffe/ sleep 1

该驱动程序不支持采样,因此 “perf record” 将无法工作。不支持基于任务(不带 “-a” 参数)的 perf 会话。