如果您尝试运行perf
与当前运行的 Linux 内核不匹配的随机二进制文件,则会显示:
$ perf
WARNING: perf not found for kernel 4.13.0-45
当然,如果我得到perf
这个版本,它就可以工作。
查看一些流行的资源,例如Linux 性能示例和性能维基我找不到这个具体问题的答案:为什么perf
严格需要与内核版本相同?
答案1
perf
和内核联系得相当紧密,实际上perf
是内核源代码的一部分。从本质上讲,您应该将其视为特定于内核的工具;但 Linux 发行版中的打包实践和要求意味着用户最终将其视为“标准”工具。
和内核之间没有特殊的perf
私有接口,因此内核的支持部分必须遵循通常的面向用户空间的规则 -perf
perf
IE保持向后兼容性;因此从理论上讲,可以使用perf
较新的内核运行较旧的版本,因为较新的内核应该支持旧版本用于perf
与其通信的任何接口。然而,实际上,如果您需要用于perf
研究给定内核上工作负载的性能,您还需要能够研究该特定内核的所有影响性能的功能;旧版本perf
无法支持发布后添加的功能,因此您通常最终需要匹配的版本perf
。由于这一切,务实的选择是需要一个与perf
正在运行的内核相匹配的版本。
根据您的发行版的打包选择,perf
可能是一个前端,它检查与perf
您正在运行的内核相匹配的实现,如果找不到,则失败;或者它可能是perf
其自身的某个版本。我还没有测试过太久,但当前版本perf
在较旧的内核上运行良好,例如perf
5.6.14 和 5.7.7 在 4.19 内核上运行良好。