0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用perf和vtune进行性能分析

h1654155282.3538 来源:与非网 作者:与非网 2020-12-27 09:27 次阅读

1、引言

应用程序的开发测试过程中,对程序性能进行分析和优化是不可或缺的一部分。性能分析(performanceanalysis也称为profiling),是以收集程序运行时信息为手段研究程序行为的分析方法,是一种动态程序分析的方法。性能分析的目的在于决定程序的哪个部分应该被优化,从而提高程序的速度或者内存使用效率。根据帕累托法则(也叫二八定律),只有优化处于性能瓶颈的那些少量代码,才能用最小的成本获得最大的收益。

本文首先介绍了衡量应用程序性能的关键指标,随后介绍如何使用perf和vtune进行性能分析,找到软件性能的热点部分。完成应用程序的性能分析并找到性能瓶颈后,能够快速精准的定位到需要修改的源码,缩短性能调优的时间。

2、程序性能分析指标

衡量应用程序的性能高低,需要从多个方面进行性能指标的分析,主要包括业务指标、资源指标和可靠性指标。

2.1业务指标

(1)响应时间

响应时间是指系统对请求作出响应的时间,可以理解为是指用户从客户端发起一个请求开始,到客户端接收到从服务器端返回的响应结束的时间,这项指标直接影响用户的感官体验。在实时互动的场景下,一般要求毫秒级的响应速度。

(2)吞吐量

吞吐量是指单位时间内处理的请求数,常用QPS(QueriesPerSecond)和TPS(TransactionsPerSecond)进行衡量,是衡量多并发的应用系统的重要指标。

(3)并发数

并发数指系统可以同时承载的正常使用系统功能的用户的数量。这个指标比较直观但是不是很准确,因为用户不同的使用模式会导致不同用户在单位时间发出不同数量的请求。

2.2资源指标

(1)CPU使用率

CPU使用率指的是程序在运行期间实时占用的CPU百分比,这是对一个时间段内CPU使用状况的统计。通过这个指标可以看出在某一个时间段内CPU被占用的情况。

(2)内存利用率

内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大,内存利用率不宜过高,否则会影响系统性能。

(3)磁盘吞吐量

磁盘指标主要有每秒读写多少兆,磁盘繁忙率,磁盘队列数,平均服务时间,平均等待时间,空间利用率。其中磁盘繁忙率是直接反映磁盘是否有瓶颈的的重要依据。

(4)网络吞吐量

网络吞吐量是指在无网络故障的情况下单位时间内通过的网络的数据数量,单位为Byte/s。网络吞吐量指标用于衡量系统对于网络设备或链路传输能力的需求。

2.3可靠性指标

可靠性指在使用条件和规定时间内,产品完成规定功能的能力。常用的可靠性指标包括:可靠度、失效概率、失效率、平均工作时间、平均维修时间、有效度等。

3、程序性能分析工具

3.1Linux系统工具

Linux系统上自带了许多的性能监控工具

(1)vmstat:实时动态监视操作系统的虚拟内存、进程、CPU活动。

(2)iostat:动态监视系统的磁盘操作活动。

(3)top:实时显示系统中各个进程的资源占用状况。

(4)sar:Linux上最为全面的系统性能分析工具之一,可以从14个大方面对系统的活动进行报告。

(5)top:实时显示系统中各个进程的资源占用状况。

3.2Perf

Perf是内置于Linux内核源码树中的性能剖析(profiling)工具。它基于事件采样原理,使用了许多Linux跟踪特性,可用于行函数级与指令级的性能瓶颈的查找与热点代码的定位,。

(1)Perftop:实时显示系统/进程的性能统计信息

常用参数

-e:指定性能事件

-a:显示在所有CPU上的性能统计信息

-C:显示在指定CPU上的性能统计信息

-p:指定进程PID

-t:指定线程TID

-K:隐藏内核统计信息

-U:隐藏用户空间的统计信息

-s:指定待解析的符号信息

(2)Perfstat:分析系统/进程的整体性能概况。

常用参数:

-e:选择性能事件

-i:禁止子任务继承父任务的性能计数器。

-r:重复执行n次目标程序,并给出性能指标在n次执行中的变化范围。

-n:仅输出目标程序的执行时间,而不开启任何性能计数器。

-a:指定全部cpu

-C:指定某个cpu

-A:将给出每个处理器上相应的信息。

-p:指定待分析的进程id

-t:指定待分析的线程id

(3)Perfrecord:记录一段时间内系统/进程的性能时间。

常用参数:

-e:选择性能事件

-p:待分析进程的id

-t:待分析线程的id

-a:分析整个系统的性能

-C:只采集指定CPU数据

-c:事件的采样周期

-o:指定输出文件,默认为perf.data

-A:以append的方式写输出文件

-f:以OverWrite的方式写输出文件

-g:记录函数间的调用关系

(4)PerfReport:读取perfrecord生成的数据文件,并显示分析数据。

常用参数:

-i:输入的数据文件

-v:显示每个符号的地址

-d:只显示指定dos的符号

-C:只显示指定comm的信息(Comm.触发事件的进程名)

-S:只考虑指定符号

-U:只显示已解析的符号

-g[type,min,order]:显示调用关系,具体等同于perftop命令中的-g

-c:只显示指定cpu采样信息

-M:以指定汇编指令风格显示

–source:以汇编和source的形式进行显示

使用perf对程序进行函数调用的关系分析后,统计函数的调用次数,算出百分比,可以得到进程运行的可信数据(图1)。

图1perf的函数调用分析结果

图中第一列表示函数的子函数执行占用的CPU比例,第二列表示函数执行占用的CPU比例,第三列表示函数所在的DSO,第四列表示函数名。通过使用perf工具,可以方便地得到定位程序的热点代码,以指导程序性能瓶颈的优化。

但是这种结果查看函数之间的调用关系十分不方便,可以使用一些脚本生成火焰图(FlameGraph)来直观地表示函数调用关系。

图2火焰图

火焰图使用SVG的图像格式进行存储,方便用户与图像进行交互。火焰图中的函数方块的长度越长,那么表示执行该函数的CPU时间越长。火焰图的底部为父函数,上方为它的子函数。通过火焰图的形式,函数调用的关系以及CPU占用比都更加直观地呈现出来。

3.3VTune

VTune是Intel公司开发的的一个功能十分强大的应用程序性能分析软件,包括寻找软件性能热点、线程性能检测、CPU利用率、IO负载监测等功能,还提供丰富的UI界面供用户操作,简单易上手。

VTune提供了本地连接、远程连接、安卓设备连接等多种方式来对不同的应用程序进行测试,还提供PerformanceSnapshot、Hotpots、MicroarchitectureExploration、Threading和IO等不同方面的性能分析模块(图3)。

图3VTune性能分析模块

用户使用VTune进行模块分析后,可以通过Summary、Bottom-up、Caller/Callee、Top-downTreehePlatfom5个选项框查看性能分析结果(图4)。

图4Hotspots分析结果

Summary:显示有关整个应用程序执行的统计信息,以分析CPU时间和处理器利用率。

Bottom-up:在自下而上的树中显示热点函数,每个函数的CPU时间和CPU利用率。

Top-downTree:显示调用树中的热点函数,仅函数的性能指标(不包括子函数)以及函数及其子函数的总性能指标。

Caller/Callee:显示所选函数的父函数和子函数。

Platform:提供有关CPU和GPU利用率,帧速率,内存带宽和用户任务的详细信息。

(1)PerformanceSnapshot

该功能模块能够对应用程序进行总体的分析(图4),包括IPC、GFLOPS、CPU频率、CPU核心利用率、微架构使用率、内存使用率等指标等,但只能给出一个总体的数值,要分析各个函数对CPU的占用时间等详细数值要进行更加详细的分析,一般进行性能分析时,首先进行这个模块的分析。

图5PerformanceSnapshot分析结果示意图

(2)Hotpots

Hotspots分析可以了解应用程序流程,并确定获得大量执行时间的代码段(热点),这是用户进行算法分析的起点。热点分析有两种基于采样的收集模式:用户模式采样会产生更高的开销,但不需要采样驱动程序即可进行收集;基于硬件事件的采样,可以提供最小的收集开销,但需要安装采样驱动程序或Perf。在用户模式采样中,收集器不会收集系统范围内的性能数据,而是只关注您的应用程序。硬件基于事件的采样模式是基于硬件基于事件的采样收集,分析当前系统上运行的所有进程,提供关于整个系统性能的CPU时间数据。

在进行Hotspots分析后,可以查看Bottom-up视图下的热点函数,双击函数即可对源码以及汇编代码进行分析。

图6源码和汇编代码分析图

(3)Threading

Threading分析可以用于探索CPU利用率低下的原因,相较于其他模块,它显示了全部的线程数量,以及各个线程的等待时间以及使用时间(图7),使用户能够更好地把握各个线程之间的切换情况。通过这些信息,用户可以清晰地观察工作线程的实际执行过程,了解程序的实际执行逻辑,明确各个线程的工作状态与预期是否有出入。

图7Summary视图下的CPU利用率分析图

(4)I/O

I/O模块能够分析设备的PCIeI/O带宽消耗,DirectorI/O技术和内存映射I/O流量、内存带宽消耗Intel®UPI带宽消耗以及软件数据平面利用率,以在硬件和软件级别上定位I/O密集型应用程序的性能瓶颈。

4、结束语

随着业务的日渐复杂,程序性能优化俨然成为了每一位技术人的必修课,而程序的性能调优工作又是一个十分复杂的工作。而掌握一些常用的系统性能调优工具的使用,能更好地剖析程序,迅速而准确的找到性能热点,以指导性能瓶颈问题的解决方案设计。
责任编辑人:CC

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11219

    浏览量

    208878
  • 应用程序
    +关注

    关注

    37

    文章

    3240

    浏览量

    57594
收藏 人收藏

    评论

    相关推荐

    如何进行有效的eda分析

    进行有效的EDA(Exploratory Data Analysis,探索性数据分析分析,是数据科学中的关键步骤,它能够帮助分析人员深入了解数据、发现潜在的模式,并为进一步的
    的头像 发表于 11-13 10:48 141次阅读

    使用Arthas火焰图工具的Java应用性能分析和优化经验

    分享作者在使用Arthas火焰图工具进行Java应用性能分析和优化的经验。
    的头像 发表于 10-28 09:27 147次阅读
    使用Arthas火焰图工具的Java应用<b class='flag-5'>性能</b><b class='flag-5'>分析</b>和优化经验

    使用IBIS模型进行时序分析

    电子发烧友网站提供《使用IBIS模型进行时序分析.pdf》资料免费下载
    发表于 10-21 10:00 0次下载
    使用IBIS模型<b class='flag-5'>进行</b>时序<b class='flag-5'>分析</b>

    TP3094如何对数字输出的PCM进行一个性能指标测试?

    我们现在在做一个关于TP3094的项目,遇到了一个问题。 问题:如何对数字输出的PCM进行一个性能指标测试,因为PCM和之前分析的I2S格式的数字信号不同,现在不知道如何进行PCM的
    发表于 10-12 06:07

    在LaunchPad上使用FCL进行双电机Ctl和使用SFRA进行性能分析TMS320F28379D

    电子发烧友网站提供《在LaunchPad上使用FCL进行双电机Ctl和使用SFRA进行性能分析TMS320F28379D.pdf》资料免费下载
    发表于 10-10 09:29 0次下载
    在LaunchPad上使用FCL<b class='flag-5'>进行</b>双电机Ctl和使用SFRA<b class='flag-5'>进行</b><b class='flag-5'>性能</b><b class='flag-5'>分析</b>TMS320F28379D

    IP 地址大数据分析如何进行网络优化?

    一、大数据分析在网络优化中的作用 1.流量分析 大数据分析可以对网络中的流量进行实时监测和分析,了解网络的使用情况和流量趋势。通过对流量数据
    的头像 发表于 10-09 15:32 176次阅读
    IP 地址大数据<b class='flag-5'>分析</b>如何<b class='flag-5'>进行</b>网络优化?

    晶闸管与IGBT的性能分析

    晶闸管(Thyristor)与绝缘栅双极型晶体管(Insulated Gate Bipolar Transistor, IGBT)作为电力电子领域中的关键器件,各自具有独特的性能特点和应用场景。以下是对两者性能的详细分析,内容涵
    的头像 发表于 08-27 14:09 1115次阅读

    如何使用Intel Processor Trace工具查看任意函数执行时间

    在上一篇文章 PT_PERF: 基于 Intel PT 的时延性能分析工具 中,我们介绍了 Intel Processor Trace 时延分析工具的背景,功能和实现。
    的头像 发表于 08-07 14:24 408次阅读
    如何使用Intel Processor Trace工具查看任意函数执行时间

    想通过perf工具来检查2段不同代码的内存占用率,但一直没找到,怎么办?

    想通过perf工具来检查2段不同代码的内存占用率,但一直没找到,怎么办?
    发表于 05-17 13:33

    SAGE算法的性能分析

    电子发烧友网站提供《SAGE算法的性能分析.pdf》资料免费下载
    发表于 02-28 10:38 0次下载

    如何使用Arm SPE进行芯片数据采集和性能分析呢?

    Arm Statistical Profiling Extension (SPE, 统计分析扩展) 是一种架构级功能,旨在增强 Arm CPU 的指令执行分析
    的头像 发表于 01-24 18:16 1660次阅读

    振弦采集仪在工程监测中的性能评估与分析

    分析指标: 振弦采集仪在工程监测中的性能评估与分析 1. 准确性:振弦采集仪的准确性是指它测量和记录振弦信号的精确程度。评估准确性的方法包括与其他已知精度仪器进行比较或使用精确度已知
    的头像 发表于 01-11 15:53 289次阅读
    振弦采集仪在工程监测中的<b class='flag-5'>性能</b>评估与<b class='flag-5'>分析</b>

    如何使用SIwizard的功能进行眼图分析

    SIwizard是SIwave的一项功能,它可以使用Designer/Nexxim的IBIS模型对PCB分析网络进行波形分析。 按照以往的仿真模式, 需要先提取PCB通道的S参数后在使用Ansys
    的头像 发表于 12-28 16:57 2209次阅读
    如何使用SIwizard的功能<b class='flag-5'>进行</b>眼图<b class='flag-5'>分析</b>

    带阻滤波器:原理、应用及性能分析

    带阻滤波器:原理、应用及性能分析?|深圳比创达电子EMC
    的头像 发表于 12-11 10:43 1237次阅读
    带阻滤波器:原理、应用及<b class='flag-5'>性能</b><b class='flag-5'>分析</b>?

    如何进行零拷贝性能测试

    的样本数据量是4M。 未开启零拷贝进行数据传输 $ ros2 run performance_test perf_test --reliable --keep-last --history-depth
    的头像 发表于 11-27 16:51 405次阅读
    如何<b class='flag-5'>进行</b>零拷贝<b class='flag-5'>性能</b>测试