
该项目是KDAB研发的努力,以创建用于性能数据的独立GUI。作为第一个目标,我们希望在Linux Perf上提供像Kcachegrind这样的UI。展望未来,我们打算在此雨伞下支持其他各种绩效数据格式。
以下是一些屏幕截图,显示了动作中热点的最重要功能:
热点的主要特征是perf.data文件的图形可视化。


注意:内线函数的边框比非内部函数更暗。





时间线允许按时间,过程或线程过滤结果。数据视图将相应更新。



您还可以从热点启动perf ,以介绍新启动的应用程序或附加到已经运行的过程(ES)。不过,请考虑以下注意事项。


注意:尚未在所有Linux发行版中打包热点。在这种情况下,或者如果要使用最新版本,请使用适用于任何最近的Linux发行版的适应性。
热点可在AUR(https://aur.archlinux.org/packages/hotspot)中使用。
Hotspot可在Debian(https://packages.debian.org/hotspot)和ubuntu(https://packages.ubuntu.com/hotspot)中找到。
可以从我们的覆盖层(https://github.com/kdab/kdab-overlay)获得热点ebuilds。
Hotspot可在Fedora(https://packages.fedoraproject.org/pkgs/hotspot/hotspot/)中找到。
您可以转到最新版本或连续构建。在这两种情况下,您都可以在可以下载的“资产”下找到适合。取消贴上附件文件(如果是最新版本的情况),然后使其可执行,然后运行它。
请使用最新版本来获取最新版本。如果不起作用,请报告错误并测试最新的稳定版本。
注意:您的系统库或首选项未更改。如果您想再次删除热点,只需删除下载的文件即可。在此处了解有关附属的更多信息。
要了解如何调试适应性,请参阅黑客。
来自Source的Hotspot为您提供最新,最大的功能,但是您必须确保其所有依赖关系可用。大多数用户可能应该从Distro软件包管理器或作为附属物中安装热点。
对于每个想为热点做出贡献或使用最新版本而没有附属详细说明的每个人的人,就可以在黑客上找到。
首先,用perf记录一些数据。要获取backtraces,您需要启用矮人呼叫模式:
perf record --call-graph dwarf < your application >
...
[ perf record: Woken up 58 times to write data ]
[ perf record: Captured and wrote 14.874 MB perf.data (1865 samples) ]现在,如果您在同一台计算机上有热点,则需要做的就是启动它。它将在当前目录中自动打开perf.data文件(类似于perf report )。
另外,您可以在控制台上指定数据文件的路径:
hotspot /path/to/perf.data根据您的需求,您可能需要将其他命令行选项传递给热点。这允许在“设置”下的GUI中找到的一次性集合配置选项,还允许将Linux Perf Data Files转换为较小且便携式的Perfdata格式(有关此的详细信息,请参见导入 /导出)。所有命令行选项均以--help :
Usage: hotspot [options] [files...]
Linux perf GUI for performance analysis.
Options:
-h, --help Displays help on commandline options.
--help-all Displays help including Qt specific options.
-v, --version Displays version information.
--sysroot <path> Path to sysroot which is used to find libraries.
--kallsyms <path> Path to kallsyms file which is used to resolve
kernel symbols.
--debugPaths <paths> Colon separated list of paths that contain debug
information. These paths are relative to the
executable and not to the current working directory.
--extraLibPaths <paths> Colon separated list of extra paths to find
libraries.
--appPath <path> Path to folder containing the application executable
and libraries.
--sourcePaths <paths> Colon separated list of search paths for the source
code.
--arch <path> Architecture to use for unwinding.
--exportTo <path> Path to .perfparser output file to which the input
data should be exported. A single input file has to
be given too.
--perf-binary <path> Path to the perf binary.
--objdump-binary <path> Path to the objdump binary.
Arguments:
files Optional input files to open on startup, i.e.
perf.data files.
热点支持一种非常有力的等待时间分析或CPU分析的方法。该分析基于Linux调度程序中的内核跟踪点。通过录制该数据,我们可以找到Delta在CPU上没有线程的时间Delta,而是在CPU上运行的时间。可能有多种原因,可以使用此技术找到所有原因:
read()或write()mmap() 'ed文件数据时nanosleep()或yield()futex()等锁定争论通过利用调度程序中的内核跟踪点,开销非常易于管理,只有当该过程实际被切换时,我们才付出代价。最值得注意的是,当可以直接在用户空间中处理Mutex锁定操作时,我们不会支付价格。
要使用热点进行外CPU分析,您需要使用非常具体的命令记录数据:
perf record
-e cycles # on-CPU profiling
-e sched:sched_switch --switch-events # off-CPU profiling
--sample-cpu # track on which core code is executed
-m 8M # reduce chance of event loss
--aio -z # reduce disk-I/O overhead and data size
--call-graph dwarf # we definitely want backtraces
< your application >另外,您可以在Hotspot的集成记录页面中使用CPU复选框。
在分析过程中,您可以在CPU数据的“循环”成本视图之间切换到“ CPU时间段”成本视图以进行等待时间分析。通常,您需要在两者之间进行更改,例如在代码中找到可能需要进一步并行化的位置(另请参见Amdahl的法律)。
还将向您显示“ Sched:Sched_switch”成本。但是我认为这仅有用,因为它仅表示调度程序开关的数量。对我来说,之间的时间通常更有趣 - 这就是在“非CPU时间”指标中向您展示的。
如果您要在嵌入式系统上录制,则需要用热点分析开发机上的数据。为此,请确保您的Sysroot包含放松所需的调试信息(请参见下文)。然后将数据记录在您的嵌入式系统上:
embedded$ perf record --call-graph dwarf < your application >
...
[ perf record: Woken up 58 times to write data ]
[ perf record: Captured and wrote 14.874 MB perf.data (1865 samples) ]
embedded$ cp /proc/kallsyms /tmp/kallsyms # make pseudo-file a real file如果您的嵌入式机器使用的平台与主机不同,则可以。在主机上,执行以下步骤,然后分析数据:
host$ scp embedded:perf.data embedded:/tmp/kallsyms .
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms
perf.data如果您是从Sysroot之外的路径手动部署应用程序,请这样做:
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms --appPath /path/to/app
perf.data如果您的应用程序还使用Sysroot和AppPath之外的库,请执行此操作:
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms --appPath /path/to/app
--extraLibPaths /path/to/lib1:/path/to/lib2:...
perf.data而且,最糟糕的情况,如果您还在非标准位置使用拆分调试文件,请执行此操作:
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms --appPath /path/to/app
--extraLibPaths /path/to/lib1:/path/to/lib2:...
--debugPaths /path/to/debug1:/path/to/debug2:...
perf.dataperf.data文件格式不是独立的。要分析它,您需要访问配置文件过程的可执行文件和库以及调试符号。这使得在机器上共享此类文件变得笨拙,例如,从同事那里获得帮助以调查性能问题或出于错误报告目的。
热点使您可以导出分析的数据,然后将其完全独立。可以通过“文件>另存为”菜单操作访问此功能。然后将数据保存在自包含的*.perfparser文件中。要再次将数据导入热点,只需直接打开该文件代替原始的perf.data文件即可。
作为替代方案,您还可以使用--exportTo选项从命令行(无GUI,也可以与自动化构建一起使用)进行导出。
注意:文件格式尚不稳定。含义由一个版本的热点导出的数据只能通过同一版本回到中。随着时间的允许,将来将解决此问题。
热点当前仅显示时间轴中的跟踪点的名称。


热点包括一个拆卸器,可以向您显示每个说明的成本。拆卸器使用颜色指示哪些装配线对应于哪个源代码行。为了简化导航,您只需单击一条线,另一个视图将跳到它。您可以双击以关注函数呼叫。在Sourcecode视图中,您可以按CTRL+F或按搜索图标打开搜索窗口。
如果您在不同目录中具有源,则可以使用--sourcePaths或设置来选择告诉拆卸器在此处搜索源代码。
如果上述内容中有任何破坏,并且输出不如perf report ,请在GitHub上报告一个问题。也就是说,人们可能会绊倒一些已知问题:
放松堆栈以产生回溯是一门黑暗艺术,在许多方面可能会出错。热点依靠perfparser (见下文),这反过来依赖于libdw从Elfutils放松堆栈。在大多数情况下,这效果很好,但仍然会出错。最值得注意的是,当以下情况下,放松将失败。
perf.data文件引用的精灵文件(即可执行文件或库)--debugPaths <paths> :在非标准位置分开调试文件时使用此功能--extraLibPaths <paths> :自录制以来,当您将库移动到其他位置时,请使用此此事。--appPath <paths> :这是上述两个字段的组合。该路径是递归穿越的,寻找调试文件和库。--sysroot <path> :尝试检查在嵌入式平台上记录的数据文件时使用此此事-O2 -g之类的内容调用。您将不得不重复perf record步骤默认情况下, perf record仅将堆栈的一部分复制到数据文件。这可能会导致非常深的呼叫堆栈问题,这将在某个时候切断。此问题将破坏热点中自上而下的呼叫树,如自上而下的视图或火焰图中的可视化。要解决此问题,您可以尝试增加堆栈垃圾场的大小,即:
perf record --call-graph dwarf,32768
请注意,这可能会大大增加perf.data文件的大小 - 谨慎使用它。还要看看man perf record 。
对于某些情况,递归功能调用根本无法解开。另请参见#93
热点支持通过debuginfod下载调试符号。可以通过在设置中添加下载URL或使用在环境中定义的DEBUGINFOD_URLS启动热点来启用这一点。
与perf report相比,Hotspot错过了许多功能。其中一些计划在将来解决。其他人可能永远不会实施。但是请注意,当前Hotspot中无法使用以下功能:
--itrace , --mem-mode , --branch-stack and --branch-history ,都不支持使用sudo或作为root用户启动热点不是一个好主意。请参阅例如编辑文件作为有关此问题的文章的根源。问题#83在此联系人中也很重要。
但是没有超级用户权限,您可能会在使用Hotspot的记录功能时看到错误消息,例如以下内容:
You may not have permission to collect stats.
Consider tweaking /proc/sys/kernel/perf_event_paranoid:
-1 - Not paranoid at all
0 - Disallow raw tracepoint access for unpriv
1 - Disallow cpu events for unpriv
2 - Disallow kernel profiling for unpriv
为了加入此限制,热点可以以提高特权运行完美自身。
当前的数据导出仅限于一种格式,该格式只能由同一版本的热点读回。这使得不可能与其他可视化工具进行互操作。这是已知的,将来会得到改善。最值得注意的是,计划但尚未实施向诸如Perfetto或Mozilla Profiler等网络观众的出口。欢迎补丁!
该项目利用QT公司为其QT创建者IDE创建的出色的perfparser实用程序。如果您已经在使用QT创建者,请考虑利用其集成的CPU使用分析仪。
Hotspot在GPL V2+下获得许可。有关更多信息,请参见License.gpl.txt,或联系[email protected],如果您的许可条件尚不清楚。