![我怎样才能使 perf script -g python 工作?](https://linux22.com/image/1124028/%E6%88%91%E6%80%8E%E6%A0%B7%E6%89%8D%E8%83%BD%E4%BD%BF%20perf%20script%20-g%20python%20%E5%B7%A5%E4%BD%9C%EF%BC%9F.png)
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 构建依赖性。这对像我这样使用perf
12.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/bin
fakeroot 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 个月内被点赞了两次)。