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 会话。