当我们谈论计算中的性能时,我们指的是我们的资源与它们允许我们在给定时间段内完成的任务之间的关系。
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泛型在我的情况)额外的字符串,您可能需要输入linux-工具3.2.0-23而是采用的uname输出。
同样重要的是要注意,PERF国债收益率之上来宾中运行时的结果不完整的VirtualBox或VMWare的 ,因为他们没有允许访问硬件计数器与其他虚拟化技术(如KVM或XEN )做的。
此外,请记住,一些PERF的命令可能被限制在默认的根,它可以通过做被禁用(直到重新启动系统):
# echo 0 > /proc/sys/kernel/perf_event_paranoid
如果您需要永久禁用偏执的方式,更新/etc/sysctl.conf文件以下设置。
kernel.perf_event_paranoid = 0
子命令
一旦你已经安装PERF,你可以参考它的手册页可用子命令列表(你可以认为作为子打开一个特定的窗口到系统的特殊选项)。 为了获得最佳的,更完整的结果,使用PERF root身份或sudo的通过。
Perf列表
perf列表(无选项)返回所有符号事件类型(长列表)。 如果你想查看一个特定的类别可用事件的列表,使用PERF列表,其后为类别名称([ 硬件|软件|缓存|跟踪点| PMU | event_glob]),如:
显示Linux中软件预定义事件的列表:
# perf list sw
列出软件在Linux中的预定义事件
Perf stat
PERF STAT运行的命令,并收集Linux性能统计等命令的执行过程中。 在我们的系统会发生什么,当我们运行DD?
# perf stat dd if=/dev/zero of=test.iso bs=10M count=1
收集Linux命令的性能统计信息
上面显示的统计数据表明,除其他外:
- dd命令的执行了CPU的21.812281毫秒。 如果我们把这个数字由“秒经过时间”下面(23.914596毫秒)值,它产生0.912(使用的CPU)。
- 而被执行的命令,15上下文开关(也称为过程开关)指示该处理器被切换15次从一个进程(或线程)到另一个。
- 2 CPU迁移是预期的结果时,2核CPU的工作量的内核数量之间均匀分布。
在这段时间内(21.812281毫秒),被消耗的CPU周期的总数为62025623,其通过0.021812281秒给出2.843 GHz的划分。 - 如果我们通过总的指示划分的周期数计数,我们得到4.9周期每指令,这意味着每个指令用了近5的CPU周期来完成(平均)。 我们可以将这(至少部分)归咎于分支数和分支未命中(见下文),最终浪费或滥用CPU周期。
- 作为被执行的命令,总共3552630分支遇到。 这是代码中的决策点和循环的CPU级表示。 分支越多,性能越低。 为了弥补这一点,所有现代的CPU尝试预测流量的代码会抓住。51348支门柱指示预测的特点是时间错误的1.45%。
同样的原则适用于在应用程序运行时收集统计信息(或者换句话说,分析)。 只要启动所需的应用程序,并在合理的时间周期(由你)后关闭它,PERF将在屏幕上显示的统计数据。 通过分析这些统计数据,您可以确定潜在的问题。
Perf顶部
PERF的顶部是类似于顶端命令 ,因为它显示一种几乎实时系统信息(也称为实时分析)。
使用-a
选项,将显示所有已知的事件类型,而-e
选项将允许您选择一个特定的事件类别(如PERF列表返回):
将显示所有周期事件。
perf top -a
将显示所有与cpu-clock相关的事件。
perf top -e cpu-clock
Linux性能的实时分析
上面输出中的第一列表示自运行开始以来采样的百分比,按符号和共享对象的函数分组。 更多选择在人穿孔-顶可供选择。
perf记录
PERF记录运行的命令和统计数据保存到一个名为当前工作目录里面perf.data文件。 它运行同样为PErF统计 。
键入PERF记录后面的命令:
# perf record dd if=/dev/null of=test.iso bs=10M count=1
记录命令统计数据
Perf报告
PERF的报表格式在perf.data收集的数据入一个业绩报告:
# sudo perf report
Perf Linux性能报告
上述所有的子命令都可以用来作为一个专门的手册页:
# man perf-subcommand
其中, 子命令 列表两种, 统计 , 顶 , 记录或报告 。 这些是最常用的子命令; 其他在文档中列出(参考摘要部分的链接)。
概要
在本指南中,我们向您介绍了PERF,对于Linux性能监控和分析工具。 我们强烈建议您熟悉它的文档的保持于https://perf.wiki.kernel.org 。
如果发现占用大量资源的应用程序,您可以考虑修改源代码或使用其他替代方法。
如果您对本文有任何疑问或建议改进,我们都是耳朵。 请随时使用下面的评论表单与我们联系。