ARM 高速缓存一致性网络

CCN-504 是一种环形总线互连,由 11 个交叉点 (XP) 组成。每个交叉点支持多达两个设备端口,因此节点(设备)0 和 1 连接到交叉点 0,节点 2 和 3 连接到交叉点 1,依此类推。

PMU (perf) 驱动程序

CCN 驱动程序注册了一个 perf PMU 驱动程序,它在 sysfs 中提供了可用事件和配置选项的描述,请参阅 /sys/bus/event_source/devices/ccn*。

“format” 目录描述了 perf_event_attr 结构体中 config、config1 和 config2 字段的格式。“events” 目录为所有已记录的事件提供了配置模板,可与 perf 工具一起使用。例如,“xp_valid_flit” 等同于 “type=0x8,event=0x4”。其他参数必须明确指定。

对于源自设备的事件,“node” 定义了其索引。

交叉点 PMU 事件需要 “xp”(索引)、“bus”(总线编号)和 “vc”(虚拟通道 ID)。

基于交叉点观察点的事件(特殊的 “event” 值 0xfe)除了上述 “xp” 和 “vc” 外,还需要 “port”(设备端口索引)、“dir”(发送/接收方向)、比较器值(“cmp_l” 和 “cmp_h”)以及 “mask”(比较器掩码的索引)。

由于配置值数量有限,掩码与事件描述分开定义在 “cmp_mask” 目录中,其中前 8 个可由用户配置,另外 4 个针对最常见的使用场景进行了硬编码。

周期计数器由 “type” 值 0xff 描述,不需要任何其他设置。

该驱动程序还提供了一个 “cpumask” sysfs 属性,其中包含一个 CPU ID,该 CPU 将用于处理所有 CCN PMU 事件。建议用户空间工具在此处理器上请求事件(如果不是,perf_event->cpu 值无论如何都会被覆盖)。如果此处理器下线,事件将迁移到另一个处理器,并且该属性会更新。

perf 工具使用示例

/ # perf list | grep ccn
  ccn/cycles/                                        [Kernel PMU event]
<...>
  ccn/xp_valid_flit,xp=?,port=?,vc=?,dir=?/          [Kernel PMU event]
<...>

/ # perf stat -a -e ccn/cycles/,ccn/xp_valid_flit,xp=1,port=0,vc=1,dir=1/ \
                                                                       sleep 1

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