Red Hat Training

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

5.3.3. Massif を使ったヒープおよびスタック領域のプロファイリング

Massif は特定のプログラムが使用するヒープ領域を測定します。測定対象は、使用可能な領域とブックキーピングおよび調整目的に割り当てられている追加領域の両方です。これは、プログラムが使用するメモリ量の削減に役立ちます。これにより、プログラムスピードの向上が可能になり、プログラムを実行するマシンのスワップ領域をプログラムが使い尽くしてしまう可能性を低減します。Massif は、ヒープ領域の割り当てに関してプログラムのどの部分に責任があるかという詳細も提供します。Massif で実行されるプログラムは、通常の実行スピードよりも約 20 倍遅くなります。
プログラムのヒープ使用量をプロファイリングするには、massifを使用する Valgrind ツールとして指定します。
# valgrind --tool=massif program
Massif が収集したプロファイリングデータは、デフォルトで massif.out.pid と呼ばれるファイルに書き込まれます。ここでは、pid は指定されたprogram のプロセス ID になります。
このプロファイリングデータは、以下のように ms_print コマンドでグラフ化することも可能です。
# ms_print massif.out.pid
これで、プログラムの実行に対するメモリ消費量を表示するグラフが作成されます。また、ピークメモリ割り当て地点を含むプログラムの様々な地点における割り当てに責任を負うサイトについての詳細情報も作成します。
Massif は、ツールの出力に指示を与えるコマンドラインオプションを数多く提供します。以下に例を挙げます。
--heap
ヒーププロファイリングを実行するかどうかを指定します。デフォルト値は yes です。このオプションを no に設定すると、ヒーププロファイリングを無効にできます。
--heap-admin
ヒーププロファイリングの有効時に管理用に使用するブロックあたりのバイト数を指定します。デフォルト値はブロックあたり 8 バイトです。
--stacks
スタックプロファイリングを実行するかどうかを指定します。デフォルト値は no (無効) です。スタックプロファイリングを有効にするには、このオプションを yes に設定します。ただし、この設定では Massif が大幅に遅くなることに留意してください。また、プロファイリングされているプログラムがコントロールするスタック部分のサイズをより分かりやすく示すために、メインスタックはスタート時にサイズがゼロであると Massif が仮定していることにも注意してください。
--time-unit
プロファイリングに使用される時間の単位を指定します。このオプションには 3 つの有効な値があります。実行済みの指示 (i) - これはデフォルト値で、ほとんどのケースに使えます。リアルタイム (ms、ミリ秒) - 特定のインスタンスでは有用です。ヒープ上に割り当て/解放されたバイトおよび/もしくはスタック (B) - これは異なるマシンで最も再現可能なので、非常に短期稼働のプログラムやテスト目的で有用です。このオプションは、ms_print で Massif 出力をグラフ化する際に有用です。
オプションの全一覧は、/usr/share/doc/valgrind-version/valgrind_manual.pdf にある資料を参照してください。