【系列三:DevKit性能分析工具】第一讲:鲲鹏性能分析工具介绍学习笔记
【系列三:DevKit性能分析工具】第一讲:鲲鹏性能分析工具介绍学习笔记
工具的目标
业界已经有非常丰富的系统性能分析工具,而鲲鹏性能分析工具的目标是在提供业界工具的能力之外,还实现几点独特功能:
-
基于鲲鹏处理器,提供软硬件结合分析能力,采集和分析硬件性能指标,以及硬件性能在软件层的表现,让用户更加全面的了解整个系统的运行状况。
-
系统化的分析建立各层指标之间的关联关系、并以用户视角呈现这些指标和关系方便用户更易于发现问题。
-
结合华为在鲲鹏处理器上的性能优化经验,给出优化思路和建议,帮忙用户快速定位和修复问题。
-
实现分析过程管理,例如:优化结果对比、优化效果标记、优化过程记录等。
工具的功能
工具的目标用户
软件架构
工具从软件逻辑上分成Analysis Server和Agent两大部分:
-
Analysis Server:主要作用是实现性能数据分析及分析结果呈现
-
Agent:主要作用是实现性能数据采集。
软件部署
部署方式
硬件/OS要求
功能原理
全景分析
全景分析原理
基于USE (utilization、saturation、errors)性能分析方法,获得系统资源(CPU、内存、I/0等)的使用率、饱和度、错误等指标,以此识别系统瓶颈。
-
使用率:在规定的时间间隔内,资源用于服务工作的时间百分比。虽然资源繁忙但是资源还有能力接受更多的工作,不能接受更多工作的程度被视为饱和度。
-
饱和度:资源不能在服务更多额外工作的程度,通常有等待队列。
-
错误:错误事件的个数。
USE指标
CPU重点指标解读
内存重点指标解读
存储IO重点指标解读
网络IO重点指标解读
重点系统配置解读
进程/线程性能分析
具体分析指标:
重点指标分析解读:
性能影响:
1、在切换次教较多的情况下,很容易导题CPU将大量时间耗费在寄器、内核械以及拟内存等资源的保存和恢复上,进而大大编短了真工运行进程的时间。
2、切换后虚拟内存更新,TLB也需要刷新,内存的访问会勒之变侵,多处理盟系统上,缓存是被多个处理共享的,所以还会影响共享银存的具他处理器的进程,减少不必要的系统调用、中断,可以有效的降低进程上下文切换,提高进程性能。
热点函数分析
分析原理为基于cpucycles事件的数据进行分析:
- 热点函数和热点指令是基于CPU Cycle事件中断时的调用栈信息标识的。在一段时间内,某个函数的某个指令被采集的越多,就认为越热。
- 以调用栈信息反映调用关系,绘制火焰图;
- 反汇编目标文件获取汇编指令。
- 通过符号表和DEBUG信息关联源码;
举例说明如下:
微架构分析
基于鲲鹏处理器PMU(Performance Mntor Unit)事件,建立处的Top-Down模型,获得指在CPU流水线上的运行况,可以帮用户快速定位当前应用在CPU上的性能瓶颈,用户可以有针对性地修改自己的程序,以充分利用当前的硬件资源。
分析原理是根据一条指令在流水线上运行时,需要经过取指、译码、执行、回写等多个阶段,处理器在每个阶段都设定了一些PMU统计事件,通过采集这些事件,并结合一定模型,就可以表示出指令在CPU流水线上的运行情况。
基于最新的PMU采集逻辑,对各PMU数据梳理整合分析:
1、Retiring:指正常退休的指令数量;
2、BadSpeculation:反映了软件中测失败的比例,主要包括两个方面: 1)分支测失败2) machine clear。
3、Frontend Bound:反映前端prefetch,decode流程是否产生空槽
4、Backend Bound:代表的是CPU的如下指标1)运算/执行能力;2)资源数量3)访存能力。
举例分析如下:
访存分析
鲲鹏处理器是NUMA架构,并存在三级Cache机制,CPU核访问数据时,存在本地、跨片、跨带访问Cache和内存的情况。不同的访问路径,在时延和带宽上都相差很大,并严重影响系统和程序性能。
访存统计分析主要项目:
其主要原理为基于处理器的Core和Uncore事件统计CPU核访问Cache和DDR的性能数据分析对缓存和内存的访问次数命中率、带宽等情况。
这里主要介绍下Miss事件分析和伪内存分析。
Miss事件分析原理为基于ARM SPE(tatistical Profling Extension)能力实现。SP是针对指进行采样,同时记录一些触发事件的信息,包括精确的PC指针信息。利用该项能力可以用于对应用程序进行LLC Miss,TLB Mis,Remote Access,Long Latency Load等Miss类事件分析,并精确的关联到造成该事件的代码。相对于PMU事件,SPE可以解决PMU事件无法精确对应到PC指针的问题。
伪共享分析也是基于SPE能力实现。通过采样Load指令和store指令,并匹配他们在相同时间点对cacheline的的访问情况,如果存在同时读写写写同一个cacheline的情况,就可能发生伪共享。
对比,提出伪共享优化建议:
- 对于写的很频影的变量应该在自己独立的Cache line。可以据此进行对齐调整让它们不那么竞争,运行更快,也能让其它的共享了该Cache Line的变量不被拖慢。
- 跨越了多个Cache Line的热的Lock或Mutex,需要考虑Cache Line对齐的
- 读多写少的变量,可以将这些变量组合到相同或相邻的Cache Line。
- 一段代码,它不在某一行Cache Line上竞争严重,但是它却在很多Cache Line上党争,这样的代码段也需要优化。
- 多进程程序访问共享内存时,同样要关注Cache Line上竞争。
举例说明如下:
IO分析
其大体原理总结如下:
- 在块设备层,通过ftrace工具跟踪内核的tracepoint事件,得到每个/0操作的全部信息。
- 通过关联这些tracepoint事件,分析得到操作数据大小、操作时延等信息。针对一段时间内的/0操作进行统计分析,进一步得到数据块分布、操作时延分布、数据大小分布等等信息。
- tracepoint事件只能反映到内核针对1/0的处理,而无法反映应用层的处理(非direct方式)。所以通过获取应用层1/0API调用信息,形成内核层与应用层处理的简单映射,指导应用层的优化,例如通过某个段时间的数据块分布是连续还是随机,优化对应应用层的I/o请求。
- 支持获取自研盘内部性能数据。
举例分析如下:
资源调度分析
其原图展示如下图所示:
举例分析如下:
锁与等待分析
HPC场景
内存诊断
其原理介绍如下图所示:
此外,调优助手采集的数据覆盖OS、应用、硬件等系统各层的配置和性能指标,并根据硬件资源的消耗,来关联消耗这些硬件资源的软件信息,再从这些软件信息,来查看软件对其他的硬件资源的消耗,从而推断出性能瓶颈。将数据从应用消耗、物理消耗以及硬件关联在一起。可以用于系统性能、热点函数分析等等。
Java性能分析
总结
这次内容非常多,要好好看看,搞一搞。
- 点赞
- 收藏
- 关注作者
评论(0)