【问题标题】:How do I use a newer perf tool front end with a record from an older perf version如何使用较新的 perf 工具前端和较旧 perf 版本的记录
【发布时间】:2017-06-28 06:26:58
【问题描述】:

我在 ARM 板上的旧版本内核上运行 perf record。内核版本为3.18.21-rt19

板上的 perf 版本同样是 perf 版本 3.18.21。

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

是否有可能:

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

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

在我的 ARM 板上更改内核版本不是我的选择。

【问题讨论】:

  • 可以构建更新的 perf 用户空间工具。您的性能可能是在没有 TUI 的情况下构建的。要将 perf.data 导出到另一台机器,您应该使用 perf archive command 它将使用 perf.data 复制所有符号信息(或尝试从根 fs 或根 fs 的完整映像复制文件,因为 perf.dataperf record 之后只有指令地址,而不是完整的对象/功能映射)。

标签: c++ linux linux-kernel perf


【解决方案1】:

导出 perf.data

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

perf-archive - 使用在 perf.data 文件中找到的构建 ID 的目标文件创建存档

  perf archive [file]

此命令运行 perf-buildid-list --with-hits,并收集 找到带有 buildid 的文件,以便分析 perf.data 内容 可以在另一台机器上实现。

Perf 教程中没有使用 perf 存档的示例:https://perf.wiki.kernel.org/index.php/Tutorial 但在http://events.linuxfoundation.org/sites/events/files/slides/LinuxConJapan2015-DynamicProbes.pdf#page=22 中提到“什么是 Buildid-cache?.. 这也允许我们从远程机器分析 perf.data (perf-archive这样做)”

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

您也可以尝试将更好版本的 perf 实用程序(由您构建或从 ubuntu 或 linaro 复制)上传到您的开发板 - perf 用户空间工具与 perf_events 内核接口兼容各种内核版本,它可以读取perf.data使用不同版本的perf工具录制的。

【讨论】:

  • 这似乎是让它工作的正确方法。我的 perf 版本将存档显示为可用命令之一,但是当我运行 perf archive 它说:perf: 'archive' is not a perf-command. See 'perf --help'. Did you mean this? archive
  • Rajiv,这很奇怪,但我在 perf 的 main() 和内部 command list 中也没有看到“归档”命令,但是有 perf-archive.sh bash 脚本 - 试试 - lxr.free-electrons.com/source/tools/perf/perf-archive.sh?v=3.18 (从github.com/torvalds/linux/blob/master/tools/perf/…下载)。这可能是 perf 文档中的错误(如果只有文档)。
  • 我能够运行 perf-archive.sh。我注意到 ~/.debug 文件夹只有 [kernel.kallsyms] 的文件。因此,当我在另一台主机上使用存档文件并使用存档文件的内容填充其 ~/.debug 文件夹时,perf-report 可以解析内核符号。我不确定如何获得其他符号。 perf-buildid-list --with-hits 为主机 AMR 板上除 [kernel.kallsyms] 之外的所有条目显示类似 0000000000000000000000000000000000000000 /lib/libc-2.21.so 的条目。不知道 ARM 板上的 perf 报告在哪里可以找到这些符号。
  • Rajiv,尝试运行 ldd ./your_program 并手动将列出的所有二进制文件从 ARM 复制到主机。
  • 接受这个答案。我的工具链存在问题,这使我无法完成这项工作,但一旦我解决了这些问题,这些步骤似乎就可以正常工作了。
猜你喜欢
  • 2012-07-29
  • 2021-04-11
  • 2019-02-18
  • 2019-03-20
  • 1970-01-01
  • 1970-01-01
  • 2016-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多