Linux

為什麼 ‘perf’ 需要與正在執行的 Linux 核心版本精確匹配?

  • July 29, 2020

如果您嘗試執行perf與目前執行的 Linux 核心不匹配的隨機二進製文件,它會顯示:

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

當然,如果我得到了perf這個版本,它就可以工作。

查看一些流行的資源,如Linux perf ExamplesPerf wiki,我找不到這個特定問題的答案:為什麼perf嚴格需要與核心版本相同?

perf和核心緊密聯繫在一起,實際上perf是核心原始碼的一部分。從本質上講,您應該將其視為特定於核心的工具;但是 Linux 發行版中的打包實踐和要求意味著使用者最終會將其視為“標準”工具。

和核心之間沒有特殊的perf-private 介面perf,所以核心的perf- 支持部分必須遵循通常的面向使用者空間的規則——保持向後兼容性;因此從理論上講,可以使用較新的核心執行較舊版本的perf核心,因為較新的核心應該支持較舊版本perf用於與其通信的任何介面。然而,在實踐中,如果您需要perf調查給定核心上工作負載的性能,您還需要能夠調查該特定核心的所有影響性能的特性;舊版本的perf不支持發布後添加的功能,因此您通常最終需要匹配的版本perf。由於這一切,務實的選擇是要求perf與正在執行的核心相匹配的版本。

根據您的發行版的打包選擇,perf可能是一個前端,它檢查perf與您正在執行的核心匹配的實現,如果找不到則失敗;或者它可能是它自己的某個版本perf。我還沒有測試過,但是目前版本的perf舊核心可以正常工作,例如perf5.6.14 和 5.7.7 可以在 4.19 核心上正常工作。

引用自:https://unix.stackexchange.com/questions/462981