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
    +关注

    关注

    88

    文章

    11814

    浏览量

    219533
  • 应用程序
    +关注

    关注

    38

    文章

    3346

    浏览量

    60418
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何进行高效的雷达性能测试?实用技巧分享

    雷达性能测试是指一系列旨在评估和验证雷达系统在各种操作条件下的功能性和效能的测试过程。这些测试通过使用特定的设备和技术手段,对雷达的各项关键性能指标进行量化评估,以确保其能够按照设计要求正常工作,并
    的头像 发表于 03-27 16:03 178次阅读
    如何<b class='flag-5'>进行</b>高效的雷达<b class='flag-5'>性能</b>测试?实用技巧分享

    搭载RISC-V芯片Fedora操作系统中,安装好perf工具之后,输入pef top -g -e cpu-clock 无法显示内核函数的符号?

    ;在网上找个很多办法,都不太行。可以确定的是,不是因为缺少库的原因导致的。 Linux: perf top, kernel symbol not found - Stack Overflow 而在X86的机器上就不存这样的问题, 也用同样的方式去安装perf工具。
    发表于 03-27 08:27

    在Fedora系统中打算绘制火焰图遇到的问题求解

    ,重新对perf.data进行perf report,系统函数名又出现了,但是系统函数的overhead占比却又会诡异地发生了变化。
    发表于 03-27 07:29

    Ubuntu 24.04:“perf stat”报告未计算的事件是怎么回事?

    您好,我正在尝试对硬件事件进行采样,如下所示,但对于每个事件(例如 “perf event -e LLC-loads benchmark”),我从 perf 中得到“未计算”。我已在 NVMe
    发表于 02-05 07:37

    从代码到实践:ARMv8 PMUv3性能监控的实际应用解析

    本文结合perf_event.c代码片段,聚焦实际开发场景,将通过以下内容展开。
    的头像 发表于 02-04 17:43 1717次阅读
    从代码到实践:ARMv8 PMUv3<b class='flag-5'>性能</b>监控的实际应用解析

    矢量网络分析仪如何进行脉冲S参数测量

    在射频微波领域,对放大器、混频器等有源器件进行精确表征至关重要。传统矢量网络分析仪(VNA)工作在连续波模式下,当器件处于脉冲工作状态时(常见于雷达、航天通信等系统),直接进行S参数测量极易引入误差。本文将深入探讨如何使用配备窄
    的头像 发表于 01-13 17:53 1247次阅读
    矢量网络<b class='flag-5'>分析</b>仪如何<b class='flag-5'>进行</b>脉冲S参数测量

    如何用泰克示波器进行眼图分析

    在现代高速数字通信系统中,眼图分析是评估信号完整性和传输质量的核心工具。泰克示波器凭借其高精度和丰富的分析功能,成为工程师进行眼图测试的首选设备。本文将详细介绍使用泰克示波器进行眼图
    的头像 发表于 12-10 17:26 1322次阅读
    如何用泰克示波器<b class='flag-5'>进行</b>眼图<b class='flag-5'>分析</b>

    Altera Agilex 3 FPGA和SoC产品家族的性能分析

    本文采用严谨的基准测试方法,对全新推出的 Agilex 3 FPGA 和 SoC 产品家族进行性能分析。该系列专为成本优化型应用设计,兼具高性能、高集成度与高可靠性。
    的头像 发表于 10-27 09:37 889次阅读

    MN724-0435.2000压控SAW晶振:高性能VC-SAW振荡器

    MN724-0435.2000是 API SAW Oscillators推出的一款高性能 压控声表面波(VC-SAW)晶振,基于先进的声表面波(SAW)技术设计,通过外部电压实现输出频率的精准调控
    发表于 08-13 09:06

    如何在Ray分布式计算框架下集成NVIDIA Nsight Systems进行GPU性能分析

    在大语言模型的强化学习训练过程中,GPU 性能优化至关重要。随着模型规模不断扩大,如何高效地分析和优化 GPU 性能成为开发者面临的主要挑战之一。
    的头像 发表于 07-23 10:34 2561次阅读
    如何在Ray分布式计算框架下集成NVIDIA Nsight Systems<b class='flag-5'>进行</b>GPU<b class='flag-5'>性能</b><b class='flag-5'>分析</b>

    如何评估协议分析仪的性能指标?

    评估协议分析仪的性能指标需从硬件处理能力、协议解析精度、实时响应效率、扩展性与兼容性、用户体验五大维度综合考量。以下是具体指标及评估方法,结合实际场景说明其重要性:一、硬件处理能力:决定基础性能
    发表于 07-18 14:44

    如何使用协议分析进行数据分析与可视化

    使用协议分析进行数据分析与可视化,需结合数据捕获、协议解码、统计分析及可视化工具,将原始数据转化为可解读的图表和报告。以下是详细步骤及关键方法,涵盖从数据采集到可视化的全流程:一、数据采集与预处理
    发表于 07-16 14:16

    如何使用银河的变频功率分析进行变频器性能试验?

    变频功率分析仪 是湖南银河电气专门针对变频测试而研发的一款产品,在变频器性能试验时的强电磁干扰环境下具备独到优势,比如传感器/变送器与二次仪表两者通过光纤连接,完全避免了强电磁干扰环境下信号在传输
    的头像 发表于 07-09 09:40 730次阅读
    如何使用银河的变频功率<b class='flag-5'>分析</b>仪<b class='flag-5'>进行</b>变频器<b class='flag-5'>性能</b>试验?

    同步电机步进运动性能分析

    对同步电动机采用步进控制,模拟仿真该动态下电机各种参数对性能的影响,同时提出如何选取初值和确定合适的参数。 纯分享帖,需要者可点击附件免费获取完整资料~~~*附件:同步电机步进运动性能分析.pdf【免责
    发表于 06-20 17:38

    混合励磁永磁发电机的设计与性能分析

    纯分享帖,需要者可点击附件免费获取完整资料~~~*附件:混合励磁永磁发电机的设计与性能分析.pdf【免责声明】本文系网络转载,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请第一时间告知,删除内容!
    发表于 05-29 14:10