Perf Arm SPE介绍与使用

简介: 本次分享的主题是 Perf Arm-SPE 的介绍及使用,本次分享主要介绍如何在倚天 710 平台上利用 Arm-SPE 特性定位伪共享问题、分析内存访问、分析指令延时以及监控访存延时等功能。1. 背景介绍2. Arm SPE的原理3. Arm SPE在倚天服务器上的应用4. Arm SPE 更多特性与功能的探索

Perf Arm SPE介绍与使用


内容分析:

1. 背景介绍

2. Arm SPE的原理

3. Arm SPE在倚天服务器上的应用

4. Arm SPE 更多特性与功能的探索

 

01. 背景介绍

image.png

这张图展示了性能分析工具在多个架构上的对比情况。在倚天 710 架构下,若缺乏 Arm SPE 硬件特性支持,性能分析工具会存在功能缺失。例如,无法实现缓存竞争检测、内存访问分析、缓存延时监控以及指令延时分析等功能。而在 x86 架构中,凭借 Perf 等硬件特性可支持这些功能;鲲鹏 920 也有其 PMU 与 SPE 机制,其中 SPE 缺乏了监控访问主内存平均延时的能力。在倚天平台上, Arm SPE 机制的支持使这些性能分析工具得以完善。

image.png

目前,在龙蜥操作系统的倚天服务器上,利用 PMU 和 Arm SPE 等硬件特性,结合驱动与 Perf 工具,实现了多种性能诊断分析方法,如内存访问、内存带宽及跨代带宽等功能。这些功能已集成到阿里云自研的 PaaS 工具平台,并且已经在平台上进行了运行和推广。

 

02. Arm-SPF介绍


2.1 ArmSPE 原理

image.png

 Arm SPE 是 Armv8.2 硬件中的一项可选功能,它允许对 CPU 指令进行采样,并收集微操作的相关信息,如 PC 值、数据地址、数据类型以及时间戳等。为避免采集信息过多占用大量内存,SPE还添加了过滤功能。收集的指令信息有助于进行性能诊断与故障调优。 Arm SPE 的优势在于能够将采集的延时和保存的事件信息准确归因到单个指令。它通过对一条指令进行采样,并在指令执行期间捕获采样指令的信息,再写入缓冲区。在收集数据过程中,不占用 CPU 资源与 PMU 相比, Arm SPE 采集的数据更准确,不存在因中断触发再写入缓冲区的时延问题,具有无打滑、无盲点的优势。

 

2.2 Arm SPE 的采样过程

image.png

 Arm SPE 的采样过程主要分为以下步骤:默认每经过 1024 个微操作,选择其中一个作为采样样本,记录其 PC 、触发事件、延时信息、数据来源及操作类型等信息。根据用户配置的过滤条件,对采集的样本进行过滤,将所需内容写入缓冲区。被追踪的每一条微操作最终会形成一个由多个 Packet 组成的 Record ,当内存被这些 Record 填满后,会触发中断,将数据写入 Perf.Data 中。

image.png

Arm SPE 采样的微操作 Record 由多个 Packet 组成,包括地址包、事件包、操作类型包等。其中,还有一个 Counter Packet 操作在 CPU 流水线上经过的 Cycle 数统计、时间戳以及数据来源。数据来源包仅针对访存指令。

 

2.3 Arm SPE 的事件包

image.png

Arm SPE 事件包中共展示了 11 个事件,包括指令的 Retire 、异常生成,以及 L1、L2、LLC、Remote 等事件。在倚天 710 上,LLC Access 或 Refill 在硬件层面代表的是 L2 Cache,而不是 System Level Cache 。 Remote Access 在 Arm SPE SPEC 中通常表示发生了跨 Socket 访问,但在倚天实际应用中,Remote 不仅表示跨 Socket ,跨代访问也会标记为 Remote 。

 

2.4 Arm SPE 的数据来源

image.png

Arm SPE 将访存指令的数据来源分为 8 类,包括常见的 L1、L2 等。 Peer Core 指数据来源于同一个 Cluster 的另一个核的 L1 或 L2 Cache ; Local Cluster 指访问的最新数据来源于同一个 Cluster 内共享的 L3 Cache 。然而,倚天 710 采用的是 One Core One Cache 架构,不存在 Peer Core 和 Local Cluster 这两种数据来源。另外 4 类数据来源为 System Cache、Peer Cluster、Remote 和 DRAM 在倚天平台上也有特殊之处。

image.png

通过图例说明,绿色表示发送访存请求的核,红色表示要访问的最新数据所在位置,黄色表示数据所属的 SLC 或 DRAM 。在倚天平台上,若 Arm SPE 标记数据来源为 SLC ,无论 SLC 与请求核是否在同一代,都会标记为 SLC ;DRAM 同理。 Remote 有两种情况:一是请求核与数据所属 DRAM 在同一代,但最新数据在另一代核的 L1 或 L2 Cache 中;二是请求核与数据所属 DRAM 跨代,但最新数据与请求核在同一代的另一个核中。 Peer Cluster 也有两种情况,取决于请求核与 DRAM 是否在同一代,以及数据是否来源于同一代的另一个核。

 

2.5 Arm SPE 的延时数据

image.png

Arm SPE 的延时数据分为三种。第一种是 Total Latency ,表示一个微操作从被分派进入等待发射队列,到最终执行完成所经过的 Cycle 总数,所有微操作都有此延时数据。第二种是发射延时,指微操作被分解进入发射队列,到最终发射出去执行变为执行状态期间的延时,所有微操作也都具备该数据。第三种是 Translation Latency,仅针对 Load、Store 和 Atomic operations 这三种访存操作,指访问的数据从虚拟地址进入 MMU ,转换成可访问地址所经过的时间

 

03. Arm SPE在倚天服务器上的应用

image.png

Perf 工具可利用 Arm SPE 的事件来分析程序的访存行为。通过对样本事件进行分类,可将每类指令及对应的每行代码,按发生的事件类别进行划分,从而了解哪些指令发生了较为严重的某类事件,比如 Remote 事件。同时,还有汇总功能,还能将所有访存指令汇总到 Memory 分类中,这是 Perf 工具的一项功能。

利用 Arm SPE 的数据来源, Perf 工具还可实现缓存行竞争分析功能。 Arm SPE 数据来源的 8 类中, L1、L2、System Cache、DRAM 这四类可认为未发生缓存行竞争,而 Peer CoreLocal Cluster、Peer Cluster、Remote 这四类可认为发生了缓存行竞争行为,其中前三种可以认为发生了 Local Snoop  Remote Snoop 行为。通过对数据来源进行分类,能够知晓哪些指令及对应的代码行发生了缓存行迁移动作,进而分析代码并优化。

image.png

例如,利用 Perf 检测伪共享。在多线程编程中,不同线程修改位于同一缓存行内的不同变量,会导致不必要的缓存一致性流量,严重影响性能,尤其是产生较多 Remote 行为时。通过 Perf c2c Record 采集需分析的二进制程序,再利用 Perf c2c Report 解析采集信息。解析报告可显示 0×420140  0×420100 发生严重 Remote 缓存行竞争行为的地址,选择其中一个缓存行进一步分析,可得知对应的代码地址及源码位置。这里面显示 False_Sharing C:175 可以对应到在源码文件进行分析的,发现这个特定代码发生了严重的 Remote 缓存行竞争行为。具体可以分析是否是由于访问的变量所在结构体未进行缓存行对齐,导致不同变量处于同一缓存行,频繁读写时引发竞争。优化方法是将无关变量分开到不同缓存行。利用此 Perf 伪共享检测方法优化倚天平台上的 x265 编码器,其性能指标 FPS 提升了 8.6 %。

image.png

Perf 工具还可通过 Perf Memory Record 采集应用程序的访存数据。以一个例子说明首先将所有指令按发生的事件分类,图中最左边一列代表采集到的样本数量。通过分析发现,其中发生 Remote Access 的只有 720 但是 LLC Miss 有 2000 条。选择 LLC Miss (在倚天平台即 L2 Cache Miss )进一步分析,发现某些指令发生 L2 Miss 较多,占比约百分百。再进一步查看 Remote Access ,可展示该指令类型的总延时信息,从而了解程序中某条指令经过的延时,进行具体分析。

image.png

关于指令延时的应用, Arm SPE 具备访存延时监控能力,这里的访存延时指访问主内存的延时。在业务中,通过获取访存延时可判断机子是否访存过载,若达到拐点值,需对服务器上的业务进行迁移。 x86 平台有统计访存延时的 PMU ,倚天平台虽未实现特定的 DDRC PMU 来监控访存延时,但 Arm SPE 可提供指令级别的访存延时。由于 SPE 在核内,而我们需获取 DDR 的访问延时,因此采用如下方法:若指令为 Load 指令,且数据来源为 DRAM ,则其访存延时约等于总延时减去发射阶段的等待延时,再减去地址翻译的延时。但是 Arm SPE 应用到线上业务存在两个问题:一是 4095 限制, Arm SPE 记录的访存延时最大只能到 4095 个 SQL ,因仅有 12 位存储该信息。但经实验总结,日常业务应用中超过 4095 个 SQL 的访存指令占比相对较小,若出现此类情况,可表明服务器访存已过载,此问题可忽略。二是线上 Arm SPE 业务采集开销问题, Arm SPE 提供的过滤功能可减少数据量,还可从采集核和采集时间策略上进一步降低内存和 CPU 开销。例如,每 8 个核选取一个核作为代表,以该核采集的指令访存延时代表整机延时,减少采集数量;从采集时间上,采 5 秒代表 30 秒内的访存平均延时,进一步减少数据量。

image.png

实际应用中,原生 Perf 工具实现 Arm SPE 功能流程复杂,需先采集数据,遍历诸多组件,解析用户输入参数,存储数据到文件,再通过 Report 解析,最后通过脚本提取实际数据来源为 DRAM 的指令延时。此过程启动开销大、采集数据量多、分布解析不实时且涉及多重拷贝,无法直接应用于线上业务。因此,我们设计了另一个工具 Pass Light SPE 。其步骤为:直接从二进制程序协定要采集命令对应的寄存器,识别 Armv8 上的 Arm SPE 设备,配置过滤条件,如仅采集 Load 指令且数据来源为 DRAM ,进一步叠加条件,如仅采集 L2 Miss 之后且总延时超过 150 个纳秒的数据。配置好过滤条件后提取内核数据,将采集的数据放入内核包,直接提取内核包中数据来源为 DRAM 的 Load 指令延时并计算,按代输出平均延时。此方法启动开销小、数据量小,可实时并且减少很多拷贝步骤,可以看出它能按代显示每个代里面的平均延时及采集到的样本数,单位为纳秒。

image.png

此外, Arm SPE 还有很多使用方法,通过叠加多种事件类型和延时过滤办法,可采集到所需数据,减少数据量。例如,可采集延时大于 100 个 SQL 且可以叠加指令为 Retire 的样本。通过这样的叠加可以采集到想要的数据,减少数据量。

 

04. Arm-SPE 更多特性与功能的探索

image.png

Arm SPE 还有许多信息可深入挖掘。例如,分支跳转信息可应用于 Auto ID 编译优化; Arm SPE 的物理地址信息可用于冷热内存识别优化;时间戳和 PC 地址信息可应用于 Auto Prefetch 编译优化。目前这些应用我们仍在探索阶段,在此仅作抛砖引玉。

相关文章
|
存储 缓存 监控
安谋科技(Arm China)马闯:Arm架构下性能分析与优化介绍
2023年9月19日,系列课程第九节《Arm®架构下性能分析与优化介绍》正式上线,由安谋科技 (Arm China)主任工程师马闯主讲,内容涵盖:Arm架构下性能监控单元 (PMU) 介绍、Arm统计性能分析扩展 (SPE) 介绍、Arm性能分析工具介绍、Arm架构下性能优化案例分享,本期节目在阿里云官网、阿里云微信视频号、阿里云钉钉视频号、InfoQ官网、阿里云开发者微信视频号、阿里云创新中心直播平台 & 微信视频号同步播出,同时可以点击【https://developer.aliyun.com/topic/ecs-yitian】进入【倚天实例迁移课程官网】了解更多内容。
|
缓存 编译器
BOLT 二进制反馈优化技术
大型应用的代码往往达到数十甚至上百MB,这导致在程序执行时缓存机制无法充分利用,导致大量时间花费在CPU和内存链路上。通过对热点函数的布局进行优化,我们可以更好地利用CPU cache,从而获得较为可观的性能提升。针对这一问题,在编译技术上有PGO和Bolt两种解决办法,两者都是一种通过收集程序在运行时如跳转,调用关系,函数热度等执行信息,这些收集到的程序运行情况数据(profile data),可以更好地指导一些程序优化的策略,如是否对函数进行内联,以及对基本块和函数布局的排布来提高特定场景下的程序性能。
2860 2
BOLT 二进制反馈优化技术
|
数据采集 机器学习/深度学习 监控
Arm Coresight 介绍
Coresight 是 ARM 架构上的一款嵌入式系统监控和调试工具,能够为系统管理员和开发人员提供便捷的系统监控和调试功能。该平台可以实时追踪和分析处理器上的活动,以深入了解潜在的性能瓶颈和问题。本文将介绍Coresight的概念、优势及其安装、配置、故障排除和调试等方面的内容,并探讨其未来发展方向和重要性。
2364 1
|
11月前
|
数据采集 存储 NoSQL
AArch64架构调用链性能数据采集原理
本次分享的主题是AArch64架构调用链性能数据采集原理,由阿里云苏轩楠分享。主要分为五个部分: 1. 术语解释 2. Frame Pointer RegisterStack Unwind 3. Dwarf-based Stack Unwind 4. /BRBE/CSRE Stack Unwind 5. Kernel-space Stack Unwind&eBPF Unwinders
286 0
|
11月前
|
监控 安全 算法
龙蜥衍生版KeyarchOS国密应用、eBPF安全技术实践介绍|龙蜥大讲堂107期
龙蜥衍生版KeyarchOS国密应用及eBPF安全技术实践介绍。本次分享由浪潮信息的霍文和甄鹏主讲,涵盖全栈国密、国密密钥证书、国密通信等内容,并介绍了基于eBPF技术的新一代零侵入安全防御组件KSecure。通过实际案例展示了敏感信息传输加密、虚拟机热迁移等应用场景,以及如何利用eBPF实现进程注入检测等安全功能。该技术方案有效提升了操作系统的安全性与合规性,为服务器提供了强大的安全保障。
270 12
龙蜥衍生版KeyarchOS国密应用、eBPF安全技术实践介绍|龙蜥大讲堂107期
|
11月前
|
监控 算法 Linux
高效可靠的处理器微体系结构性能测量技术
本次分享的主题是高效可靠的处理器微体系结构性能测量技术,由华东师范大学系统优化实验室的博士研究生刘通宇分享。主要分为两个部分: 1. 关于Core PMU的工作 2. ARM架构下的的内存带宽质量问题
218 0
|
11月前
|
缓存 前端开发 Linux
PAS工具分享 - FrameScope与RTRadar
本次分享的主题是PAS工具分享 - FrameScope与RTRadar,由阿里云基础软件系统研发团队工程师刘依男、苏峰分享。主要分为三个部分: 1. PAS性能分析套件综述 2. PAS FrameScope 3. PAS RTRadar
260 0
|
弹性计算 Linux 编译器
CoreBolt——在倚天上基于 Coresight 做 BOLT 优化
CoreBolt 是一种倚天平台的性能优化解决方案。CoreBolt 通过 Coresight 在程序运行时采集程序运行信息,对程序的热代码和冷代码进行区分,并通过 BOLT 对程序进行代码段重排,从而提升程序代码的局部性,减少程序运行过程中由 CPU iCache miss 和 iTLB miss 引发的性能下降,提升程序的整体性能。
1598 6
|
监控 Linux 测试技术
【 C/C++ 性能分析工具 CPU 采样分析器 perf 】掀开Linux perf性能分析的神秘面纱
【 C/C++ 性能分析工具 CPU 采样分析器 perf 】掀开Linux perf性能分析的神秘面纱
879 0