Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

7.2.2.2. Cachegrind を使ったキャッシュ使用量のプロファイリング

Cachegrind はシステムのキャッシュ階層および分岐予測を使ってアプリケーションのやりとりをシュミレーションします。シュミレーションされた第一レベルの指示とデータキャッシュの使用量を追跡し、このレベルのキャッシュで不良なアプリケーションコードのやりとりを検出します。また、メモリーへのアクセスを追跡するため最後のレベルのキャッシュ (第2 または第 3 レベル) も追跡します。このため、Cachegrind で実行されたアプリケーションは通常の実行に比べて 20 倍 から 100 倍の時間がかかります。
Cachegrind は、アプリケーション実行中の統計を収集しコンソールに要約を出力します。cachegrind をアプリケーションで実行する場合は次のコマンドを実行します。
# valgrind --tool=cachegrind application
cachegrind の出力を特定の問題に集中させる場合は次のオプションを使用することもできます。
--I1
--I1=size,associativity,line_size などのように第 1 レベルの命令キャッシュのサイズ、結合性、行サイズを指定します。
--D1
--D1=size,associativity,line_size などのように第 1 レベルのデータキャッシュのサイズ、結合性、行サイズを指定します。
--LL
--LL=size,associativity,line_size などのように最後のレベルのキャッシュのサイズ、結合性、行サイズを指定します。
--cache-sim
キャッシュアクセスおよびミスの数の収集を有効化または無効化します。デフォルトでは有効になっています (--cache-sim=yes)。このオプションと --branch-sim の両方を無効にすると cachegrind には収集する情報がなくなります。
--branch-sim
ブランチ命令と誤った予測数の収集を有効化または無効化します。デフォルトでは有効になっています (--branch-sim=yes)。このオプションと --cache-sim の両方を無効にすると cachegrind には収集する情報がなくなります。
Cachegrind はプロファイリングの詳細情報をプロセスごとの cachegrind.out.pid ファイルに書き込みます。pid はプロセスの識別子になります。この詳細情報は付随する cg_annotate ツールでさらに以下のように処理することができます。
# cg_annotate cachegrind.out.pid
また、Cachegrind ではコード変更の前と後のプログラムパフォーマンスをより簡単に図表にすることができる cg_diff ツールも用意しています。出力ファイルを比較するには次のコマンドを実行します。first には初期プロファイルの出力ファイル、second には次のプロファイルの出力ファイルを入力します。
# cg_diff first second
結果の出力ファイルの詳細は cg_annotate ツールで表示させることができます。
cachegrind のオプション全一覧は /usr/share/doc/valgrind-version/valgrind_manual.pdf に収納されているドキュメントを参照してください。