11.3. perf の出力とシンボル解決について
perf top の監視インターフェイスは、CPU 使用率と関数のアクティビティーをリアルタイムで表示します。出力を理解することで、パフォーマンスのボトルネックを特定し、システムの動作を最適化することができます。
- perf top の出力の主な列
- インターフェイスには次のいくつかの列が表示されます。
- Overhead
-
特定の関数によって消費された CPU 時間の割合を表示します。これは、最も
resource-intensiveな (多くのリソースを消費する) 操作を特定するのに役立ちます。 - Shared Object
- 関数が存在するプログラムまたはライブラリーの名前を示します。
- Symbol
関数またはシンボルの名前を表示します。
- カーネル空間で実行される関数には [k] のマークが付きます。
- ユーザー空間で実行される関数には [.] のマークが付きます。
- perf の出力でシンボルが解決されない原因
カーネル関数は、
perfは/proc/kallsymsファイルの情報を使用して、サンプルをそれぞれの関数名またはシンボルにマッピングします。ただし、ユーザー空間で実行される関数は、バイナリーから一部の情報が取り除かれているため、生の関数アドレスが表示される場合があります。この情報は、対応する debuginfo パッケージをインストールするか、
gccの-gオプションを使用するなどしてデバッグを有効にしてアプリケーションをコンパイルすることによって含めることができます。必要なデバッグ情報が利用可能になると、perfはレポート作成時に、サンプリングされたアドレスを人間が判読できる関数名に正確にマッピングできるようになります。注記デバッグ情報を利用可能にした後、
perf recordコマンドを再実行する必要はありません。perf reportコマンドを再度実行すれば、解決されたシンボルが反映されます。