Linux
為什麼 ‘perf’ 需要與正在執行的 Linux 核心版本精確匹配?
如果您嘗試執行
perf
與目前執行的 Linux 核心不匹配的隨機二進製文件,它會顯示:$ perf WARNING: perf not found for kernel 4.13.0-45
當然,如果我得到了
perf
這個版本,它就可以工作。查看一些流行的資源,如Linux perf Examples和Perf wiki,我找不到這個特定問題的答案:為什麼
perf
嚴格需要與核心版本相同?
perf
和核心緊密聯繫在一起,實際上perf
是核心原始碼的一部分。從本質上講,您應該將其視為特定於核心的工具;但是 Linux 發行版中的打包實踐和要求意味著使用者最終會將其視為“標準”工具。和核心之間沒有特殊的
perf
-private 介面perf
,所以核心的perf
- 支持部分必須遵循通常的面向使用者空間的規則——即保持向後兼容性;因此從理論上講,可以使用較新的核心執行較舊版本的perf
核心,因為較新的核心應該支持較舊版本perf
用於與其通信的任何介面。然而,在實踐中,如果您需要perf
調查給定核心上工作負載的性能,您還需要能夠調查該特定核心的所有影響性能的特性;舊版本的perf
不支持發布後添加的功能,因此您通常最終需要匹配的版本perf
。由於這一切,務實的選擇是要求perf
與正在執行的核心相匹配的版本。根據您的發行版的打包選擇,
perf
可能是一個前端,它檢查perf
與您正在執行的核心匹配的實現,如果找不到則失敗;或者它可能是它自己的某個版本perf
。我還沒有測試過,但是目前版本的perf
舊核心可以正常工作,例如perf
5.6.14 和 5.7.7 可以在 4.19 核心上正常工作。