perf-tools简介

一个开发中的Linux性能测试使用的工具,能够收集ftrace和perf_events中乱七八糟的参数。ftrace和perf都是Linux中的内核跟踪工具,包含在Kernel中。ftrace在多数系统中已经存在,但perf可能需要添加额外的软件包。
这些工具设计的很容易安装(较少的依赖),能提供详细直观的性能参数,并且操作简单。本教程由Brendan Gregg (DTraceToolkit的作者)创建。
这些工具以服务的方式运行在内核中,因此多数工具都有说明手册(man帮助手册),并且工具需要保证内核特性向前兼容或者能够和新的跟踪工具集成。
本教程适用于Linux3.2及更新的版本。Linux2.6.x版本请参考警告页。

演示

这些工具在USENIX LISA 2014 presentation: Linux Performance Analysis: New Tools and Old Secrets中有相关演示

  • PPT:http://www.slideshare.net/brendangregg/linux-performance-analysis-new-tools-and-old-secrets
  • 视频:Linux Performance Analysis: New Tools and Old Secrets | USENIX

主题

使用ftrace:

  • iosnoop: 追踪磁盘IO细节和潜在问题。示例。
  • iolatency: 柱状图显示磁盘IO状况。示例。
  • execsnoop: 追踪exec()进程的状态和命令行参数。示例。
  • opensnoop: 追踪open()系统调用情况显示文件名。示例。
  • killsnoop: 追踪kill()信号显示进程和信号详细信息。示例。
  • fs/cachestat: Linux页缓存的命中/丢失统计。示例。
  • net/tcpretrans: 显示TCP的重发情况,包括地址等详细信息。示例。
  • system/tpoint: 根据给定的追踪点追踪。示例。
  • kernel/funccount: 显示内核函数的调用次数,支持通配符匹配。示例。
  • kernel/functrace: 跟踪内核函数的调用,支持通配符匹配。示例。
  • kernel/funcslower: 跟踪调用慢于设定阈值的内核函数。示例。
  • kernel/funcgraph: 图表方式显示某个内核函数的调用,包括子函数和调用时间。示例。
  • kernel/kprobe: 动态地追踪某个内核函数的调用和返回,及其参数。示例。
  • user/uprobe: 动态地追踪某个用户函数的调用和返回,及其参数。示例。
  • tools/reset-ftrace: 必要时重置ftrace的状态(正常情况下不会使用该功能)。示例。

使用perf_events:

  • misc/perf-stat-hist: 聚合某个追踪点的变量。示例。
  • syscount: 使用系统调用来统计系统调用。示例。
  • disk/bitesize: 柱状图显示磁盘IO数量。示例。

使用eBPF:

  • 未来功能的预览,参考bcc工具的章节。

截图

显示新进程及其参数:

#./execsnoop
Tracing exec()s. Ctrl-C to end.
Instrumenting sys_execvePID   PPID ARGS22497  22485 gawk -v o=1 -v opt_name=0 -v name= -v opt_duration=0 [...]22524  22488 cat -v trace_pipe22670   1822 /usr/sbin/sshd -D -R22717  22670 /usr/sbin/unix_chkpwd root nonull22718  22670 /usr/sbin/unix_chkpwd root chkexpiry22720    718 /usr/bin/pkla-check-authorization gdm true true org.freedesktop.packagekit.trigger-offline-update22722    718 /usr/bin/pkla-check-authorization gdm true true org.freedesktop.packagekit.trigger-offline-update22724    718 /usr/bin/pkla-check-authorization gdm true true org.freedesktop.packagekit.trigger-offline-update22725  22670 -bash

从complate队列中的数量来分析块设备IO潜在问题:

#./iolatency -Q
Tracing block I/O. Output every 1 seconds. Ctrl-C to end.>=(ms) .. <(ms)   : I/O      |Distribution                          |0 -> 1       : 5        |######################################|>=(ms) .. <(ms)   : I/O      |Distribution                          |0 -> 1       : 5        |######################################|>=(ms) .. <(ms)   : I/O      |Distribution                          |0 -> 1       : 24       |######################################|1 -> 2       : 1        |##                                    |2 -> 4       : 0        |                                      |4 -> 8       : 3        |#####         

跟踪block:block_rq_insert跟踪点,只显示读取时内核栈信息:

#./system/tpoint -s block:block_rq_insert 'rwbs ~ "*R*"'
Tracing block:block_rq_insert. Ctrl-C to end.kworker/3:2-26941 [003] d... 250230.367391: block_rq_insert: 0,0 R 8 (4a 01 00 00 10 00 00 00 08 00) 0 + 0 [kworker/3:2]kworker/3:2-26941 [003] d... 250230.367423: <stack trace>=> blk_execute_rq=> scsi_execute=> scsi_execute_req_flags=> sr_check_events=> cdrom_check_events=> sr_block_check_events=> disk_check_events=> disk_events_workfn=> process_one_work=> worker_thread=> kthread

统计以“bio_”开始的内核函数的调用,时间间隔为1秒:

#./kernel/funccount -i 1 'bio_*'
Tracing "bio_*"... Ctrl-C to end.FUNC                              COUNT
bio_advance                           5
bio_end_flush                         5
bio_get_nr_vecs                       6
bio_integrity_enabled                 6
bio_add_page                         14
bio_disassociate_task                15
bio_endio                            15
bio_alloc_bioset                     17
bio_put                              20[...]

在工具的example/目录中还有许多示例,也可以查阅man手册。


准备

本节力求简洁,更多Linux3.2服务器调试信息的细节请参考man手册。

ftrace

FTRACE集成在内核中,所以在系统中可能已经存在并且可以使用。FTRACE在2.6.27版本内核中首次集成,需要参数CONFIG_FTRACE和其他FTRACE工具依赖的选项。有些工具(如cunccount)还要依赖CONFIG_FUNCTION_PROFILER选项。

perf_events

需要首先安装“perf”命令使用的工具软件,位于linux-tool-common软件包中。安装完成后,perf可能会提示安装一个额外的linux工具(linux-tool-kernel_version)。perf也可以从内核源码中的tools/perf中编译安装。参考perf_events要求来获取使用perf_events完整功能的详细信息。

debugfs

需要内核选项CONFIG_DEBUG_FS的支持,与FTRACE一样,debugfs可能已经在系统中启用(2.6.10-rc3之后的内核)。debugfs需要被挂载后使用:

# mount -t debugfs none /sys/kernel/debug

awk

工具中的脚本大量使用了awk工具,根据功能目的会选择使用mawk或gawk:mawk用来缓存输出(更快的速度),gawk用来同步输出(更有效的分组输出)。


安装

工具本身使一些脚本,可以这样来抓取所有内容:

git clone --depth 1 https://github.com/brendangregg/perf-tools
  • 1

或者使用github源URL获取单个的脚本:

wget https://raw.githubusercontent.com/brendangregg/perf-tools/master/iosnoop

警告

Ftrace在Linux2.6.27版本内核中首次集成,perf_events则是在2.6.31版本中加入。早前的版本可能存在一些缺陷,这些锁或致命的问题在2.6.32系列内核中被发现。包括CentOS6.x,如果需要分析旧版本的系统内核,此工具需要在容错环境中使用,如实验测试环境。但是在Linux3.2及之后的内核中没有问题。
使用此工具也存在一些限制,具体信息如下。


内部开销

perf_events是在不断衍变的,这个系列主要是为Linux3.2内核所开发,而且也缺乏功能规划,这些可能在将来的内核中加入。在此之前,该工具依然利用欺骗和侵入内核的方式工作。有的工具会将事件发送到用户空间进行处理,这会比在内核空间处理带来更大的开销。每个工具的使用开销在其man手册页中有具体的描述。
警告:在某些极端情况下,使用该工具会使应用运行速度下降5倍。取决于此工具和内核的版本,也可能导致内核的崩溃。阅读程序头部的警告信息并且在使用前进行测试。
如果工具的开销是个问题,那么也可以进行改良。程序可以使用C语言重写,并且调用perf_events_open() 和 mmap()函数获得栈缓存。也可以用C语言实现频率统计,并且直接使用mmap()函数处理,而不必使用awk、Perl、Python等处理。基于ftrace的工具还可以进行一些额外的改进,比如使用快照和预分配缓存。
这些工具被作为内核功能补充被短期维护,所以有很大的可能被重写。旧版本的工具也会保存在仓库中供旧版本的内核使用。

(省略……)


链接

案例学习和总结

  • 2014.08.13 Ftrace: The hidden light switch [LWN.net] Ftrace: The hidden light switch

perf-tools相关推荐

  1. Google Perf Tools安装以及使用

    Google Performance Tools安装以及使用 这边文章都记录在github:https://github.com/NIGHTFIGHTING/gperftools-tutorial 一 ...

  2. Linux perf tools

    http://techblog.netflix.com/2015/08/netflix-at-velocity-2015-linux.html 转载于:https://www.cnblogs.com/ ...

  3. 关于 Rocksdb 性能分析 需要知道的一些“小技巧“ -- perf_context的“内功” ,systemtap、perf、 ftrace的颜值

    文章目录 内部工具 包含头文件 接口使用 核心指标 Perf Context IOStats Context 外部工具 Systemtap 工具 Perf工具 Ftrace 工具 2020.8.20 ...

  4. 【程序性能分析利器】Google Perf Tool 和 Valgrind 工具包简介

    Google Perf Tools 的安装和使用 Gperf 工具包包含如下几个工具: 一个优化的内存管理算法-tcmalloc性能优于malloc. 一个用于CPU profile的工具,用于检测程 ...

  5. perf Examples

    为什么80%的码农都做不了架构师?>>>    These are some examples of using the perf Linux profiler, which has ...

  6. Perf -- Linux下的系统性能调优工具,第 2 部分

    https://www.ibm.com/developerworks/cn/linux/l-cn-perf2/ Perf -- Linux下的系统性能调优工具,第 2 部分 刘 明, 软件工程师, 上 ...

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

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

  8. perf part II

    Perf – Linux下的系统性能调优工具,第 2 部分 特殊用法以及内核调优示例 刘 明 2011 年 6 月 02 日发布 分享此页面 WeiboGoogle+用电子邮件发送本页面 2 本文内容 ...

  9. perf 程序追踪 USDT 用户态程序静态跟踪点

    perf 中的 usdt 在学习 ebpf 的 usdt 探针的时候遇到了问题,看了一些网上的链接,在 gregg 大神的博客中找到了 perf 中与 usdt 相关的内容,就研究了一下. perf ...

  10. perf与火焰图使用介绍

    一.介绍 perf是linux上的性能分析工具,perf可以对event进行统计得到event的发生次数,或者对event进行采样,得到每次event发生时的相关数据(cpu.进程id.运行栈等),利 ...

最新文章

  1. 结对编程--------四则运算 实验总结2
  2. DNN数据库核心表结构及设计思路探研
  3. OpenCV 1.x 2.x 编程简介(矩阵/图像/视频的基本读写操作)
  4. 53.连续分区分配vs分连续分区分配
  5. 解决Com调用AutoCAD被呼叫方拒绝接收呼叫
  6. Django简单打开一个文件
  7. 95-140-134-源码-transform-KeyedStream的intervalJoin
  8. 新职业风口已至!人社部宣布这 10 个职业缺口近千万!
  9. 函数开始处的MOV EDI, EDI的作用
  10. spark User class threw exception: java.lang.NoSuchMethodError
  11. 合力叉车3d模型_文章分享:《种植体颈部壁厚度和基台螺钉尺寸的生物力学评估:3D非线性有限元分析》...
  12. [从源码学设计]蚂蚁金服SOFARegistry之服务上线
  13. SpringBoot 请求相关
  14. ASML、光刻机小文预告
  15. BZOJ4567 [SCOI2016]背单词
  16. 武忠祥老师每日一题||不定积分基础训练(六)
  17. CentOS之——Bringing up interface eth0: Determining if ip address 192.168.1.81 is already in use for de
  18. OC7141 PWM 调光的线性降压 LED 恒流驱动器
  19. 免费空间如何建设网站?
  20. 再添新认证!云和恩墨 zCloud 与华为 FusionCube 完成兼容性测试

热门文章

  1. 网络广告,什么是“露出”,“CPC”,“CPL”,“CPS”,佣金?网络广知识
  2. 一步一步完成 MIT-6.824-Lab1 : MapReduce 之二
  3. 啥PPT看着就“贵“?恐怕只有它了-黑金配色方案
  4. Ubuntu20.04 运行 EasyConnect
  5. 在docker容器中使用easyconnect
  6. 6月27日服务器例行维护公告,6月27日周版本更新维护内容公告
  7. Python3数据分析与挖掘建模(6)单因子分析:离散分布分析示例
  8. 数学:开区间(open)和闭区间(closed)的含义
  9. 原来都是crontab惹的祸,服务器系统差点重置了/呜呜呜
  10. 用Matlab仿真点电荷电场强度和电位(势)求点电荷Q的电势强度和电势,点电荷的电场线和等势线是什么形状?