Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

cc(1)

prof(1)

gprof(1)

profil(2)

sbrk(2)

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

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026