资讯详情

【性能】基于Perf和VTune的程序性能瓶颈分析

原文:https://www.eefocus.com/embedded/479299

本文首先介绍了应用程序的分析 3 然后介绍了一个指标 Linux 系统工具、Perf 以及 Vtune 工具的使用,特别是如何使用 Perf 和 VTune 分析程序,找出程序的性能瓶颈。充分利用这些性能优化工具,可以快速定位程序的性能热点,指导程序的性能瓶颈优化。

1、引言

应用程序的开发测试过程中,对程序性能进行分析和优化是不可或缺的一部分。性能分析(performance analysis 也称为 profiling),它是一种动态程序分析方法,通过收集程序运行中的信息来研究程序行为。性能分析的目的是优化程序的哪一部分,从而提高程序的速度或内存使用效率。根据帕累托法则(也叫二八定律),只有优化性能瓶颈中的少量代码,才能以最低的成本获得最大的利润。

本文首先介绍了测量应用程序性能的关键指标,然后介绍了如何使用它 perf 和 vtune 进行性能分析,找到软件性能的热点部分。在完成应用程序的性能分析并找到性能瓶颈后,可以快速准确地定位需要修改的源代码,缩短性能的时间。

2.程序性能分析指标

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

响应时间是指系统响应请求的时间,可以理解为用户从客户端启动请求到客户端接收从服务器端返回的响应结束时间,直接影响用户的感官体验。在实时交互场景中,通常需要毫秒的响应速度。

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

并发数是指正常使用系统功能的用户数量系统功能的用户数量。该指标更直观但不准确,因为不同的用户模式会导致不同的用户在单位时间发出不同数量的请求。

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

内存是计算机的重要组成部分之一 CPU 沟通的桥梁。计算机中的所有程序都在内存中运行,因此内存性能对计算机有很大的影响,内存利用率不应过高,否则会影响系统性能。

磁盘指数主要包括每秒读写、磁盘繁忙率、磁盘队列数、平均服务时间、平均等待时间和空间利用率。磁盘繁忙率是直接反映磁盘瓶颈的重要依据。

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

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

3.程序性能分析工具

Linux 系统上有许多性能监控工具

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

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

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

(4) sar: Linux 最全面的系统性能分析工具之一可以从 14 报告系统活动的主要方面。

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

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

(1)Perf top:实时显示系统 / 性能统计信息的过程

-e:指定性能事件

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

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

-p:指定进程 PID

-t:指定线程 TID

-K:隐藏核心统计信息

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

-s:指定要分析的符号信息

-e:选择性能事件

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

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

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

-a:指定全部 cpu

-C:指定某个 cpu

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

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

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

-e:选择性能事件

-p:待分析过程 id

-t:待分析线程 id

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

-C:只采集指定 CPU 数据

-c:事件采样周期

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

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

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

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

-i:输入数据文件

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

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

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

-S:只考虑指定符号

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

-g[type,min,order]:显示调用关系相当于 perf top 命令中的 -g

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

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

–source:以汇编和 source 显示形式

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

图 1 perf 函数调用分析结果

图中第一列表示子函数占用的子函数 CPU 比例,第二列表示行占用的比例。 CPU 比例,第三列表示函数所在 DSO,第四列表示函数名。 perf 为了引导程序性能瓶颈的优化,可以轻松获得定位程序的热点代码。

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

图 2 火焰图

火焰图使用 SVG 存储图像格式,方便用户与图像交互。火焰图中函数块的长度越长,表示执行函数 CPU 时间越长。火焰图的底部是父函数,上面是子函数。通过火焰图的形式,函数调用的关系和 CPU 占用比更直观出来。

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

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

图 3 VTune 性能分析模块

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

图 4 Hotspots 分析结果

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

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

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

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

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

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

图 5  Performance Snapshot 分析结果示意图

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

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

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

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

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

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

4、结束语

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

标签: utsuki液位传感器upi

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台