perf 您所在的位置:网站首页 编译perf perf

perf

2023-03-16 08:14| 来源: 网络整理| 查看: 265

Perf tools是由内核维护人员Ingo Molnar等人开发的linux内核的综合性能该要分析工具。通过它,应用程序可以利用 PMU,tracepoint 和内核中的特殊计数器来进行性能统计。它不但可以分析指定应用程序的性能问题 (per thread),也可以用来分析内核的性能问题,当然也可以同时分析应用代码和内核,从而全面理解应用程序中的性能瓶颈。

环境

OS

ubuntu 16.04.5 LTS

Kernel

12$ uname -aLinux ubuntu-linux 4.4.0-138-generic #164-Ubuntu SMP Tue Oct 2 17:16:02 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux 安装

perf的安装可以分成两种,一种是package安装法;

1sudo apt install linux-tools-common linux-tools-4.4.0-138-generic

另一种安装方法是源码安装,这种方法需要先下载当前内核对应的源代码,

12# 下载 4.4.0-138 源码sudo apt-get install linux-source=4.4.0.138.144

然后进入/usr/src目录中的源代码目录下,找到tools/perf目录,并在该目录下执行make编译perf源码,再执行make install安装perf

perf使用姿势姿势一选择分析的事件

通过perf list列出可以选择的分析事件

概要分析数据

使用perf top和perf stat进行该要分析系统性能,perf top类似于linux的top命令,按进程显示分析数据,可以使用-e参数指定分析事件,通过perf top找出系统中的问题进程。(更多关于perf top的使用精请见perf top -h)

perf stat用于汇总综合性能,有人用此方法比较性能改善前后的结果。

1234567891011121314Performance counter stats for 'ls /': 0.827614 task-clock (msec) # 0.707 CPUs utilized 0 context-switches # 0.000 K/sec 0 cpu-migrations # 0.000 K/sec 91 page-faults # 0.110 M/sec cycles stalled-cycles-frontend stalled-cycles-backend instructions branches branch-misses 0.001169835 seconds time elapsed

(由于我使用的是VM,所有有很多不支持的)

task clock 进程执行所花费的时间,CPU 利用率,该值高,说明程序的多数时间花费在 CPU 计算上而非 IO。 context switches 进程切换次数,记录了程序运行过程中发生了多少次进程切换,频繁的进程切换是应该避免的。 cpu migrations 进程运行过程中发生了多少次 CPU 迁移,即被调度器从一个 CPU 转移到另外一个 CPU 上运行。 page faults 按需分页或交换等过程中使用的页面错误的发生次数和频率 cycles 处理器时钟,一条机器指令可能需要多个 cycles instructions 机器指令数目 branches 分支命令的数量和频率 branch misses 分支预测错误的比例 分析记录的数据记录并保存分析数据

通过perf record命令实现将分析数据保存到perf.data(默认)文件中,虽然perf top也能获取分析数据,但是perf top每隔2秒(默认)更新一次,而且对于一些特殊case不好抓取。perf record特别适合针对某个进程某个事件的分析非常好用。具体使用方法可以参考perf record -h

查看保存的分析数据

通过perf report查看perf.data(默认),perf report分析内容的查看与perf top的查看方式相同。

姿势二perf script

一般情况下,我们可以通过perf record+-e指定追踪事件方式来获取进程相关事件分析数据(perf.data),然后通过perf script(不加任何脚本情况下)只显示记录到的追踪事件数据。若perf script后指定脚本,那么会将记录到的追踪事件数据作为输入,传递给指定的脚本处理。

perf脚本处理数据分为在线处理和离线处理;

在线处理 在进行追踪的同时运行脚本,则不可避免地会增加负载 eg: perf script sctop 统计系统调用次数 离线处理 进行离线处理时先追踪后处理,可以抑制处理对追踪对象的影响 eg: perf script record syscall-counts ls / 先追踪,后处理;perf script report syscall-counts 查看统计系统调用次数结果

自定义脚本

用户可根据自己的需求编写自己的Python或Perl脚本处理追踪事件数据,二者分别需要安装libpython或libperl,并且需要重新build perf。

过程:

先记录必要事件的数据文件 使用perf record记录执行ls /过程中内存分配kmalloc()的相关事件数据 eg: perf record -e kmem:kmalloc -e raw_syscalls:sys_enter ls / 生成自定义脚本 使用perf script -g perl(perl脚本) or perf script -g python(python脚本)生成自定义脚本,根据需要修改生成的脚本内容 执行自定义脚本 使用perf script+-s参数指定用户自定义的脚本执行追踪处理 姿势三

Todo…

perf tools这把瑞士军刀可以说功能齐全威力惊人,但能将其发挥几层还要看使用者的功力如何。

参考&鸣谢 ubuntu apt-get 安装指定版本软件 Perf – Linux下的系统性能调优工具,第 1 部分 系统级性能分析工具perf的介绍与使用


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有