第一讲—鲲鹏性能分析工具介绍
鲲鹏性能分析工具是一个工具集,包含调优助手、系统性能分析工具、Java性能分析工具、系统诊断工具。
独特功能:
1、基于鲲鹏处理器,提供软硬件结合分析能力,采集和分析硬件性能指标,以及硬件
性能在软件层的表现,让用户更加全面的了解整个系统的运行状况。
2、系统化的分析建立各层指标之间关联关系、并以用户视角呈现这些指标和关系,方便用户更易于发现问题。
3、结合华为在鲲鹏处理器上的性能优化经验,给出优化思路和建议,帮忙用户快速定位和修复问题。
4、实现分析过程管理,例如:优化结果对比、优化效果标记、优化过程记录等。

一、软件构架
工具从软件逻辑上分成Analysis Server和Agent两大部分
Analysis Server:主要作用是实现性能数据分析及分析结果呈现。
·Agent:主要作用是实现性能数据采集。
二、软件部署
单机部署方式、混合部署方式
三、全景分析
1、展示服务器系统及其各个子系统的TOPO结构及其配置。方便用户快速了解系统配置,及是否存在配置不合理的点,例如内存条配置位置。
2、基于USE性能分析方法,针对系统CPU、内存、磁盘IO、网络IO资源的运行情况,获得它们的使用率、饱和度、错误等指标,以此识别系统瓶颈。
3、综合分析系统性能和系统配置情况,给出检测到的性能瓶颈点,并给出优化建议和修改方法。
4、针对大数据、数据库、分布式存储场景的硬件配置、系统配置和组件配置进行检查并显示不是最优的配置项,同时分析给出典型硬件配置及其软件版本信息。
原理:基于USE(utilization、saturation、errors)性能分析方法,获得系统资源(CPU、内存、I/O等)的使用率、饱和度、错误等指标,以此识别系统瓶颈。
使用率:在规定的时间间隔内,资源用于服务工作的时间百分比。虽然资源繁忙。但是资源还有能力接受更多的工作,不能接受更多工作的程度被视为饱和度。
饱和度:资源不能在服务更多额外工作的程度,通常有等待队列。
错误:错误事件的个数。

四、CPU重点指标解读
1、%sys :
该指标表示CPU花了多少比例的时间在内核空间运行,分配内存、IO操作、创建子进程等都是内核操作,所以当该指标较高时,建议:
(1)检查系统上是否存在大量I0操作,如果存在建议更换高性能IO设备,或减少IO操作
(2)如果IO操作不多,建议检查内核、驱动是否有问题。
2、%iowait:
当该指标占用率过高的时候,通常意味着某些程序的IO操作效率很低,或者IO对应设备的性能很低以至于读写操作需要很长的时间来完成,所以当该指标较高时,建议议更换高性能IO设备或减少IO操作。

五、内存重点指标解读

六、存储IO重点指标解读
- 如果%util接近100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。
- 如果svctm比较接近await,说明!/o几乎没有在!/o队列中等待;如果await远大于svctm,说明I/O队列太长,IO响应太慢,则需要进行必要优化。
如果avgqu-sz比较大,也表示有大量IO在等待。
七、网络IO重点指标分析解读
1、rxdrop/s|txdrop/s:表示数据包已经进入了Ring Buffer,但是由于内存不够等系统原因,导致最终中被丢弃。
2、rxfifo/s|txfifo/s:表示数据包没到Ring Buffer就被网卡物理层给丢弃了。其中,CPU无法及时处理中断是造成Ring Buffer满的原因之一。
八、重点系统配置解读

九、重点指标分析解读

十、热点函数分析
火焰图的含义:y轴表示调用栈,每一层一个函数。调用栈越深,火焰就越高,顶部就是正在执行的函数,下方都是它的父函数。
x轴表示抽样数。如果一个函数在x轴占据的宽度越宽,就表示它被抽到的次数越多,即执行的时间越长。
原理:基于CPU Cycles事件的数据进行分析
1,热点函数和热点指令是基干cpU Cvcle事件中断时的调用栈信息标识的。在一段时间内,某个函数的某个指令被采集的越多,就认为越热;
2.以调用栈信息反映调用关系,绘制火焰图:
3.反汇编目标文件获取汇编指令;
4.通过符号表和DEBUG信息关联源码;
十一、微架构分析
基干鲲鹏外理器PMU(Performance Monitor Unit)事件,建立鲲鹏外理器的Top-Down模型,获得指令在CPU流水线上的运行情况,可以帮助用户快速定位当前应用在CPU上的性能瓶颈,用户可以有针对性地修改自己的程序,以充分利用当前的硬件资源。
原理:一条指令在流水线上运行时,需要经过取指、译码、执行、回写等多个阶段,处理器在每个阶段都设定了一些PMU统计事件,通过采集这些事件,并结合一定模型就可以表示出指令在CPU流水线上的运行情况。
基于最新的PMU采集逻辑,对各PMU数据梳理整合分析:
1、Retiring;指正常退休的指含数量;
2、Bad Speculation:反映了软件中预测失败的比例,主要包括两个方面:(1)分支预测失
(2)machine clear
3、Frontend Bound:反映前端prefetch,decode流程是否产生空槽。
4、Backend Bound:代表的是CPU的如下指标(1)运算/执行能力;(2)资源数量;(3)访存能力。
十一、访存分析
鲲鹏处理器是NUMA架构,并存在三级Cache机制,CPU核访问数据时,存在本地,跨片,跨带访问Cache和内存的情况。不同的访问路径,在时延和带宽上都相差很大,并严重影响系统和程序性能。 工具基于CPU访问缓存和内存的事件,分析访存过程中可能的性能瓶颈,给出造成这些性能问题的可能原因及优化建议,具体包括三个功能:访存统计分析,Miss事件分析、伪共享分析。
原理:基于处理器的Core和Uncore事件统计CPU核访问Cache和DDR的性能数据,分析对缓存和内存的访问次数、命中率、宽带等情况。
- 支持四个维度(进程、线程、模块、CPU)展示
- 可以展示事件发生的时间点
- 针对每种事件都最能关联到函数及其调用线
- 支持八种不同层级归并显示,方便从不同维度查看问题
原理:Miss事件分析基于ARM SPE(Statistical Profiling Extension)能力实现。SPE是针对指令进行采样,同时记录一些触发事件的信息,包括精确的PC指针信息。利用该项能力可以用于对应用程序进行LLCMiss,TLB Miss,Remote Access,Long Latency Load等Miss类事件分析,并精确的关联到造成该事件的代码。相对于PMU事件,SPE可以解决PMU事件无法精确对应到PC指针的问题。
伪共享分析能得到发生伪共享的次数和比例、指令地址和代码行号、NUMA节点等信息。基于这些信息,用户便可以有针对性地修改自己的程序,降低发生伪共享的几率,提高程序处理性能。
原理:伪共享分析也是基于SPE能力实现。通过采样Load指令和Store指令,并匹配他们在相同时间点对cacheline的的访问情况,如果存在同时读写、写写同一个cacheline的情况,就可能发生伪共享。
伪共享优化建议:
1.对于写的很频繁的变量应该在自己独立的Cache line。可以据此进行对齐调整
让它们不那么竞争,运行更快,也能让其它的共享了该Cache Line的变量不被拖慢。
2.跨越了多个Cache Line的热的Lock或Mutex,需要考虑Cache Line对齐的。
3.读多写少的变量,可以将这些变量组合到相同或相邻的Cache Line。
4.一段代码,它不在某一行Cache Line上竞争严重,但是它却在很多Cache Line上竞争,这样的代码段也需要优化。
5.多进程程序访问共享内存时,同样要关注Cache Line上竞争。

十二、IO分析
基于IO操作数据分布情况,判断是随机操作还是顺序操作,并给出相应的优化建议。
十三、资源调度分析
- 进程/线程调度信息,识别线程是否频繁上下文切换;CPU是否能及时调度。
- 分析进程/线程在NUMA节点的切换情况,对于频繁切换,给出绑核优化建议。
- 分析进程/线程在各个时间点的运行状态,如:wait-blocked、wait-for-cpu和running,能方便识别频繁上下文切换的线程。
- 分析CPU核在各个时间点的运行状态,如:idle、running等。如果是running状态,能关联在cpu核上运行的进程/线程信息。
- 高亮显示某个线程在各个CPU核上的运行情况
原理:采集内核CPU调度事件数据,从进程/线程的角度排列各个事件,计算出各个事件之
间的时间差,并标记对应的状态。
采集内核CPU调度事件数据,从CPU核的角度排列各个事件,计算出各个事件之间的时间差,并标记对应的状态。
十四、锁与等待分析
基于采样的热点函数,分析glibc的锁与等待函数(包括sleep、usleep、mutex、cond、spinlock、rwlock、semaphore等),关联到其归属的进程和调用点,并根据当前已有的优化经验给出优化建议。
十五、HPC场景
OpenMP/MPI分析通过采集系统的PMU事件并配合采集面向OpenMP和MPI应用的关键指标,帮助用户精准获得Parallelregion及Barrier-to-Barrier的串行及并行时间、校准的2层微架构指标、指令分布及 L3的利用率和内存带宽等信息。:
1.OpenMP运行时指标,新增细化指标 分析对象
2.MPI运行时指标
3.top-down微架构指标
4.平均DRAM带宽
5.指令分布(Instruction Mix)
6.Hotspots
十六、内存诊断
支持内存泄漏诊断、内存异常释放诊断、内存越界诊断、00M诊断以及内存使用跟踪。
1、内存泄漏信息,包括:泄漏点的数、调用栈、泄漏次数、泄漏大小等,内存异常释放信息,包括:异常释放点函数,调用栈,申请点信息等。
2、发生泄漏的函数源码,标记申请点代码行
异常释放的丽数源码,标记释放点代码行,关联申请点代码行
3、内存使用情况,包括:系统层的虚拟内存、物理内存;分配器的分配量,使用量,空闲量(碎片);应用程序的申请量、释放量、MAP信息
4、内存越界情况,包括:(heap) use after free、heap buffer overflow、stack buffer overflow 、global buffer overflow、use after return、use after scope、initializations order bugs
5、OOM发生点情况,包括:触发进程、被杀进程、调用栈、内存占用情况。
十七、调优助手原理
采集的数据覆盖OS、应用、硬件等系统各层的配置和性能指标,并不根据硬件资源的消耗,来关联消耗这些硬件资源的软件信息,再从这些软件信息,来查看软件对其他的硬件资源的消耗,从而推断出性能瓶颈。将数据从应用消耗、物理消耗以及硬件关联在一起。
十八、调优助手-系统配置
从系统设置上给出具体的优化建议进行调优和查看详细数据。
十九、调优助手-热点函数
从热点函数上给出具体的优化建议进行调优和查看系统详细函数及调用栈
二十、调优助手-系统性能
从系统性能上给出具体的优化建议进行调优,并从系统cpu、内存、存储、网络方面查看系统的运行数据。
二十一、Java性能分析
针对Java程序进行性能分析,能图形化显示 Java程序的堆、线程、锁、垃圾回收等信息,收集热点函数、定位程序瓶颈点,帮助用户进行问题的定位和性能调优。
Profiling(在线分析)
基于attach技术,实现对目标java程序的内部数据的动态采集。包括Java虚拟机的内部状态,如Heap、GC活动、线程状态以及应用层的相关数据,如热点函数、锁分析、10等。
Sampling(采样分析)
基于JFR技术,通过采样的方式收集JVM的内部活动/性能事件,通过录制及回放的方式来进行离线分析。在默认情况下,JFR的性能损耗小于1%。
第一讲—鲲鹏性能分析工具介绍
鲲鹏性能分析工具是一个工具集,包含调优助手、系统性能分析工具、Java性能分析工具、系统诊断工具。
独特功能:
1、基于鲲鹏处理器,提供软硬件结合分析能力,采集和分析硬件性能指标,以及硬件
性能在软件层的表现,让用户更加全面的了解整个系统的运行状况。
2、系统化的分析建立各层指标之间关联关系、并以用户视角呈现这些指标和关系,方便用户更易于发现问题。
3、结合华为在鲲鹏处理器上的性能优化经验,给出优化思路和建议,帮忙用户快速定位和修复问题。
4、实现分析过程管理,例如:优化结果对比、优化效果标记、优化过程记录等。
一、软件构架
工具从软件逻辑上分成Analysis Server和Agent两大部分
Analysis Server:主要作用是实现性能数据分析及分析结果呈现。
·Agent:主要作用是实现性能数据采集。
二、软件部署
单机部署方式、混合部署方式
三、全景分析
1、展示服务器系统及其各个子系统的TOPO结构及其配置。方便用户快速了解系统配置,及是否存在配置不合理的点,例如内存条配置位置。
2、基于USE性能分析方法,针对系统CPU、内存、磁盘IO、网络IO资源的运行情况,获得它们的使用率、饱和度、错误等指标,以此识别系统瓶颈。
3、综合分析系统性能和系统配置情况,给出检测到的性能瓶颈点,并给出优化建议和修改方法。
4、针对大数据、数据库、分布式存储场景的硬件配置、系统配置和组件配置进行检查并显示不是最优的配置项,同时分析给出典型硬件配置及其软件版本信息。
原理:基于USE(utilization、saturation、errors)性能分析方法,获得系统资源(CPU、内存、I/O等)的使用率、饱和度、错误等指标,以此识别系统瓶颈。
使用率:在规定的时间间隔内,资源用于服务工作的时间百分比。虽然资源繁忙。但是资源还有能力接受更多的工作,不能接受更多工作的程度被视为饱和度。
饱和度:资源不能在服务更多额外工作的程度,通常有等待队列。
错误:错误事件的个数。
四、CPU重点指标解读
1、%sys :
该指标表示CPU花了多少比例的时间在内核空间运行,分配内存、IO操作、创建子进程等都是内核操作,所以当该指标较高时,建议:
(1)检查系统上是否存在大量I0操作,如果存在建议更换高性能IO设备,或减少IO操作
(2)如果IO操作不多,建议检查内核、驱动是否有问题。
2、%iowait:
当该指标占用率过高的时候,通常意味着某些程序的IO操作效率很低,或者IO对应设备的性能很低以至于读写操作需要很长的时间来完成,所以当该指标较高时,建议议更换高性能IO设备或减少IO操作。
五、内存重点指标解读
六、存储IO重点指标解读
如果avgqu-sz比较大,也表示有大量IO在等待。
七、网络IO重点指标分析解读
1、rxdrop/s|txdrop/s:表示数据包已经进入了Ring Buffer,但是由于内存不够等系统原因,导致最终中被丢弃。
2、rxfifo/s|txfifo/s:表示数据包没到Ring Buffer就被网卡物理层给丢弃了。其中,CPU无法及时处理中断是造成Ring Buffer满的原因之一。
八、重点系统配置解读
九、重点指标分析解读
十、热点函数分析
火焰图的含义:y轴表示调用栈,每一层一个函数。调用栈越深,火焰就越高,顶部就是正在执行的函数,下方都是它的父函数。
x轴表示抽样数。如果一个函数在x轴占据的宽度越宽,就表示它被抽到的次数越多,即执行的时间越长。
原理:基于CPU Cycles事件的数据进行分析
1,热点函数和热点指令是基干cpU Cvcle事件中断时的调用栈信息标识的。在一段时间内,某个函数的某个指令被采集的越多,就认为越热;
2.以调用栈信息反映调用关系,绘制火焰图:
3.反汇编目标文件获取汇编指令;
4.通过符号表和DEBUG信息关联源码;
十一、微架构分析
基干鲲鹏外理器PMU(Performance Monitor Unit)事件,建立鲲鹏外理器的Top-Down模型,获得指令在CPU流水线上的运行情况,可以帮助用户快速定位当前应用在CPU上的性能瓶颈,用户可以有针对性地修改自己的程序,以充分利用当前的硬件资源。
原理:一条指令在流水线上运行时,需要经过取指、译码、执行、回写等多个阶段,处理器在每个阶段都设定了一些PMU统计事件,通过采集这些事件,并结合一定模型就可以表示出指令在CPU流水线上的运行情况。
基于最新的PMU采集逻辑,对各PMU数据梳理整合分析:
1、Retiring;指正常退休的指含数量;
2、Bad Speculation:反映了软件中预测失败的比例,主要包括两个方面:(1)分支预测失
(2)machine clear
3、Frontend Bound:反映前端prefetch,decode流程是否产生空槽。
4、Backend Bound:代表的是CPU的如下指标(1)运算/执行能力;(2)资源数量;(3)访存能力。
十一、访存分析
鲲鹏处理器是NUMA架构,并存在三级Cache机制,CPU核访问数据时,存在本地,跨片,跨带访问Cache和内存的情况。不同的访问路径,在时延和带宽上都相差很大,并严重影响系统和程序性能。 工具基于CPU访问缓存和内存的事件,分析访存过程中可能的性能瓶颈,给出造成这些性能问题的可能原因及优化建议,具体包括三个功能:访存统计分析,Miss事件分析、伪共享分析。
原理:基于处理器的Core和Uncore事件统计CPU核访问Cache和DDR的性能数据,分析对缓存和内存的访问次数、命中率、宽带等情况。
原理:Miss事件分析基于ARM SPE(Statistical Profiling Extension)能力实现。SPE是针对指令进行采样,同时记录一些触发事件的信息,包括精确的PC指针信息。利用该项能力可以用于对应用程序进行LLCMiss,TLB Miss,Remote Access,Long Latency Load等Miss类事件分析,并精确的关联到造成该事件的代码。相对于PMU事件,SPE可以解决PMU事件无法精确对应到PC指针的问题。
伪共享分析能得到发生伪共享的次数和比例、指令地址和代码行号、NUMA节点等信息。基于这些信息,用户便可以有针对性地修改自己的程序,降低发生伪共享的几率,提高程序处理性能。
原理:伪共享分析也是基于SPE能力实现。通过采样Load指令和Store指令,并匹配他们在相同时间点对cacheline的的访问情况,如果存在同时读写、写写同一个cacheline的情况,就可能发生伪共享。
伪共享优化建议:
1.对于写的很频繁的变量应该在自己独立的Cache line。可以据此进行对齐调整
让它们不那么竞争,运行更快,也能让其它的共享了该Cache Line的变量不被拖慢。
2.跨越了多个Cache Line的热的Lock或Mutex,需要考虑Cache Line对齐的。
3.读多写少的变量,可以将这些变量组合到相同或相邻的Cache Line。
4.一段代码,它不在某一行Cache Line上竞争严重,但是它却在很多Cache Line上竞争,这样的代码段也需要优化。
5.多进程程序访问共享内存时,同样要关注Cache Line上竞争。
十二、IO分析
基于IO操作数据分布情况,判断是随机操作还是顺序操作,并给出相应的优化建议。
十三、资源调度分析
原理:采集内核CPU调度事件数据,从进程/线程的角度排列各个事件,计算出各个事件之
间的时间差,并标记对应的状态。
采集内核CPU调度事件数据,从CPU核的角度排列各个事件,计算出各个事件之间的时间差,并标记对应的状态。
十四、锁与等待分析
基于采样的热点函数,分析glibc的锁与等待函数(包括sleep、usleep、mutex、cond、spinlock、rwlock、semaphore等),关联到其归属的进程和调用点,并根据当前已有的优化经验给出优化建议。
十五、HPC场景
OpenMP/MPI分析通过采集系统的PMU事件并配合采集面向OpenMP和MPI应用的关键指标,帮助用户精准获得Parallelregion及Barrier-to-Barrier的串行及并行时间、校准的2层微架构指标、指令分布及 L3的利用率和内存带宽等信息。:
1.OpenMP运行时指标,新增细化指标 分析对象
2.MPI运行时指标
3.top-down微架构指标
4.平均DRAM带宽
5.指令分布(Instruction Mix)
6.Hotspots
十六、内存诊断
支持内存泄漏诊断、内存异常释放诊断、内存越界诊断、00M诊断以及内存使用跟踪。
1、内存泄漏信息,包括:泄漏点的数、调用栈、泄漏次数、泄漏大小等,内存异常释放信息,包括:异常释放点函数,调用栈,申请点信息等。
2、发生泄漏的函数源码,标记申请点代码行
异常释放的丽数源码,标记释放点代码行,关联申请点代码行
3、内存使用情况,包括:系统层的虚拟内存、物理内存;分配器的分配量,使用量,空闲量(碎片);应用程序的申请量、释放量、MAP信息
4、内存越界情况,包括:(heap) use after free、heap buffer overflow、stack buffer overflow 、global buffer overflow、use after return、use after scope、initializations order bugs
5、OOM发生点情况,包括:触发进程、被杀进程、调用栈、内存占用情况。
十七、调优助手原理
采集的数据覆盖OS、应用、硬件等系统各层的配置和性能指标,并不根据硬件资源的消耗,来关联消耗这些硬件资源的软件信息,再从这些软件信息,来查看软件对其他的硬件资源的消耗,从而推断出性能瓶颈。将数据从应用消耗、物理消耗以及硬件关联在一起。
十八、调优助手-系统配置
从系统设置上给出具体的优化建议进行调优和查看详细数据。
十九、调优助手-热点函数
从热点函数上给出具体的优化建议进行调优和查看系统详细函数及调用栈
二十、调优助手-系统性能
从系统性能上给出具体的优化建议进行调优,并从系统cpu、内存、存储、网络方面查看系统的运行数据。
二十一、Java性能分析
针对Java程序进行性能分析,能图形化显示 Java程序的堆、线程、锁、垃圾回收等信息,收集热点函数、定位程序瓶颈点,帮助用户进行问题的定位和性能调优。
Profiling(在线分析)
基于attach技术,实现对目标java程序的内部数据的动态采集。包括Java虚拟机的内部状态,如Heap、GC活动、线程状态以及应用层的相关数据,如热点函数、锁分析、10等。
Sampling(采样分析)
基于JFR技术,通过采样的方式收集JVM的内部活动/性能事件,通过录制及回放的方式来进行离线分析。在默认情况下,JFR的性能损耗小于1%。