Perf- 用于Linux的性能监控和分析工具

当我们谈论计算性能时,我们指的是我们的资源与它们允许我们在一定时间内完成的任务之间的关系。

Perf- A Performance Monitoring and Analysis Tool for Linux

在公司之间激烈竞争的今天,重要的是我们要学会如何充分利用我们所拥有的资源。硬件或软件资源的浪费,或者缺乏更有效地利用它们的能力,最终会导致我们无法承受的损失,如果我们想要保持竞争力的话。

同时,我们必须小心,不要将我们的资源推到一个持续使用会造成不可逆损害的极限。

在本文中,我们将向您介绍一个相对较新的性能分析工具,并提供一些提示,您可以用来监控您的Linux系统,包括硬件和应用程序。这将帮助您确保它们运行良好,以便您能够产生所需的结果,而不浪费资源或您自己的精力。

在Linux中介绍和安装Perf

Linux提供了一个性能监控和分析工具,方便地称为perf。那么,perf与您已经熟悉的其他知名工具有何不同呢?

答案是,perf提供对CPU中的性能监控单元的访问,从而使我们能够密切观察硬件及其相关事件的行为。

此外,它还可以从收集的数据中监视软件事件,并创建报告

您可以在基于RPM的发行版中安装perf

# yum update && yum install perf     [CentOS / RHEL / Fedora]
# dnf update && dnf install perf     [Fedora 23+ releases]

Debian及其衍生版本中:

# sudo aptitude update && sudo aptitude install linux-tools-$(uname -r) linux-tools-generic

如果上述命令中的uname -r返回除实际版本之外的额外字符串(在我的情况下是3.2.0-23-generic),您可能需要键入linux-tools-3.2.0-23而不是使用uname的输出。

还要注意,当在VirtualBoxVMWare的虚拟机中运行时,perf会产生不完整的结果,因为它们不允许访问硬件计数器,而其他虚拟化技术(如KVMXEN)可以。

此外,请记住,默认情况下某些perf命令可能会受到root用户的限制,这可以通过执行以下操作来禁用(直到系统重新启动):

# echo 0 > /proc/sys/kernel/perf_event_paranoid

如果您需要永久禁用偏执模式,请在/etc/sysctl.conf文件中更新以下设置。

kernel.perf_event_paranoid = 0

子命令

安装perf后,您可以参考其手册页以获取可用子命令的列表(您可以将子命令视为打开系统特定窗口的特殊选项)。为了获得最佳和更完整的结果,请以root身份或通过sudo使用perf

Perf列表

perf list(不带选项)返回所有符号事件类型(长列表)。如果您想查看特定类别中可用事件的列表,请使用perf list,后跟类别名称([hw|sw|cache|tracepoint|pmu|event_glob]),例如:

显示Linux中软件预定义事件的列表:

# perf list sw 
List Software Pre-defined Events in Linux

Perf统计

perf stat运行一个命令,并在执行该命令期间收集Linux性能统计信息。当我们运行dd时,我们的系统会发生什么?

# perf stat dd if=/dev/zero of=test.iso bs=10M count=1
Collects Performance Statistics of Linux Command

上述统计数据显示,其中包括:

  1. dd命令的执行消耗了21.812281毫秒的CPU。如果我们将这个数字除以下面的“秒数时间流逝”值(23.914596毫秒),则得到0.912(CPU利用率)。
  2. 在命令执行期间,15个上下文切换(也称为进程切换)表示CPU在15次从一个进程(或线程)切换到另一个进程。
  3. 2个CPU迁移是在2核CPU上均匀分配工作负载时的预期结果。
    在那段时间(21.812281毫秒)内,消耗的总CPU周期数为62,025,623,除以0.021812281秒得到2.843 GHz。
  4. 如果我们将周期数除以总指令数,得到4.9个每指令周期(CPI),这意味着每条指令平均需要近5个CPU周期才能完成。我们可以将这部分归咎于分支和分支失误(见下文),它们最终会浪费或错误使用CPU周期。
  5. 在命令执行期间,遇到了总共3,552,630个分支。这是代码中决策点和循环的CPU级表示。分支越多,性能越低。为了弥补这一点,所有现代CPU都试图预测代码将采取的流程。51,348个分支失误表明预测功能错误的次数占总次数的1.45%

相同的原理适用于应用程序运行时收集统计信息(或者换句话说,进行性能分析)。只需启动所需的应用程序,在一个合理的时间段(由您决定)后关闭它,perf将在屏幕上显示统计信息。通过分析这些统计数据,您可以识别潜在的问题。

Perf top

`perf top`与`top命令`相似,它显示了一个几乎实时的系统剖析(也称为实时分析)。

使用`-a`选项将显示所有已知的事件类型,而`-e`选项将允许您选择特定的事件类别(如`perf list`返回的):

将显示所有循环事件。

perf top -a 

将显示所有与cpu时钟相关的事件。

perf top -e cpu-clock 
Live Analysis of Linux Performance

上述输出中的第一列代表自运行开始以来采集的样本百分比,按函数符号和共享对象分组。更多信息请查阅`man perf-top`。

Perf record

perf record运行一个命令并将统计数据保存到当前工作目录中的名为`perf.data`的文件中。它的运行方式类似于`perf stat`。

请输入`perf record`后跟一个命令:

# perf record dd if=/dev/null of=test.iso bs=10M count=1
Record Command Statistical Data

Perf report

perf report 将上述`perf.data`中收集的数据格式化为性能报告:

# sudo perf report
Perf Linux Performance Report

上述所有`子命令`都有对应的手册页,可以调用如下:

# man perf-subcommand

其中子命令可以是liststattoprecordreport。这些是最常用的子命令;其他子命令请参考文档(请参考摘要部分的链接)。

摘要

在本指南中,我们向您介绍了perf,这是一个用于Linux的性能监测和分析工具。我们强烈建议您熟悉其文档,文档维护在https://perf.wiki.kernel.org

如果您发现某些应用程序占用了大量资源,您可以考虑修改源代码或使用其他替代方案。

如果对本文有任何问题或改进建议,我们非常乐意倾听。请随意使用下面的评论表单与我们联系。

Source:
https://www.tecmint.com/perf-performance-monitoring-and-analysis-tool-for-linux/