perf是Linux内核内置的性能分析工具。从内核版本2.6.31开始出现该工具,如果没有安装,可以使用以下命令进行安装
yum -y install perf.x86_64
这里我们主要介绍一下如何使用,一些具体的背景知识,请查阅参考链接。

perf list列出能查看的性能事件,这里可以看做是事件的一些分类

#perf list -h
usage: perf list [hw|sw|cache|tracepoint|pmu|event_glob]

可以进一步查看hw(Hardware)分类的事件,只举例,不再列举

#perf list hwcpu-cycles OR cycles                               [Hardware event]instructions                                       [Hardware event]cache-references                                   [Hardware event]cache-misses                                       [Hardware event]branch-instructions OR branches                    [Hardware event]branch-misses                                      [Hardware event]stalled-cycles-frontend OR idle-cycles-frontend    [Hardware event]stalled-cycles-backend OR idle-cycles-backend      [Hardware event]ref-cycles                                         [Hardware event]

使用perf stat

一个简单的c程序,foo1和foo2分别调用longa()100次和10次
# cat  perf.c
//test.c
void longa()
{ int i,j; for(i = 0; i < 1000000; i++) j=i; //am I silly or crazy? I feel boring and desperate.
} void foo2()
{ int i; for(i=0 ; i < 10; i++) longa();
} void foo1()
{ int i; for(i = 0; i< 100; i++) longa();
} int main(void)
{ foo1(); foo2();
}
# cc perf.c
# perf stat ./a.outPerformance counter stats for './a.out':331.445189      task-clock (msec)         #    0.999 CPUs utilized          0      context-switches          #    0.000 K/sec                  1      cpu-migrations            #    0.003 K/sec                  104      page-faults               #    0.314 K/sec                  571,668,722      cycles                    #    1.725 GHz                     [83.39%]241,223,545      stalled-cycles-frontend   #   42.20% frontend cycles idle    [83.41%]2,915,367      stalled-cycles-backend    #    0.51% backend  cycles idle    [66.82%]550,449,588      instructions              #    0.96  insns per cycle        #    0.44  stalled cycles per insn [83.41%]110,422,677      branches                  #  333.155 M/sec                   [83.40%]6,461      branch-misses             #    0.01% of all branches         [83.10%]0.331874225 seconds time elapsed
以上也可以通过-e选项,指定需要分析的事件,也就是perf list列出的事件,多个事件可以通过逗号分隔。如下,添加 cache-references,cache-misses选项查看cache相关的事件。
#perf stat -e cache-references,cache-misses ./a.outPerformance counter stats for './a.out':10,718      cache-references                                            2,249      cache-misses              #   20.983 % of all cache refs    0.340821068 seconds time elapsed

使用perf top

打开一个窗口,新建一个数据库,并用pgbech进行数据写入测试
hank=# \c  postgres postgres
You are now connected to database "postgres" as user "postgres".
postgres=# create database  perf_database;
CREATE DATABASE
postgres=# grant all on DATABASE perf_database to hank;
GRANT
postgres=# \q$pgbench  -i perf_database -h 127.0.0.1 -U hank perf_database
dropping old tables...
NOTICE:  table "pgbench_accounts" does not exist, skipping
NOTICE:  table "pgbench_branches" does not exist, skipping
NOTICE:  table "pgbench_history" does not exist, skipping
NOTICE:  table "pgbench_tellers" does not exist, skipping
creating tables...
generating data...
100000 of 100000 tuples (100%) done (elapsed 0.06 s, remaining 0.00 s)
vacuuming...
creating primary keys...
done.执行压测pgbench
pgbench -M prepared -n -r -P 1  -h 127.0.0.1 -U hank perf_database -c 32 -j 32 -T 600

另外一个窗口使用perf top 进行查看,如下
perf top -agv -F 1000
命令参数见perf top --help,这里a指所有cpu,-g表示打开call-graph,-v表示展示更多信息,-F 表示频率

perf record和perf report使用,一般这一对命令一起使用

先看一个简单的例子:

还是上面c程序例子
编译
cc perf.c
收集
perf record  -g ./a.out
生成报告
perf report -vg

可以看到foo1和foo2 在cpu使用上的比例,分别是90.76%和8.88%,基本符合代码,代码中一个循环100次,一个10次

再看一个postgresql使用pgbench的例子:

一个窗口执行pgbench
pgbench -M prepared -n -r -P 1  -U hank perf_database -c 32 -j 32 -T 600另外的窗口收集信息
收集20秒,当然也可以ctrl+c终止。
perf record -avg -- sleep 20生成报告
perf report -v -n  -g

也可以使用–stdion查看

perf report -v -n  -g --stdio

如下图

参考:
https://www.ibm.com/developerworks/cn/linux/l-cn-perf1/
https://www.ibm.com/developerworks/cn/linux/l-cn-perf2/
https://github.com/digoal/blog/blob/master/201611/20161129_01.md

Linux性能分析工具perf基础使用介绍相关推荐

  1. 2022最火的Linux性能分析工具--perf

    ►►► 介绍 perf是Linux性能分析中,比较常用的一款工具.它基于时间采集原理,以性能事件为基础,支持针对CPU处理器相关性能指标与操作系统相关性能指标的性能分析.常被用来查找.定位源码级性能问 ...

  2. linux 性能分析工具perf

    perf 性能监控分析工具 perf 工具下载 https://cdn.kernel.org/pub/linux/kernel/tools/perf/v5.9.0/perf-5.9.0.tar.gz ...

  3. linux 性能分析工具——perf

    Perf 简介 Perf 是用来进行软件性能分析的工具. 通过它,应用程序可以利用 PMU,tracepoint 和内核中的特殊计数器来进行性能统计.它不但可以分析指定应用程序的性能问题 (per t ...

  4. linux 系统级性能分析工具 perf 的介绍与使用

    目录 1. 背景知识 1.1 tracepoints 1.2 硬件特性之cache 2. 主要关注点 3. perf的使用 3.0 perf引入的overhead 3.1 perf list 3.2 ...

  5. 系统级性能分析工具perf的介绍与使用

    测试环境:Ubuntu16.04 + Kernel:4.4.0-31 apt-get install linux-source cd /usr/src/tools/perf make &&am ...

  6. java perf_系统级性能分析工具perf的介绍与使用

    测试环境:Ubuntu16.04 + Kernel:4.4.0-31 系统级性能优化通常包括两个阶段:性能剖析(performance profiling)和代码优化. 性能剖析的目标是寻找性能瓶颈, ...

  7. linux 解析pdf下载工具,Linux高级系统级性能分析工具-perf.pdf

    Linux高级系统级性能分析工具-perf Linux 的系统级性能剖析工具‐perf (二) 承刚 TAOBAO  Kernel Team chenggang.qin@ 第三章  Perf top ...

  8. Linux 性能分析工具汇总

    Linux 性能分析工具汇总 我从cnaaa.com购买了服务器. 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章.本文也可以作为检验基础知识的指标,另外文章涵盖了一个系 ...

  9. 【开发工具】【perf】性能分析工具perf的编译和使用说明

    源码位置: kernel/tools/perf 配置内核以支持perf make xxx_defconfig make menuconfig设置以下配置: CONFIG_HAVE_PERF_EVENT ...

最新文章

  1. UI设计培训之:5个小技巧快速学会PS抠图
  2. ArrayList的实现及原理
  3. 运维调试记录:Opendaylight铍版本开发环境搭建流程
  4. ORMLite框架 的使用方法---给你的数据库操作插上翅膀
  5. Hadoop入门经典:WordCount
  6. linux shutdown 命令 关机 重启
  7. D3 dataset - what is usage of key function in data
  8. ubuntu mysql innodb_Ubuntu MYSQL环境搭建
  9. java 发送邮件添加附件_java邮件自动发送时添加网络附件
  10. ios 请在设置中打开相机权限_在iOS中请求摄像头权限对话框启动(Prime权限)
  11. 1000道Python题库系列分享六(40道)
  12. python实现50行代码_利用 50行Python 代码构建一个在线文本生成器!
  13. smb协议讲解_SMB/CIFS协议解析
  14. numpy部份函数或命令用法(不定时更新)
  15. ​华为回应出售手机业务传闻:假消息;微软将ChatGPT整合到更多工具中:不用写代码就能开发应用;苹果更新Mac产品线|极客头条...
  16. qtablewidget翻页禁止_PyQt—QTableWidget实现翻页功能
  17. 2021最新短信验证码接收平台收费价格对比「二」:亿佰云、秒嘀科技、极光短信、华信云通信
  18. SQL中去除重复数据的几种方法,我一次性都告诉你​
  19. 阿里云高级技术专家白常明:边缘云的技术挑战和应用创新
  20. 人体感应(红外感应)

热门文章

  1. odbc An unsupported operation was attempted
  2. 【今日分享】官方实例用python调用OpenAI tahcTPG的APIkey生成智能问答
  3. 软考分类精讲-知识产权与标准化
  4. 如何用纯 CSS 创作一只愤怒小鸟中的绿猪
  5. C++实验3-税收计算
  6. U-BOOT中mmc命令简介
  7. 从零开始足球战术分析
  8. 码绘:使用p5.js进行简单的作画
  9. win7 共享计算机 网络密码怎么设置,Win7无线网络共享设置方法丨Win7无线网络共享设置方法图解...
  10. CSS解决hover选择器生硬效果