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