我怎样才能使 perf script -g python 工作?

我怎样才能使 perf script -g python 工作?

perf使用该软件包安装后linux-tools-common,我仍然无法使用 python/perl 脚本功能。

$ sudo perf script -g python
Python scripting not supported.  Install libpython and rebuild perf to enable it.
For example:
  # apt-get install python-dev (ubuntu)
  # yum install python-devel (Fedora)
  etc.

如何在 Ubuntu 中安装具有脚本支持的 perf 版本?

答案1

自从咆哮(13.04)perf在构建时没有启用 Python 脚本,以避免 Python 构建依赖性。这对像我这样使用perf12.04 LTS 并升级到 14.04 LTS 的人来说是一个严重的冲击。这记录在debian-master/changelog文件在 Ubuntu 内核 git repos 中。

简而言之,如果你的内核是 3.8.0-6.11 或更高版本,那么你 — — 使用精确的技术术语 — — “运气不佳”:你必须构建自己的perf

如果你决定按照 Ubuntu 的方式做这件事,这实际上相当容易,你可以在 Google 上搜索不同详细程度的教程(例如这里或者这里)。一旦您到达克隆git适合您的版本的 Ubuntu 内核存储库并签出与当前内核相对应的标签的阶段(如果您当前的内核是 3.13.0-48-generic,则标签将类似于3.13.0-48.80,即末尾有一个额外的数字),您必须编辑(相对于git存储库的根目录)debian/rules.d/2-binary-arch.mk消除 NO_LIBPYTHON=1从命令行之一make(它用于\#ifdef检查,因此将其更改为NO_LIBPYTHON=0无效)。此子句仅出现一次,因此只需搜索它并将其取出即可。

发行版的linux-tools-3.x.x-y软件包包含实际的perf二进制文件,最终以 结尾/usr/lib/linux-tools-3.x.x-y/perf。这是用 构建的fakeroot debian/rules binary-arch。此规则 ( binary-arch) 需要很长时间才能构建(在我的 i7 笔记本电脑上大约需要 25 分钟)。如果我更加注意的话,我可能会选择一个不构建每个内核变体和模块的规则。欢迎提出建议。

假设你没有做任何其他更改,一旦完成,你想要的包裹是linux-tools-3.13.0-48_3.13.0-48.80_amd64.deb(模数你的内核版本):这是带有二进制文件的版本,而不是符号链接或shell包装器。

可能还有其他几个linux-tools包,具体取决于您构建的内容,linux-tools-3.13.0-48-generic_3.13.0-48.80_amd64.deb只包含符号链接和东西(不太可能有所不同)并且只包含最终的linux-tools-common_3.13.0-48.80_all.deb简短通用包装脚本;后者是用构建的。perf/usr/binfakeroot debian/rules binary-indep

perf你可以使用以下方式安装新的 Python 版本

# sudo dpkg -i linux-tools-3.13.0-48_3.13.0-48.80_amd64.deb

您可以根据自己的喜好安装尽可能多的内核、内核模块、其他工具包等。原则上,这些都应该是相同的。我刚刚安装了一个包,一切似乎都运行正常:我恢复了 Python 功能perf

当然,下次内核更新时,你还需要重复做很多事情(从新标签git pull开始checkout)。我自己也得跟上,所以我有点想把我的 .debs 粘贴到 PPA 中,但似乎没什么兴趣(这个问题在 3 个月内被点赞了两次)。

相关内容