Intel vtune安装和使用,火焰图定位性能瓶颈

Intel VTune profiler 是用于串行和多线程应用程序的性能分析工具。采用  VTune  profiler 分析程序中的热点函数占用CPU的时间等,从可用的硬件资源中确定应用程序的潜在优势。 Intel vtune可以定位或确定:
  • 应用程序和/或整个系统中最耗时的功能
  • 没有有效利用可用处理器时间的代码段
  • 优化顺序性能和线程性能的最佳代码部分
  • 影响应用程序性能的同步对象
  • 应用程序是否、在何处以及为何将时间花在输入/输出操作上
  • 应用程序是否受 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 时间数据,了解该时间是否可以优化。

猜你喜欢

转载自blog.csdn.net/helenbi/article/details/123657945