对ARM CPU进行性能分析常用的方法有PMU性能监控、Top-Down性能分析、SPE采样分析等。本文介绍一下SPE采样分析的方法。
ARMv8.2引入了Statistical Profiling Extension(SPE),它提供了一种非侵入性的软件和硬件采样方法,可以对指令集架构定义的架构指令或uop进行采样分析。
SPE和PMU的对比:PMU可以分析一段代码执行中的event信息,但不能精确分析某一条指令的信息,例如这条指令有没有cache miss、指令执行的latency、分支预测的地址、指令访问的虚拟地址和物理地址、数据来源是哪一级的cache/另外一个Cluster的CPU/另一个socket的CPU?
而SPE采样分析则可以做到这些。
1. SPE介绍
SPE通过硬件采集CPU执行过程中发生的event,根据软件设置的采样间隔对指令进行采样,由硬件产生SPE的record packet并将packet写入外部内存。SPE采样的指令地址信息是非常精确的,不会漂移。而且采样记录的开销较小,因而采样率可以设置得很高。
SPE采样流程主要包括以下4个步骤:
按照采样间隔从样本总体中选一个operation(可以限定为某个EL)。采样间隔是软件通过写入PMSICR_EL1.COUNT来设置的。这个过程可以加入一些随机,伪随机或扰动到采样间隔中。
硬件trace这个operation在pipeline的执行信息,包括PC,event,时序,数据地址,即profiling operation。
在创建一个采样record之前,可以通过以下条件来过滤profile operation。
a.operation类型;
b.event;
c.latency。
创建一个包含trace信息的sample record。满足过滤条件的sample record被写入并存储在内存缓冲区中。当内存缓冲区满时,可以用软件处理这些sample record。
2. 采样record和packet
SPE采集的一个record 表示对一个operation的trace记录,一个record包含多个packets,不同的packet代表不同的信息,包括Address packet、Counter(LAT) packet、Events(EV) packet、Type(LD) packet、Timestamp(TS) packet、datasource packet、context packet等。
2.1 address packet
统计operation的地址,包括PC、Branch target address、Data access virtual address和Data access physical address。
2.2 counter packet
统计operation的latency,包括total latency,issue latency,translation latency这三种。
Issue latency:统计operation从dispatch到issue出去执行之间的cycle数。包括所有operation。
Total latency: 统计operation被dispatch到执行完成之间的cycle数。包括所有operation。
Translation latency:统计operation从虚拟地址送到MMU到MMU地址翻译完成之间的cycle数。包括所有load、store和atomic operation。
2.3 operation type packet
统计采样的operation的类型,包括Load、store、atomic、Branch或exception return等指令类型。
2.4 event packet
统计采样的operation的event。例如L1D-ACCESS、TLB-ACCESS、L2-MISS等事件。
2.5 data source packet
统计load数据的来源是哪里,例如数据是来自L1 cache、L2 cache、peer cluster、DDR、remote socket等等。
3. 使用perf工具分析SPE
可以通过perf工具来进行SPE采样分析。例如获取SPE采样数据:
perf record -e arm_spe_0/branch_filter=1,load_filter=1,store_filter=1,pa_enable=1,min_latency=10/ ./user_app
分析SPE采样数据:
perf report -D -i ./perf.data > report.txt
参考内容:
https://aijishu.com/a/1060000000398832
https://community.arm.com/arm-community-blogs/b/architectures-and-processors-blog/posts/statistical-profiling-extension-for-armv8-a
https://static.linaro.org/connect/lvc21/presentations/lvc21-302.pdf
1570