如何使 perf script -g python 工作?

Ela*_*ich 7 performance 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.
Run Code Online (Sandbox Code Playgroud)

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

Emm*_*met 6

Raring (13.04) 起,perf构建时未启用 Python 脚本 \xe2\x80\x9c,以避免 Python 构建依赖\xe2\x80\x9d。perf这对于像我这样使用12.04 LTS 并升级到 14.04 LTS的人来说是一个巨大的打击。这记录在Ubuntu 内核 git 存储库的debian-master/changelog文件中。

\n\n

简而言之,如果你的内核是 3.8.0-6.11 或更高版本,则 \xe2\x80\x94 使用精确的技术术语 \xe2\x80\x94 \xe2\x80\x9cshit outta lucky\xe2\x80\x9d:你必须建立自己的perf

\n\n

如果您决定使用 Ubuntu 方式执行此操作(实际上非​​常简单),您可以通过 google 搜索具有不同详细程度的教程(例如,此处此处)。一旦您已经克隆了git适合您的版本的 Ubuntu 内核存储库,并检查了与当前内核对应的标签(如果您当前的内核是 3.13.0-48-generic,则标签将类似于3.13.0-48.80,即末尾有一个额外的数字),您必须编辑(关于存储库的根目录gitdebian/rules.d/2-binary-arch.mk并从命令行之一中删除 (它用于检查,因此将其更改为不起作用)。这个条款只出现一次,所以直接搜索出来就可以了。NO_LIBPYTHON=1make\\#ifdefNO_LIBPYTHON=0

\n\n

该发行版的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 分钟)。如果我多加注意,我可能会选择一个不会构建每个内核变体和模块的软件。欢迎提出建议。

\n\n

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

\n\n

可能还有其他几个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

\n\n

perf您可以使用以下命令安装新的 Python 功能

\n\n
# sudo dpkg -i linux-tools-3.13.0-48_3.13.0-48.80_amd64.deb\n
Run Code Online (Sandbox Code Playgroud)\n\n

您可以根据需要安装尽可能多或尽可能少的内核、内核模块、其他工具包等。原则上,这些应该都是相同的。我刚刚安装了一个软件包,一切似乎都正常:我又perf恢复了 Python 功能。

\n\n

当然,下次内核更新时,您将不得不再次执行大量操作(从新git pull标签开始)。checkout我自己必须跟上这一点,所以我半途而废地将我的 .debs 放入 PPA 中,但似乎没有太多兴趣(这个问题在 3 个月内被投票两次)。

\n