为什么“perf”需要与正在运行的 Linux 内核版本精确匹配?

为什么“perf”需要与正在运行的 Linux 内核版本精确匹配?

如果您尝试运行perf与当前运行的 Linux 内核不匹配的随机二进制文件,则会显示:

$ perf
WARNING: perf not found for kernel 4.13.0-45

当然,如果我得到perf这个版本,它就可以工作。

查看一些流行的资源,例如Linux 性能示例性能维基我找不到这个具体问题的答案:为什么perf严格需要与内核版本相同?

答案1

perf和内核联系得相当紧密,实际上perf是内核源代码的一部分。从本质上讲,您应该将其视为特定于内核的工具;但 Linux 发行版中的打包实践和要求意味着用户最终将其视为“标准”工具。

和内核之间没有特殊的perf私有接口,因此内核的支持部分必须遵循通常的面向用户空间的规则 -perfperfIE保持向后兼容性;因此从理论上讲,可以使用perf较新的内核运行较旧的版本,因为较新的内核应该支持旧版本用于perf与其通信的任何接口。然而,实际上,如果您需要用于perf研究给定内核上工作负载的性能,您还需要能够研究该特定内核的所有影响性能的功能;旧版本perf无法支持发布后添加的功能,因此您通常最终需要匹配的版本perf。由于这一切,务实的选择是需要一个与perf正在运行的内核相匹配的版本。

根据您的发行版的打包选择,perf可能是一个前端,它检查与perf您正在运行的内核相匹配的实现,如果找不到,则失败;或者它可能是perf其自身的某个版本。我还没有测试过太久,但当前版本perf在较旧的内核上运行良好,例如perf5.6.14 和 5.7.7 在 4.19 内核上运行良好。

相关内容