「perf」が実行されているLinuxカーネルのバージョンと正確に一致する必要があるのはなぜですか?

「perf」が実行されているLinuxカーネルのバージョンと正確に一致する必要があるのはなぜですか?

perf現在実行中のLinuxカーネルと一致しないランダムなバイナリを実行しようとすると、次のようになります。

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

もちろん、このバージョンを受け取るとperf機能します。

次の人気のあるリソースを確認してください。Linuxパフォーマンスの例そしてパフォーマンス Wikiこの特定の質問に対する回答が見つかりません。perfカーネルバージョンと厳密に同じでなければならないのはなぜですか?

答え1

perfこれはカーネルと非常に密接に関連しており、perf実際にはカーネルソースコードの一部です。基本的にこれをカーネル固有のツールとして考える必要がありますが、Linuxディストリビューションのパッケージング慣行と要件は、ユーザーが最終的にそれを「標準」ツールとして扱うことを意味します。

perfカーネルには特別なプライベートインタフェースがないため、カーネルのサポート部分は一般的なユーザースペース指向の規則に従う必要があります。perfperfつまりperf以前のバージョンとの互換性を維持するため、最新のカーネルは以前のバージョンとの通信perfに使用するすべてのインターフェースをサポートする必要があるため、理論的には最新のカーネルで以前のバージョンを実行することが可能です。ただし、実際にperf特定のコアでワークロードのパフォーマンスを研究できる必要がある場合は、その特定のコアのパフォーマンスに影響を与えるすべての機能も研究できる必要があります。以前のバージョンは、perfリリース後に追加された機能をサポートできませんでした。したがって、通常は一致するバージョンが必要になりますperf。これらすべてのため、実用的な選択肢は、perf実行中のカーネルと一致するバージョンを要求することです。

ディストリビューションのパッケージングの選択に応じて、実行中のカーネルと一致する実装を特定して見つからない場合は、失敗するフロントエンド、またはperf独自のバージョンである可能性があります。あまりにも長い間テストしていませんが、現在のバージョンは4.19カーネルの5.6.14や5.7.7などの古いカーネルでうまく動作します。perfperfperfperf

関連情報