如何将较新的 perf 工具前端与旧 perf 版本的记录一起使用

How do I use a newer perf tool front end with a record from an older perf version

我正在 运行在 ARM 板上的旧版本内核上进行 perf 记录。内核版本为3.18.21-rt19

板子上的perf版本同样是perf version 3.18.21.

虽然我可以在此性能上录制和使用报告功能,但此版本的报告 TUI 非常 awful/non-existent。它不是可扩展部分(在图形模式下),而是显示为一个巨大的可滚动功能列表,很难使用。另外由于某种原因,我的 C++ 函数名称没有被分解,所以很难阅读它。

是否有可能:

  1. 将在这个较旧的 ARM 内核上创建的 perf.data 导出到 x86 机器 运行 使用较新的内核和较新版本的 perf,并在所述机器上使用 perf 报告.当我尝试这样做时(我 运行 在内核 4.4.0-31-generic 运行ning perf 版本 4.4.13 上)我丢失了所有符号,即使 运行ning perf 报告ARM 机器显示的符号很好(C++ 名称仍然被破坏)。我不确定这是否只是因为 perf.data 格式在这些内核版本之间发生了变化,或者 x86 版本是否完全无法读取 ARM 机器生成的数据。

  2. 为我的旧内核构建一个更新的 perf 版本(至少是前端),它可以进行 de-mangling 并公开更新更好的 TUI。

更改我的 ARM 板上的内核版本对我来说不是一个选项。

Export the perf.data

perf.data 的导出应该支持 perf archive 命令,检查 man perf-archive - http://man7.org/linux/man-pages/man1/perf-archive.1.html

perf-archive - Create archive with object files with build-ids found in perf.data file

  perf archive [file]

This command runs perf-buildid-list --with-hits, and collects the files with the buildids found so that analysis of perf.data contents can be possible on another machine.

Perf教程中没有使用perf archive的例子:https://perf.wiki.kernel.org/index.php/Tutorial but mentioned in http://events.linuxfoundation.org/sites/events/files/slides/LinuxConJapan2015-DynamicProbes.pdf#page=22 "What’s the Buildid-cache? .. This also allows us to analyse perf.data from remote machine (perf-archive does that)"

很难将 perf 与其他架构 (x86) 一起使用来重载 ARM 文件,因此您可能会尝试使用一些 ARM 系统模拟器(如 qemu/qemu-system-arm)和一些最近的 ubuntu/arm 或 linaro/arm iso 或根映像(它们应该有 full-featured perf)。

您也可以尝试将更好版本的 perf 实用程序(由您构建或从 ubuntu 或 linaro 复制)上传到您的开发板 - perf user-space 工具与 perf_events 兼容内核接口覆盖广泛的内核版本,可以读取perf.data 不同版本的perf 工具记录。