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

    文章

    10992

    浏览量

    206745
  • 应用程序
    +关注

    关注

    37

    文章

    3136

    浏览量

    56412
收藏 人收藏

    评论

    相关推荐

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

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

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

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

    三轴按键试验机:原理、应用与性能分析

    三轴按键试验机:原理、应用与性能分析
    的头像 发表于 12-18 09:10 185次阅读
    三轴按键试验机:原理、应用与<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 195次阅读
    如何<b class='flag-5'>进行</b>零拷贝<b class='flag-5'>性能</b>测试

    Linux perf 简要介绍

    一、引言 (Introduction) 简要介绍Linux perf (Brief Introduction to Linux perf) Linux perf性能
    的头像 发表于 11-09 17:06 364次阅读

    HarmonyOS NEXT调优工具Smart Perf Host高效使用指南

    来回切换,不但容易错过问题发生时间点,数据收集完如何能将信息有效结合分析又将是一件复杂的工作。基于开发痛点,HarmonyOS NEXT通过构建Smart Perf工具全家桶,为开发和测试人员提供了测试、调优、分析一站式服务,接
    的头像 发表于 11-09 16:03 246次阅读

    HarmonyOS NEXT调优工具Smart Perf Host高效使用指南

    能力。想要了解Smart Perf Host如何在大量数据中进行性能问题快速分析,首先可通过典型场景分析模版来
    发表于 11-09 08:35

    TorchScript model与eager model的性能区别

    import perf_counterdef timer(f,*args): start = perf_counter() f(*args) return ( 1000 * (perf
    的头像 发表于 11-08 17:08 357次阅读
    TorchScript model与eager model的<b class='flag-5'>性能</b>区别

    如何使用perf性能分析工具

    放在一起,是内核级的工具。perf是在Linux上做剖析分析的首选工具。 perf命令介绍 perf 工具提供了一组丰富的命令来收集和分析
    的头像 发表于 11-08 15:36 439次阅读
    如何使用<b class='flag-5'>perf</b><b class='flag-5'>性能</b><b class='flag-5'>分析</b>工具

    SiFive U64的HPM是什么

    对于性能分析,通常我们会使用Perf工具。而perf中的硬件事件,则需要硬件的支持——性能监视单元PMU。RISC-V u64内核支持PMU
    的头像 发表于 09-27 16:15 391次阅读

    使用Arm Streamline分析树莓派的性能

    Pi”是学习与精炼公司进行Linux剖析的有用工具。由于“草莓皮”板是为教育设计的,它们不需要复杂的程序来设置特征特征特征分析。 1.1 在你开始使用该指南之前,你需要使用简化性能,我们将在“开始精简
    发表于 08-29 06:30

    使用Streamline 1.0版进行Android性能分类

    使用ARM Streamline分析设备在运行您的移动应用程序时的性能计数器活动。 本主题演示如何解释Streamline中的图表,以确定可能指示性能问题的CPU和GPU活动模式。 捕获性能
    发表于 08-24 06:26

    ARM Neoverse N1 Core性能分析方法

    ,开发人员使用性能分析和工作负载表征技术来研究应用程序的性能特征。 服务器类系统支持广泛的性能监控技术,以衡量工作负载效率、评估其资源需求并跟踪资源利用率。 这种测量对调整软件和硬件都
    发表于 08-09 06:01

    Linux系统性能分析Perf命令

    在开发板上使用apt安装perf命令:
    发表于 07-14 15:24 603次阅读
    Linux系统<b class='flag-5'>性能</b><b class='flag-5'>分析</b>之<b class='flag-5'>Perf</b>命令

    Linux perf性能、实际应用与案例

    Linux perf性能分析工具)是一个功能强大且灵活的性能剩余工具,它可以在Linux系统上检测和调试各种性能问题。Linux内核集成了
    发表于 07-03 10:22 383次阅读