perf工具使用介绍
- 格式:pdf
- 大小:2.29 MB
- 文档页数:27


perf 命令 实例
# 使用perf命令进行系统性能分析。
在Linux系统中,perf命令是一个非常强大的性能分析工具,它可以用来对系统的各种性能指标进行监测和分析。通过perf命令,我们可以了解系统的CPU利用率、内存使用情况、磁盘IO性能等关键指标,帮助我们找出系统性能瓶颈并进行优化。
下面我们来看一个实际的perf命令使用实例。
## 实例,监测CPU利用率。
假设我们想要监测系统中某个进程的CPU利用率,我们可以使用perf命令来实现。首先,我们需要安装perf工具(在大多数Linux发行版中,它会随着内核一起安装)。
bash.
perf stat -p 。
上面的命令将监测指定进程的CPU利用率,并在监测结束后显示统计结果。
## 实例,性能事件采集。
除了监测CPU利用率,perf还可以用来采集各种性能事件,比如指令执行、缓存命中率等。以下是一个示例命令,用来采集指令执行事件:
bash.
perf record -e instructions -p 。
上面的命令将采集指定进程的指令执行事件,并将结果保存到perf.data文件中。
## 实例,性能图形化展示。
perf还提供了一些工具来对采集到的性能数据进行图形化展示,比如perf report和perf annotate。这些工具可以帮助我们更直观地了解系统的性能状况,并找出性能瓶颈。
bash.
perf report.
上面的命令将以图形化界面展示perf.data文件中的性能数据统计结果。
总结来说,perf命令是一个非常强大的系统性能分析工具,通过它我们可以方便地监测系统各种性能指标,并进行深入的性能分析。希望本文的实例能够帮助你更好地使用perf命令进行系统性能分析。
Linux的系统级性能剖析工具‐perf (一) 承刚 TAOBAO Kernel Team chenggang.qin@ 前言
在软件规模庞大与硬件成本相对廉价的时代,系统级性能分析和优化常被开发与测试人员忽视。但是随着虚拟化和云计算时代的到来,对计算资源按需付费
的盈利模式要求系统软件与应用软件的开发者们必须对硬件资源的使用效率精
益求精。在嵌入式领域更是如此。而且在互联网企业中,应用程序的性能提升对
节约服务器成本来说至关重要。由于服务器集群异常庞大,软件性能的些许提升
都有可能带来成本的大幅降低[1]。系统级性能优化是提升程序性能的重要步骤。
但是,目前针对系统级性能优化的参考资料很稀缺,开发与测试人员往往不了解
系统级性能优化的意义和方法。
系统级性能优化是指为了提高应用程序对操作系统资源与硬件资源的使用
效率,或者为了提高操作系统对硬件资源的使用效率而进行的代码优化。通过提
高对操作系统资源与硬件资源的利用率,使得应用程序与基础软硬件平台具有更
好的交互性,往往可以显著提升应用程序的执行速度和稳定性。系统级性能优化
通常包括2个阶段,分别是性能剖析(performance profiling)和代码优化。性能
剖析阶段的目标是寻找性能瓶颈,查找引发性能问题的原因及热点代码。代码优
化阶段的目标是针对具体的性能问题而优化代码与编译选项,以改善软件性能。
在代码优化阶段往往需要凭借开发者的经验,编写简洁高效的代码,甚至在汇编
语言级别合理使用各种指令,合理安排各种指令的执行顺序。而在性能剖析阶段,则需要借助于现有的profiling工具,如perf,VTune,Oprofile等。其中perf相比
较于其它工具而言,具有特殊的优势。它不仅开源,而且内置于内核源码树。在
如今upstream kernel的开发中,perf是发展较快的领域之一。淘宝内核组也介入
了perf的开发工作。
本文是系统级性能分析系列文章的第一篇,主要介绍性能分析工具perf的
系统级性能分析⼯具perf的介绍与使⽤
测试环境:Ubuntu16.04 + Kernel:4.4.0-31
系统级性能优化通常包括两个阶段:性能剖析(performance profiling)和代码优化。
性能剖析的⽬标是寻找性能瓶颈,查找引发性能问题的原因及热点代码。
代码优化的⽬标是针对具体性能问题⽽优化代码或编译选项,以改善软件性能。
在性能剖析阶段,需要借助于现有的profiling⼯具,如perf等。在代码优化阶段往往需要借助开发者的经验,编写简洁⾼效的代码,甚⾄在汇编级别合理使⽤各种指令,合理安排
各种指令的执⾏顺序。
perf是⼀款Linux性能分析⼯具。Linux性能计数器是⼀个新的基于内核的⼦系统,它提供⼀个性能分析框架,⽐如硬件(CPU、PMU(Performance Monitoring Unit))功能和软件
(软件计数器、tracepoint)功能。
通过perf,应⽤程序可以利⽤PMU、tracepoint和内核中的计数器来进⾏性能统计。它不但可以分析制定应⽤程序的性能问题(per thread),也可以⽤来分析内核的性能问题,
当然也可以同事分析应⽤程序和内核,从⽽全⾯理解应⽤程序中的性能瓶颈。
使⽤perf,可以分析程序运⾏期间发⽣的硬件事件,⽐如instructions retired、processor clock cycles等;也可以分析软件时间,⽐如page fault和进程切换。
perf是⼀款综合性分析⼯具,⼤到系统全局性性能,再⼩到进程线程级别,甚⾄到函数及汇编级别。
perf提供了⼗⼋般武器,可以拿⼤⼑⼤卸⼋块,也可以拿起⼿术⼑细致分析。
1. 背景知识
1.1 tracepoints
tracepoints是散落在内核源码中的⼀些hook,它们可以在特定的代码被执⾏到时触发,这⼀特定可以被各种trace/debug⼯具所使⽤。
perf将tracepoint产⽣的时间记录下来,⽣成报告,通过分析这些报告,条有⼈缘便可以了解程序运⾏期间内核的各种细节,对性能症状做出准确的诊断。
Linux的系统级性能剖析工具‐perf (三) 承刚 TAOBAO Kernel Team chenggang.qin@ 第四章 perf stat
4.1 perf stat的基本使用方法
perf stat工具用来剖析一个应用程序的性能概况。使用方法非常简单,下面的命令能够得到’ls’程序的一些典型性能数据: $perf stat ls 上述命令给出的性能概况如图16所示。
图16. perf stat ls的输出结果
从图上可以看到,perf stat工具利用10个典型性能事件剖析了应用程序。
task‐clock事件表示目标任务’ls’真正占用处理器的时间,单位是毫秒。我们将其称为任务执行时间。如图16所示,’ls’在处理器上执行了近4毫秒。“0.256 CPUs
utilized”表示目标任务的处理器占用率。处理器占用率表示目标任务的执行时间与持续时间的比值。持续时间是指从任务提交到执行结束之间的总时间。对操作
系统有过了解的读者应该知道,Linux这种多任务分时操作系统中,一个任务不
太可能在执行期间始终占据处理器。操作系统会根据调度策略(linux目前使用CFS调度算法)合理安排各个任务轮流使用处理器,每次调度会产生一次上下文切换。在此期间操作系统还需处理大量中断。因此,一个任务的执行时间可能会
很短,但是它的持续时间会远高于此(除非此任务是优先级最高的实时任务)。
以图16中的例子来说,’ls’的执行时间为3.98毫秒,而持续为15.58毫秒,处理
器占用率为0.256。在此期间,系统共发生了45次上下文切换。平均每秒发生
0.011*106次。上下文切换次数的均值是上下文切换次数与任务执行时间的比值。
在多(核)处理器系统中,Linux为了维持各个处理器的负载均衡,会在特
定条件下将某个任务从一个处理器迁往另外一个处理器。此时,我们便说发生了
一次处理器迁移。从图16上看到,ls在执行期间没有被操作系统迁移过。