MONITOR(3) — UNIX Programmer’s Manual
名称
monitor,monstartup,moncontrol − 実行プロファイルの準備
形式
monitor(lowpc, highpc, buffer, bufsize, nfunc)
int (∗lowpc)(), (∗highpc)();
short buffer[];
monstartup(lowpc, highpc)
int (∗lowpc)(), (∗highpc)();
moncontrol(mode)
解説
モニタを利用するには、 2通りの形式があります。 次のようにして、 実行可能なプログラムが作られます。
cc −p . . .
このプログラムは、 自動的に prof(1) モニタの呼び出しと、 その実行開始ルーチン monstartup のデフォルトのパラメータでの初期呼び出しを含みます。 プロファイルのバッファ割り当てに関して、 厳密な制御を行う場合以外、 monitor が明示的に呼び出される必要はありません。 また、 次のコマンド列でも、 実行可能なプログラムが作られます。
cc −pg . . .
このプログラムは、 自動的に gprof(1) モニタの呼び出しを含みます。
monstartup は、 profil(2) への高水準インタフェースです。 lowpc と highpc は、サンプリングされるアドレス範囲です。 サンプリングされる最下位アドレスは lowpc で、 最高位アドレスは highpc です。 定期的にサンプリングされるプログラムカウンタの値、 および特定の関数の呼び出し回数のヒストグラムを バッファに記憶するため、 monstartup は sbrk(2) を使用して空間を割り当て、 それを monitor へ渡します(以下参照)。 このとき、 cc(1) のプロファイルオプション −p でコンパイルされた関数の呼び出しだけが、記録されます。
プログラム全体をプロファイルするには、 次のようにするだけで充分です。
extern etext();
. . .
monstartup((int) 2, etext);
etext は、 全プログラムテキストの次に位置します。 end (3) を参照してください。
モニタの実行を中止し、 ファイル mon.out に結果を書き込むには、 次のようにします。
monitor(0); これで、 prof(1) を使って結果を調べることができます。
moncontrol は、 プログラムのプロファイルを選択的に制御するのに利用されます。 つまり、 prof(1) または gprof(1) のどちらか一方のタイプを使ってプロファイルします。 プロファイルは、 プログラム実行と同時に開始します。 そして、 ヒストグラムの記録と呼び出し回数の集計を停止する場合は、 moncontrol(0) を使い、 再開する場合は moncontrol(1) を使います。 これによって、 ある特定の操作に関する負荷を測ることができます。 moncontrol の状態とは全く関係なしにプログラム終了時に、 ファイルが作成されることに注意してください。
monitor は、 profil(2) への低レベルのインタフェースです。 lowpc と highpc は、 2つの関数のアドレスです。 buffer は、 サイズが bufsize のショートタイプの整数型配列(ユーザが用意したもの)のアドレスです。 ここには、 大部分の nfunc の呼び出し回数が保存できます。 有効な結果を得るために、 小さくて使用頻度の高いルーチンがある場合、 バッファはサンプリングされる領域の 1/2 〜 1/3 程度ににしておくと良いでしょう。
monitor は、 バッファを lowpc と highpc の範囲でサンプリングするプログラムカウンタのヒストグラムを 集計する空間と、 cc(1) の −p オプションでコンパイルされた関数の呼び出し回数を 集計する空間に分けます。
プログラム全体をプロファイルするには、 次のようにするだけで充分です。
extern etext();
. . .
monitor((int) 2, etext, buf, bufsize, nfunc);
関連ファイル
mon.out
関連事項
cc(1), prof(1), gprof(1), profil(2), sbrk(2)
NEWS-OSRelease 3.3