Linux高级系统级性能分析工具-perf
linux上perf工具使用方法

linux上perf工具使用方法
Perf是用来进行软件性能分析的工具,它可以分析指定应用程序的性能问题(per thread),也可以用来分析内核的性能问题,还可以同时分析应用代码和内核,从而全面理解应用程序中的性能瓶颈。
使用Perf可以分析程序运行期间发生的硬件事件,比如instructions retired、Processor clock cycles等;也可以分析软件事件,比如Page Fault和进程切换。
它还具有众多的性能分析能力,例如,可以计算每个时钟周期内的指令数(IPC),IPC偏低表明代码没有很好地利用CPU;可以对程序进行函数级别的采样,从而了解程序的性能瓶颈究竟在哪里。
总的来说,Perf是一款强大的性能分析工具,可以帮助用户深入了解应用程序和内核的性能。
在使用Perf时,用户需要根据具体的需求和场景选择适当的命令和参数,以获得准确的分析结果。
perf用法

perf用法详解perf是Linux系统下的性能分析工具,可以用于分析程序的性能瓶颈和优化程序。
下面将详细介绍perf的用法和常见用法。
一、perf的基本用法1.安装perf在Ubuntu系统下,可以使用以下命令安装perf:2.使用perf record记录性能事件使用以下命令可以记录程序运行时的性能事件:其中,-g表示记录调用栈信息,-p表示记录指定进程的pid。
执行完毕后,会生成一个名为perf.data的文件,其中包含了程序运行时的性能事件信息。
3.使用perf report分析性能事件使用以下命令可以分析perf.data文件中的性能事件:该命令会显示程序运行时的性能事件报告,包括每个函数的CPU占用情况、调用栈信息等。
二、perf的常见用法1.性能分析使用perf record和perf report可以分析程序的性能瓶颈,找到CPU占用较高的函数或线程,从而进行优化。
2.内存泄漏检测使用perf工具可以检测程序的内存泄漏情况。
例如,可以使用以下命令检测程序是否存在内存泄漏:其中,-o表示输出结果到指定文件,--表示后面的参数为程序和参数。
执行完毕后,生成一个名为output_file的文件,其中包含了程序运行时的性能事件信息。
然后可以使用以下命令分析内存泄漏:其中,--sort=dso表示按照共享库名称进行排序,--dso表示只显示共享库名称。
执行完毕后,会显示程序运行时的内存占用情况报告,包括每个共享库的内存占用情况、调用栈信息等。
如果某个共享库的内存占用较高,则可能是该共享库存在内存泄漏问题。
3.缓存失效分析使用perf工具可以分析程序的缓存失效情况。
例如,可以使用以下命令分析程序运行时的缓存失效情况:其中,--表示后面的参数为程序和参数,--表示其他选项参数。
执行完毕后,生成一个名为output_file的文件,其中包含了程序运行时的性能事件信息。
然后可以使用以下命令分析缓存失效情况:其中,--sort=sym表示按照函数名称进行排序。
Linux的系统级性能剖析工具-perf-1

Linux的系统级性能剖析工具‐perf(一)承刚TAOBAO Kernel Teamchenggang.qin@前言在软件规模庞大与硬件成本相对廉价的时代,系统级性能分析和优化常被开发与测试人员忽视。
但是随着虚拟化和云计算时代的到来,对计算资源按需付费的盈利模式要求系统软件与应用软件的开发者们必须对硬件资源的使用效率精益求精。
在嵌入式领域更是如此。
而且在互联网企业中,应用程序的性能提升对节约服务器成本来说至关重要。
由于服务器集群异常庞大,软件性能的些许提升都有可能带来成本的大幅降低[1]。
系统级性能优化是提升程序性能的重要步骤。
但是,目前针对系统级性能优化的参考资料很稀缺,开发与测试人员往往不了解系统级性能优化的意义和方法。
系统级性能优化是指为了提高应用程序对操作系统资源与硬件资源的使用效率,或者为了提高操作系统对硬件资源的使用效率而进行的代码优化。
通过提高对操作系统资源与硬件资源的利用率,使得应用程序与基础软硬件平台具有更好的交互性,往往可以显著提升应用程序的执行速度和稳定性。
系统级性能优化通常包括2个阶段,分别是性能剖析(performance profiling)和代码优化。
性能剖析阶段的目标是寻找性能瓶颈,查找引发性能问题的原因及热点代码。
代码优化阶段的目标是针对具体的性能问题而优化代码与编译选项,以改善软件性能。
在代码优化阶段往往需要凭借开发者的经验,编写简洁高效的代码,甚至在汇编语言级别合理使用各种指令,合理安排各种指令的执行顺序。
而在性能剖析阶段,则需要借助于现有的profiling工具,如perf,VTune,Oprofile等。
其中perf相比较于其它工具而言,具有特殊的优势。
它不仅开源,而且内置于内核源码树。
在如今upstream kernel的开发中,perf是发展较快的领域之一。
淘宝内核组也介入了perf的开发工作。
本文是系统级性能分析系列文章的第一篇,主要介绍性能分析工具perf的使用方法。
Linux高级系统调优使用perf和sysstat工具

Linux高级系统调优使用perf和sysstat工具Linux是一种开放源代码的操作系统,具有很强的可定制性和可扩展性,因此被广泛应用于服务器和高性能计算领域。
随着软硬件技术的不断进步,对Linux系统的性能优化需求也越来越高。
在这篇文章中,我们将介绍如何使用perf和sysstat工具进行Linux高级系统调优。
一、perf工具的介绍和使用perf工具是Linux上的性能分析工具,可以对系统的各种资源进行跟踪和分析,以帮助开发人员深入了解系统的运行情况。
下面我们将介绍几个常用的perf命令。
1. perf topperf top命令可以显示当前运行进程中的资源消耗最多的函数,以及它们在代码中的位置。
这对于快速定位性能瓶颈非常有用。
2. perf recordperf record命令可以跟踪指定进程或命令的系统调用和函数调用,生成一个数据文件用于后续的分析。
例如,可以使用以下命令跟踪一个名为"example"的进程的系统调用:perf record -p example3. perf reportperf report命令可以分析perf record生成的数据文件,并以报告的形式展示各种性能指标。
它可以展示函数的调用关系、执行时间、资源占用等信息,帮助我们全面理解系统的性能状况。
二、sysstat工具的介绍和使用sysstat工具是Linux上的系统状态统计工具,可以收集和分析系统的各种资源使用情况,如CPU、内存、磁盘和网络等。
下面我们将介绍几个常用的sysstat命令。
1. sarsar命令用于收集和报告系统的各种资源使用情况,可以显示CPU 的利用率、内存的使用情况、磁盘的IO等信息。
例如,可以使用以下命令显示CPU的利用率和平均负载:sar -u2. iostatiostat命令用于显示磁盘IO的情况,可以查看磁盘的读写速度、IO 等待时间等信息。
例如,可以使用以下命令显示磁盘的IO情况:iostat -d3. mpstatmpstat命令用于显示多核CPU的利用率,可以查看每个核心的平均负载、用户态和内核态的CPU时间等信息。
perf相关的面试题目

perf相关的面试题目Perf是一个性能分析工具,可以帮助开发人员识别和解决代码中的性能问题。
在面试中,经常会涉及到与Perf相关的面试题目,因此有必要对这些问题进行深入的了解和准备。
1. 什么是Perf?它的作用是什么?Perf是Linux系统中的一个性能分析工具,可以用来收集、分析和展示系统和应用程序的性能数据。
它可以帮助开发人员找出程序中的性能瓶颈,优化程序的性能。
2. Perf的原理是什么?Perf通过在内核空间中插入事件采集点来实现性能分析。
它利用处理器的性能计数器来收集各种性能事件的数据,比如指令执行次数、缓存命中率等。
然后将这些数据通过用户空间的工具分析和展示,帮助开发人员了解程序的性能状况。
3. Perf可以用来做哪些性能分析?Perf可以用来分析各种性能事件,比如CPU的使用率、内存的使用情况、磁盘IO的性能等。
开发人员可以通过Perf来监测程序的性能指标,找出程序的性能瓶颈。
4. 如何使用Perf进行性能分析?使用Perf进行性能分析分为以下几个步骤:- 安装Perf工具包- 选择性能事件和采样频率- 运行程序并使用Perf进行性能分析- 分析和展示性能数据开发人员可以根据实际情况选择合适的性能事件和采样频率,通过Perf来分析程序的性能状况。
5. Perf有哪些常用的命令?Perf工具提供了丰富的命令来进行性能分析,比如:- perf stat:用于收集程序的性能数据- perf record:用于记录性能事件的数据- perf report:用于展示性能数据的报告- perf top:用于实时展示性能事件的数据开发人员可以根据具体的需求选择合适的Perf命令来进行性能分析。
在面试中,掌握Perf的原理、用法和常用命令是非常重要的,能够展示出你对性能优化的能力和经验。
通过深入学习和实践Perf工具,可以更好地帮助开发人员解决程序中的性能问题,提升程序的性能和稳定性。
希望以上内容能帮助你更好地准备与Perf相关的面试题目。
perf 热点函数

perf 热点函数
Perf是一款性能分析工具,可以用于 Linux、Windows、Android 等操作系统。
同时也支持多种架构,如 x86、ARM、MIPS 等。
perf包含了多种调试工具,其中perf热点函数是其中一个功能强大的工具。
perf热点函数可以用于分析程序的函数执行时间,特别是对于大型复杂程序来说,能够为程序的性能优化提供很大的帮助。
该工具可以通过对每个函数的性能进行分析,找出程序的瓶颈。
具体地说,perf热点函数可以监测每个函数的执行时间、调用次数、调用关系等信息,并绘制函数调用堆栈图。
在使用perf热点函数时,需要使用perf record命令进行性能监测,生成性能数
据文件。
然后使用perf report命令,通过解析性能数据文件生成函数执行时间分析
报告。
perf report命令可以按照函数执行时间、调用次数等不同维度进行排序,并
以函数调用堆栈图的形式展示。
此外,perf热点函数也可以使用perf top命令进行
实时监测,可以动态地查看程序当前正在执行的热点函数。
总之,通过perf热点函数工具,开发者们可以深入分析程序性能,定位瓶颈,优化代码实现,提升程序性能,为用户提供更好的使用体验。
perf的用法

perf的用法一、perf的介绍与背景性能分析工具是开发过程中不可或缺的重要工具之一,其帮助开发者检测和优化程序在运行时的性能表现。
而在Linux操作系统中,perf则是一个广泛使用的性能分析工具。
它提供了各种功能强大的命令和选项,用以收集系统层面、内核层面以及用户空间程序的性能数据,使得开发人员可以深入了解和改善软件的性能瓶颈。
二、perf的基本用法1. 安装perf首先,确保你使用的Linux操作系统版本已经安装了perf。
如果没有安装,可以通过以下命令进行安装:```sudo apt-get install linux-tools-common```2. 收集CPU性能数据为了便于后续分析和优化,我们需要先收集程序执行期间CPU相关的性能数据。
以下命令将启动perf,并开始记录指定进程(PID)或程序(Command)执行过程中产生的CPU事件(cycles):```sudo perf record -e cycles -p <PID>```3. 分析性能数据收集完CPU性能数据后,我们可以使用perf进行分析和报告生成。
以下命令将读取刚才记录下来的数据文件,并生成一个报告:```sudo perf report```报告会包含有关程序执行期间各个函数的调用次数、执行时间、缓存命中率等重要信息。
通过分析报告,我们可以识别性能瓶颈所在,并进行进一步的优化。
三、perf高级用法1. 事件选择器除了收集CPU周期外,perf还支持收集多种系统事件,例如Cache命中、缺页异常等。
使用以下命令可以查看所有可用的事件:```sudo perf list```然后,你可以根据自己的需求选择适当的事件来收集数据。
2. 调用图为了更好地理解程序运行期间函数之间的调用关系,我们可以使用perf的调用图功能。
以下命令会生成一个被称为火焰图(Flame Graph)的可视化结果:```sudo perf record -g -p <PID>sudo perf script > out.perf./stackcollapse-perf.pl out.perf | ./flamegraph.pl > graph.svg```生成的graph.svg文件可以在浏览器中打开,展示了每个函数在运行过程中消耗CPU时间的比例。
linux perf的编译

linux perf的编译Linux Perf是一种强大的性能分析工具,用于分析和优化Linux 系统的性能。
在Linux系统中,使用perf工具可以获取系统性能数据,并进行深入的分析和优化。
为了更好地使用perf工具,需要进行编译以获得相应的可执行文件。
本篇文档将介绍Linux Perf编译的步骤和注意事项。
一、准备环境在开始编译之前,需要确保您的系统满足以下要求:1. 安装了Linux操作系统,版本不限。
2. 系统上已安装gcc等编译工具。
二、下载perf源码访问perf的官方网站或源码仓库,下载perf的源码包。
通常可以从git仓库中获取最新的源码。
三、解压源码包将下载的源码包解压到本地目录中。
四、配置编译环境进入源码目录,执行以下命令配置编译环境:```bash./configure --prefix=/usr/local/perf # 指定安装路径make # 编译源码```五、安装可执行文件执行以下命令将可执行文件安装到之前指定的安装路径中:```bashmake install```六、注意事项1. 在编译过程中,如果遇到错误信息,请仔细阅读错误提示,并根据提示进行相应的调整。
2. 在安装可执行文件时,如果提示权限问题,可以尝试使用sudo 命令进行安装。
3. 如果您的系统上已安装了其他性能分析工具,建议进行比较和选择,以确定perf工具是否满足您的需求。
4. 确保系统上已开启perf工具所需的硬件支持,如缓存性能计数器等。
七、使用perf工具完成编译后,您可以在系统上使用perf工具进行性能分析。
以下是一些常用的命令:1. perf top:实时显示当前系统中最消耗性能的进程和线程。
2. perf record:记录一段时间内的系统性能数据,并生成性能分析报告。
3. perf report:展示性能分析报告,以图表和表格的形式展示性能数据。
4. perf report --stdio:将标准输入中的性能数据以文本形式展示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
perf top 的界面会清爽很多。 ‘‐m’ or ‘‐‐mmap‐pages’ <n> 指定 perf 开辟的 mmap 页面的数量。mmap 缓存主要用于用户空间与内核空
‘‐p’ or ‘‐‐pid’ <pid> 该参数用于指定待分析进程的 pid。指定 pid 后,perf top 仅仅分析目标进程
以及目标进程创建的线程。 ‘‐t’ or ‘‐‐tid’ <tid> 该参数用于指定带分析线程的 tid。指定 tid 后,perf top 仅分析目标线程,
不包括此线程创建的其它线程。 ‘‐a’ or ‘‐‐all‐cpus’ 采集系统中所有 CPU 产生的性能事件。这也是 perf top 的默认情况。 ‘‐C’ or ‘‐‐cpu’ <cpu> 指定待分析的 CPU 列表。如系统中有 4 个 CPU,如果仅需采集 CPU0 与 CPU3
仅使用’‐c’指定的值作为采样周期。 ‘‐E’ or ‘‐‐entries’ <n> 指定界面上显示的符号数。如果用户仅希望查看 top <n>个符号,可以通过
此参数实现。 ‘‐U’ or ‘‐‐hide_user_symbols’ 仅显示属于内核的符号,隐藏属于用户程序的符号,即类型为[.]的符号。 ‘‐‐tui’ 使用 tui 界面。tui 为 perf top 的默认界面。如前所述,tui 界面需要 newt 软
的数据,可通过如下方法调用 perf top: $perf top ‐C 0,3
‘‐k’ or ‘‐‐vmlinux’ <file> 指定带符号表的内核映像所在的路径。与 GDB 类似,perf 只有在 DSO 存在
符号表的情况下才能解析出 IP 对应的具体符号。Perf 通常采用以下顺序加载内
核符号: 1. /proc/kallsyms 2. 用户通过’‐k’参数指定的路径。
上述命令中,0 即为指定给分析程序的实时优先级。顺便说一句,Linux 中实时优先级的范围是[0,99],其中优先级 0 最高。不要与范围是[‐20,19]的 nice 值搞混。
‘‐d’ or ‘‐‐delay’ <n> 指定 perf top 界面的刷新周期,<n>的单位为秒。默认值为 2s。 ‘‐D’ or ‘‐‐dump‐symtab’ 打印 DSO 的符号表,此功能主要用于 perf 自身的调试。该参数仅与’‐‐stdio’ (即 TTY 界面)配合使用时才起作用。启用此参数后,perf top 会在退出时打 印所有 DSO 的符号表,如图 7 所示。 $perf top ‐‐stdio –D
功能最丰富的界面是 tui,本文主要基于此界面讲解 perf。top 工具仅支持 tui 与 tty,默认界面为 tui。图 3 中展示的就是 tui 界面。
top 工具的界面具有 4 列信息。右面第一列为符号名,也就是函数名。左面 第一列为该符号引发的性能事件在整个监测域中占的比例,我们将其称为该符号 的热度。监测域是指 perf 监控的所有符号。默认情况下包括系统中所有进程、 内核以及内核模块的函数。左面第二列为该符号所在的 DSO。DSO 即动态共享对 象(Dynamic Shared Object)的缩写。第 3 列为 DSO 的类型。perf 中 DSO 共有 5 种类型,分别是:ELF 可执行文件,动态链接库,内核,内核模块,VDSO 等。 当第 3 列为 [.]时表示此符号属于用户态的 ELF 文件(包括可执行文件与动态链 接库)。为[k]表示此符号属于内核或内核模块。
图 3. perf top 的界面 Perf top 的基本使用方法为:
$perf top 该命令以默认性能事件“cycles(CPU 周期数)”进行全系统的性能剖析,检
测系统中的所有应用程序函数与内核函数的热度。图 3 为上述命令的执行结果。 perf 提供了 3 种用户界面,分别是 tui,gtk 以及 tty。其中可操作性最强,
3. 当前路径下的“vmlinux”文件 4. /boot/vmlinux 5. /boot/vmlinux‐$(uts.release) 6. /lib/modules/$(uts.release)/build/vmlinux 7. /usr/lib/debug/lib/modules/$(uts.release)/build/vmlinux
Linux 的系统级性能剖析工具‐perf (二)
承刚 TAOBAO Kernel Team chenggang.qin@ 第三章 Perf top 工具 3.1 perf top 的基本使用方法 top 工具主要用于实时剖析各个函数在某个性能事件上的热度。利用 perf top,能够直观地观察到当前的热点函数,并利用工具中内置的 annotate 功能, 进一步查找热点指令。
采用此参数后,子进程将自动继承父进程的性能事件。从而使得 perf 能够采
集到动态创建的进程的性能数据。但是,当采用’‐p’参数仅分析特定进程的性能
数据时,继承机制会被禁用。这主要是出于性能的考虑。 ‘‐‐sym‐annotate’ <symbol name> 指定待解析的符号名。 ‘‐z’ or ‘‐‐zero’ 更新界面的数据后,清除历史信息。 ‘‐F’ or ‘‐‐freq’ <n> 指定采样频率,此参数与’‐c’参数指定一个即可。当两个参数同时指定时,perf
图 7. perf top 打印出的符号表 图 7 给出了 perf top 输出的符号表的片段,这些符号来自于 ELF 文件’thread’ 的 symtable section。符号表的第一列为该符号的地址范围。第二列表示该符号的 属性,如’g’表示全局符号,’l’表示局部符号等。 ‘‐f’ or ‘‐‐count‐filter’ <n> 此参数主要用于符号过滤。指定此参数后,界面上将仅显示采样数大于<n> 的符号。 ‘‐g’ or ‘‐‐group’ 将计数器组合成计数器组。Perf 在默认情况下会为每个计数器创建一个独立 的 ring buffer。如果将计数器组合成计数器组,perf 则会将所有 counter 的数据输 出到 group leader 的 ring buffer 中。当内核生成采样数据不多并且内存较为紧张 时,可采用此参数以节省内存。 ‘‐i’ or ‘‐‐inherit’
表 4. Perf top 界面支持的信息
Comm
触发事件的进程名
PID
触发事件的进程号
DSO
符号所属的 DSO 的名称
Symbol 符号名
Parent
调用路径的入口
当采用如下命令时,perf top 会给出更加丰富的信息。 $perf top ‐s comm,pid,dso,parent,symbol
需要提一下的是,必须在系统安装 newt 软件包,perf 才能使能 tui 界面。 在 tui 界面下按'h','?'或'F1'键时,会弹出一个帮助窗口,如图 4 所示。
图 4. tui 界面的帮助窗口 帮助窗口列出了 perf top 的所有功能。我们首先来看注解(Annotate)功能。 注解功能可以进一步深入分析某个符号。给出对应线程的代码并且为热点代码标 记出它们触发的性能事件在整个测试域中的百分比。下面让我们来看一下如何使 用注解功能。在界面上按上下键,将光标在各个 symbol 间移动。选定某个符号 后,按下 a 键,得到如图 5 所示的界面。
间的数据通信。Perf 在内核中的驱动将采集到的性能数据存入 ring buffer,用户
空间的分析程序则通过 mmap 机制从 ring buffer 中读取数据。 默认情况下,mmap 的页面数量为 128,此时 mmap 内存区域的大小为 512KB。
perf top 默认每隔 2s 读取一次性能数据,当内核生成性能数据的速度过快时,就 可能因为缓冲区满而导致数据丢失,从而影响到分析结果。在此情况下,用户可 以通过’‐m’参数扩大缓冲区,以避免性能数据的大量丢失。
图 11. perf top ‐‐show‐total‐period 的界面 图 11 上的第二列即为该行符号在本轮分析中对应的事件总数。 ‘‐G’ or ‘‐‐call‐graph’ <output_type,min_percent,call_order> 在界面中显示函数的调用图谱。用户还可以指定显示类型,采样率的最小阈 值,以及调用顺序。下面通过一个简单的程序观察一下 perf top 如何显示调用图 谱。 Code2
图 6. 符号的 DSO 级过滤功能 类似于热键’d’,热键’t’能够过滤所有不属于当前符号所属线程的符号。 热键’P’可以将 perf top 的当前显示的信息输出到文件’perf.hist.XXX’中。 右方向键也是热键,它可以打开 perf top 的功能菜单。菜单上列出的各项功 能分别对应上述各个热键的功能。 3.2 perf top 的参数介绍 Perf top 的参数较多,本文只介绍几个常用参数的使用方法。 ‘‐e’ or ‘‐‐event’ <event>: 该参数用于指定待分析的性能事件。具体可以参考第 3 节 perf list。如果我 们希望利用 top 工具剖析系统中的 Cache 丢失次数,可以采用以下命令: $perf top ‐e cache‐misses ‘‐c’ or ‘‐‐count’ <n> 该参数用于指定性能计数器的采样周期。默认情况下,每秒钟采样 4000 次。
图 5. perf top 的注解功能 图 5 显示的是[code1]中 do_pi()函数的注解。从图上可以看到 perf 对 do_pi() 中的 C 代码给出了汇编语言的注解。并且给出了各条指令的采样率。从图上可以 看到耗时较多的指令(如访存指令)比较容易被 perf 采到。 选定某个符号后按下热键’d’,perf 会过滤掉所有不属于此 DSO 的文件。以图 1 中的实验为例,符号 do_pi 归属的 DSO 为 thread。当在符号 do_pi 上按下’d’键 后,perf 过滤掉了所有不属于 thread 的符号。如图 6 所示。