网站搜索

Perf-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 的输出。

还需要注意的是,当在 VirtualBox 或 VMWare 之上的来宾中运行时,perf 会产生不完整的结果,因为它们不允许像其他虚拟化技术(例如 KVM 或 XEN)那样访问硬件计数器。

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

echo 0 > /proc/sys/kernel/perf_event_paranoid

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

kernel.perf_event_paranoid = 0

子命令

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

性能列表

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

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

perf list sw 

性能统计

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

perf stat dd if=/dev/zero of=test.iso bs=10M count=1

上面显示的统计数据表明,除其他外,:

  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 周期数,这意味着每条指令大约需要 5 个 CPU 周期才能完成(平均)。我们可以(至少部分地)将此归咎于分支和分支未命中的数量(见下文),这最终会浪费或误用 CPU 周期。
  5. 执行命令时,总共遇到 3,552,630 个分支。这是代码中决策点和循环的 CPU 级表示。分支越多,性能越低。为了弥补这一点,所有现代 CPU 都会尝试预测代码将采用的流程。 51,348 分支未命中表明预测特征在 1.45% 的情况下是错误的。

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

性能顶级

perf top 与 top 命令类似,它显示几乎实时的系统配置文件(也称为实时分析)。

使用 -a 选项,您将显示所有已知的事件类型,而 -e 选项将允许您选择特定的事件类别(由 返回)性能列表):

将显示所有周期事件。

perf top -a 

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

perf top -e cpu-clock 

上面输出中的第一列表示自运行开始以来采集的样本的百分比,按函数符号和共享对象分组。 man perf-top 中提供了更多选项。

性能记录

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

键入perf record,然后输入命令:

perf record dd if=/dev/null of=test.iso bs=10M count=1

性能报告

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

sudo perf report

上述所有子命令都有一个专用的手册页,可以通过以下方式调用:

man perf-subcommand

其中子命令可以是liststattoprecord >报告。这些是最常用的子命令;文档中列出了其他内容(请参阅“摘要”部分的链接)。

概括

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

如果您发现应用程序消耗的资源比例很高,您可以考虑修改源代码,或使用其他替代方案。

如果您对本文有疑问或有改进建议,我们将洗耳恭听。请随时使用下面的评论表与我们联系。


版权所有。 © Linux-Console.net • 2019-2024