searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

性能分析工具perf和vtune的使用介绍

2023-04-04 01:04:21
839
0

1       perf

1.1  概述

perf是Linux下的一款性能分析工具,能够进行函数级与指令级的热点查找。它由一个叫“Performance counters“的内核子系统实现,基于事件采样原理,以性能事件为基础,支持针对处理器相关性能指标与操作系统相关性能指标的性能剖析,可用于性能瓶颈的查找与热点代码的定位。

基本原理是perf通过系统调用sys_perf_event_open 陷入到内核中,内核根据perf 提供的信息在PMU(Performance Monitoring Unit)上初始化一个硬件性能计数器(PMC: Performance Monitoring Counter)。PMC随着指定硬件事件的发生而自动累加。在PMC 溢出时,PMU 触发一个PMI(Performance Monitoring Interrupt)中断。内核在PMI 中断的处理函数中保存PMC 的计数值,触发中断时的指令地址,当前时间戳以及当前进程的PID,TID,comm 等信息。我们把这些信息统称为一个采样(sample)。内核会将收集到的sample 放入用于跟用户空间通信的Ring Buffer。用户空间里的perf 分析程序采用mmap 机制从ring buffer 中读入采样,并对其解析。

1.2  常用命令

1)perf常用的五个命令:

  • perf list:查看当前软硬件环境支持的性能事件
  • perf stat:分析指定程序的性能概况
  • perf top:实时显示系统/进程的性能统计信息
  • perf record:记录一段时间内系统/进程的性能事件
  • perf report:读取perf record生成的data文件,并显示分析数据

 

2)perf record常用的命令行参数:

  • -e <event>:指定性能事件(可以是多个,用,分隔列表)cycles,instructions,cache-references,cache-misses,bus-cycles
  • -p <pid>:指定待分析进程的 pid(可以是多个,用,分隔列表)
  • -t <tid>:指定待分析线程的 tid(可以是多个,用,分隔列表)
  • -u <uid>:指定收集的用户数据,uid为名称或数字
  • -a:从所有 CPU 收集系统数据
  • -g:开启 call-graph (stack chain/backtrace) 记录
  • -C <cpu-list>:只统计指定 CPU 列表的数据,如:0,1,3或1-2
  • -r <RT priority>:perf 程序以SCHED_FIFO实时优先级RT priority运行这里填入的数值越大,进程优先级越高(即 nice 值越小)
  • -c <count>: 事件每发生 count 次采一次样
  • -F <n>:每秒采样 n 次
  • -o <output.data>:指定输出文件data,默认输出到perf.data
  • -- sleep:采集时长

 

3)通过perf report可以展示采样记录,下图是使用ib_send_bw时,采集到的信息。

  • Samples:采样个数
  • Event count:系统总共发生的事件数
  • Symbol:函数名,其中 [.] 表示用户空间函数,[k] 表示内核函数
  • Shared Object:函数所在的共享库或所在的程序
  • Command:进程名
  • Self:该函数的 CPU 使用率
  • Children:该函数的子函数的 CPU 使用率

1.3  perf使用示例

使用perf对RDMA传输层客户端的代码进行性能分析。

然后得到各个函数对CPU的占用率

通过对函数对CPU的占用情况,分析哪些函数占用率特别高,是否正常,并查看该函数是否存在优化的可能性。

2       vtune

2.1  概述

Vtune是一款可视化性能分析器(Intel VTune Performance Analyzer),用于分析和优化程序性能,作为Intel为开发者提供的专门针对寻找软硬件性能瓶颈的一款分析工具,它能确定程序的热点(hotspot),找到导致性能不理想的原因,从而让开发者据此对程序进行优化。

2.2  下载与安装

下载指南:

https://www.intel.com/content/www/us/en/developer/tools/oneapi/vtune-profiler-download.html

安装指南:

https://www.intel.com/content/www/us/en/develop/documentation/vtune-install-guide/top/linux/package-managers.html

使用指南

https://www.intel.com/content/www/us/en/develop/documentation/get-started-with-vtune/top/linux-os.html

支持在线和离线安装,支持linux、windows和macOS。

2.3  使用

  • 命令行使用

vtune <-action> [-action-option] [-global-option] [[--] <target> [target-options]]

  • 图形界面使用

可以使用vtune-gui打开图形界面,或者直接双击intel vtune profiler图标打开。

支持导入可执行程序直接执行,采集并分析数据;或者是将使用命令行采集的数据导入进行分析。

2.4  使用示例

使用vtune对RDMA传输层代码进行性能分析

  • 使用vtune -collect hotspots -result-dir rdma-client -quiet命令,采集example执行过程中的数据,并将采集到的数据存在rdma-client文件夹中。

  • 将采集后数据导入intel vtune profiler中进行分析。

  • 分析结果呈现

  • Summary

主要分析的数据有:"Elapsed Time(经过的总时间)"、"Top Hotspots(高热点部分)"、"CPU Usage Histogram(CPU使用直方图)"和"Collection and Platform Info(收集信息和平台信息)"。

Elapsed Time信息,主要有总线程数量、开销时间(花费在同步和线程库函数的时间)、自旋时间(CPU等待其它同步资源处理的自旋等待时间)、CPU时间(CPU运行程序所花费的总时间)和暂停时间。

Top Hotspots信息,会列举VTune分析的程序里的活跃度最高(最耗时)的部分,例如:自旋锁、函数等。

  • Bottom-up

Bottom-up可以查看函数/模块/线程调用时间的耗费,主要分析的数据有:进程、线程、模块、函数和调用的堆栈信息。可以显示程序的进程、线程号,函数的开始地址,CPU开销时间,CPU自旋时间等信息。

导入源文件后,可以分析到具体某行函数占用cpu的时间。

  • Caller/Callee

Caller/Callee主要分析的数据有:CPU总利用时间、各个函数自我利用时间、各个函数的自我开销时间、各个函数的调用者和被调用者等。

  • Thread

Tasks and Frames主要以直方图的形式详细展示了各个线程的运行时间。

  • Flame graph

CPU火焰图,可以看到CPU 执行的函数名以及调用栈(stack),可以清晰地看到程序中花费执行时间最长的函数。

0条评论
0 / 1000
h****n
3文章数
1粉丝数
h****n
3 文章 | 1 粉丝
h****n
3文章数
1粉丝数
h****n
3 文章 | 1 粉丝
原创

性能分析工具perf和vtune的使用介绍

2023-04-04 01:04:21
839
0

1       perf

1.1  概述

perf是Linux下的一款性能分析工具,能够进行函数级与指令级的热点查找。它由一个叫“Performance counters“的内核子系统实现,基于事件采样原理,以性能事件为基础,支持针对处理器相关性能指标与操作系统相关性能指标的性能剖析,可用于性能瓶颈的查找与热点代码的定位。

基本原理是perf通过系统调用sys_perf_event_open 陷入到内核中,内核根据perf 提供的信息在PMU(Performance Monitoring Unit)上初始化一个硬件性能计数器(PMC: Performance Monitoring Counter)。PMC随着指定硬件事件的发生而自动累加。在PMC 溢出时,PMU 触发一个PMI(Performance Monitoring Interrupt)中断。内核在PMI 中断的处理函数中保存PMC 的计数值,触发中断时的指令地址,当前时间戳以及当前进程的PID,TID,comm 等信息。我们把这些信息统称为一个采样(sample)。内核会将收集到的sample 放入用于跟用户空间通信的Ring Buffer。用户空间里的perf 分析程序采用mmap 机制从ring buffer 中读入采样,并对其解析。

1.2  常用命令

1)perf常用的五个命令:

  • perf list:查看当前软硬件环境支持的性能事件
  • perf stat:分析指定程序的性能概况
  • perf top:实时显示系统/进程的性能统计信息
  • perf record:记录一段时间内系统/进程的性能事件
  • perf report:读取perf record生成的data文件,并显示分析数据

 

2)perf record常用的命令行参数:

  • -e <event>:指定性能事件(可以是多个,用,分隔列表)cycles,instructions,cache-references,cache-misses,bus-cycles
  • -p <pid>:指定待分析进程的 pid(可以是多个,用,分隔列表)
  • -t <tid>:指定待分析线程的 tid(可以是多个,用,分隔列表)
  • -u <uid>:指定收集的用户数据,uid为名称或数字
  • -a:从所有 CPU 收集系统数据
  • -g:开启 call-graph (stack chain/backtrace) 记录
  • -C <cpu-list>:只统计指定 CPU 列表的数据,如:0,1,3或1-2
  • -r <RT priority>:perf 程序以SCHED_FIFO实时优先级RT priority运行这里填入的数值越大,进程优先级越高(即 nice 值越小)
  • -c <count>: 事件每发生 count 次采一次样
  • -F <n>:每秒采样 n 次
  • -o <output.data>:指定输出文件data,默认输出到perf.data
  • -- sleep:采集时长

 

3)通过perf report可以展示采样记录,下图是使用ib_send_bw时,采集到的信息。

  • Samples:采样个数
  • Event count:系统总共发生的事件数
  • Symbol:函数名,其中 [.] 表示用户空间函数,[k] 表示内核函数
  • Shared Object:函数所在的共享库或所在的程序
  • Command:进程名
  • Self:该函数的 CPU 使用率
  • Children:该函数的子函数的 CPU 使用率

1.3  perf使用示例

使用perf对RDMA传输层客户端的代码进行性能分析。

然后得到各个函数对CPU的占用率

通过对函数对CPU的占用情况,分析哪些函数占用率特别高,是否正常,并查看该函数是否存在优化的可能性。

2       vtune

2.1  概述

Vtune是一款可视化性能分析器(Intel VTune Performance Analyzer),用于分析和优化程序性能,作为Intel为开发者提供的专门针对寻找软硬件性能瓶颈的一款分析工具,它能确定程序的热点(hotspot),找到导致性能不理想的原因,从而让开发者据此对程序进行优化。

2.2  下载与安装

下载指南:

https://www.intel.com/content/www/us/en/developer/tools/oneapi/vtune-profiler-download.html

安装指南:

https://www.intel.com/content/www/us/en/develop/documentation/vtune-install-guide/top/linux/package-managers.html

使用指南

https://www.intel.com/content/www/us/en/develop/documentation/get-started-with-vtune/top/linux-os.html

支持在线和离线安装,支持linux、windows和macOS。

2.3  使用

  • 命令行使用

vtune <-action> [-action-option] [-global-option] [[--] <target> [target-options]]

  • 图形界面使用

可以使用vtune-gui打开图形界面,或者直接双击intel vtune profiler图标打开。

支持导入可执行程序直接执行,采集并分析数据;或者是将使用命令行采集的数据导入进行分析。

2.4  使用示例

使用vtune对RDMA传输层代码进行性能分析

  • 使用vtune -collect hotspots -result-dir rdma-client -quiet命令,采集example执行过程中的数据,并将采集到的数据存在rdma-client文件夹中。

  • 将采集后数据导入intel vtune profiler中进行分析。

  • 分析结果呈现

  • Summary

主要分析的数据有:"Elapsed Time(经过的总时间)"、"Top Hotspots(高热点部分)"、"CPU Usage Histogram(CPU使用直方图)"和"Collection and Platform Info(收集信息和平台信息)"。

Elapsed Time信息,主要有总线程数量、开销时间(花费在同步和线程库函数的时间)、自旋时间(CPU等待其它同步资源处理的自旋等待时间)、CPU时间(CPU运行程序所花费的总时间)和暂停时间。

Top Hotspots信息,会列举VTune分析的程序里的活跃度最高(最耗时)的部分,例如:自旋锁、函数等。

  • Bottom-up

Bottom-up可以查看函数/模块/线程调用时间的耗费,主要分析的数据有:进程、线程、模块、函数和调用的堆栈信息。可以显示程序的进程、线程号,函数的开始地址,CPU开销时间,CPU自旋时间等信息。

导入源文件后,可以分析到具体某行函数占用cpu的时间。

  • Caller/Callee

Caller/Callee主要分析的数据有:CPU总利用时间、各个函数自我利用时间、各个函数的自我开销时间、各个函数的调用者和被调用者等。

  • Thread

Tasks and Frames主要以直方图的形式详细展示了各个线程的运行时间。

  • Flame graph

CPU火焰图,可以看到CPU 执行的函数名以及调用栈(stack),可以清晰地看到程序中花费执行时间最长的函数。

文章来自个人专栏
性能优化
2 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
1