-
应用程序和/或整个系统中最耗时的功能
-
没有有效利用可用处理器时间的代码段
-
优化顺序性能和线程性能的最佳代码部分
-
影响应用程序性能的同步对象
-
应用程序是否、在何处以及为何将时间花在输入/输出操作上
-
应用程序是否受 CPU 或 GPU 限制,以及它将代码卸载到 GPU 的效率如何
-
不同同步方法、不同线程数或不同算法对性能的影响
-
线程活动和转换
-
代码中与硬件相关的问题,例如数据共享、缓存未命中、分支预测错误等
Intel vtune在linux虚拟机上的安装:
1. 下载vtune:Download the Intel® oneAPI Base Toolkit
选择离线下载,如果虚拟机可以连外网,使用wget命令获取安装
2. 下载完成后进行安装,sh ./l_BaseKit_p_2022.1.2.146_offline.sh,安装命令提示进行安装,选择默认的安装就可以
3. 安装完成后,运行/home/subi/intel/oneapi/vtune/2022.0.0/bin64/vtune-gui启动vtune,你会看到一个GUI界面如下
4. 首先创建一个项目
5. 进行配置,where就是要进行分析的程序所在地,默认使用local host;what是要抓取的应用程序,有三种选择:
1)使用进程(进程名或者PID号)
2)profile系统,配置监视系统上执行的所有软件的系统范围分析
3)启动应用程序,选择和配置要分析的应用程序,它可以是二进制文件或脚本,并且要填写应用程序启动参数
后面的实例中我采用第一种,使用PID
6. 配置分析类型:
-
使用 热点分析类型来调查调用路径并找出您的代码花费最多时间的位置。确定调整算法的机会。
-
使用 异常检测(预览版)来识别频繁重复的代码间隔(如循环迭代)中的性能异常。在微秒级别执行细粒度分析。
-
内存消耗最适合分析应用程序的内存消耗、其不同的内存对象及其分配堆栈。仅 Linux 目标支持此分析。
-
Microarchitecture Exploration(以前称为 General Exploration)最适合识别 CPU 流水线阶段(前端、后端等)和负责硬件瓶颈的硬件单元。
-
内存访问最适合内存受限的应用程序,通过查看 CPU 缓存和主内存使用情况(包括可能的 NUMA 问题)来确定内存层次结构的哪个级别正在影响您的性能。
-
线程最适合可视化可用内核上的线程并行性、定位低并发的原因以及识别代码中的串行瓶颈。
-
使用 HPC 性能表征了解计算密集型应用程序如何使用 CPU、内存和浮点单元 (FPU) 资源。
-
输入输出分析监控 IO 子系统、CPU 和处理器总线的利用率。
-
GPU 卸载(预览版)面向使用图形处理单元 (GPU) 进行渲染、视频处理和计算的应用程序。它可以帮助您确定您的应用程序是否受 CPU 或 GPU 限制。
-
GPU Compute/Media Hotspots(预览版)针对 GPU 绑定的应用程序,帮助分析每个代码行的 GPU 内核执行情况,并识别由内存延迟或低效内核算法引起的性能问题。
-
CPU/FPGA 交互分析探索每个 FPGA 加速器的 FPGA 利用率,并确定最耗时的 FPGA 计算任务。
-
系统概述是一种基于事件的自动采样分析,可监控目标系统的一般行为并识别限制性能的平台级因素。
-
Platform Profiler分析收集有关在较长时间内满负荷运行的已部署系统的数据,并深入了解整体系统配置、性能和行为。该集合在外部的命令提示符下运行 VTune 并在网络浏览器中查看结果。
这里采用算法中的热点分析PG中TPCH Q1的资源消耗情况。需要注意的是这儿选择了用户模式采样,可以在用户态下抓取应用程序占用资源情况。也可以使用硬件层的采样,但是因为是虚拟机,硬件采样需要额外的配置,可以参考Virtual Targets。如果是host主机,不需要配置可以直接使用。用户模式采样需要使用相同的用户运行应用程序和vtune,切记。
7. 配置完成后开始抓取,首先点击右下方开始按钮,会看到如下界面,提示正在收集热点数据
然后开始执行你的操作,比如这儿我开始在PG中运行TPCH Q1 SQL语句。等PG执行完成后,结束热点收集。
8. 分析热点数据,结束之后你会看到数据额整体报告。点击火焰图,你会看到你熟悉的perf flamegraph。这时候你会看到每个函数的CPU时间,从而可以看到哪个函数是应用程序的瓶颈。同时在右边可以看到函数的调用栈,函数名称,文件名和行数等。火焰图可以快速识别应用程序中最热门的代码路径。分析每个程序单元及其相关的被调用函数所花费的 CPU 时间。火焰图在水平轴上绘制堆栈配置文件人口(按字母顺序排序)。垂直轴显示堆栈深度,从底部的零开始。火焰图中每个元素的宽度表示函数(及其被调用者)的 CPU 时间占总 CPU 时间的百分比。
当然也可以使用bottom-up面板,按降序显示 CPU 时间的排序显示,从最耗时的函数开始。开始优化 CPU 时间最长的函数。
top-down面板分析热点函数的调用者和被调用者的 Total 和 Self 时间数据,了解该时间是否可以优化。