Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ gprof(1) — NEWS-os 3.3

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

monitor(3)

profil(2)

cc(1)

prof(1)

GPROF(1)  —  UNIX Programmer’s Manual

名称

gprof − コールグラフ(呼び出し記録)プロファイルデータを表示する

形式

gprof [ options ] [ a.out [ gmon.out ... ] ]

解説

gprof は、C または Pascal、Fortran77 プログラムの実行プロファイルを作ります。 呼び出されたルーチンの結果が、 各呼出し元プログラムのプロファイルに組み込まれます。 プロファイルデータは、 cc および pc、 f77 で −pg オプションを用いてコンパイルされたプログラムによって 作成されるコールグラフプロファイルファイル (gmon.out がデフォルト)から取り込まれます。 また、このオプションは、 プロファイリング用にコンパイルされたバージョンの ライブラリルーチンをリンクします。 指定したオブジェクトファイル (a.out がデフォルト)内のシンボルテーブルが読み取られ、 コールグラフプロファイルファイルと照合されます。 複数のプロファイルファイルの指定がある場合には、 gprof の出力には、 それらのプロファイルファイル内のプロファイル情報を集約したものが示されます。

まず、 prof(1) で表示されるような、単純なプロファイルが表示されます。 このリストでは、プログラム内の関数の各々について、 総実行時間と呼び出し回数が(時間の多いものの順にソートされて)示されます。

次に、これらの時間はコールグラフのエッジに沿って伝えられます。 サイクルが検出され、そのサイクル中の呼び出しがサイクル時間を分配します。 第2 のリストには、関数が、実行時間(表示の中に示されている) の順で表示されます。 この時間には、関数の子孫のコールグラフの時間も含まれています。
各関数のエントリの下には、 その関数が(直接)呼び出した子コールグラフと、 それらの実行時間が関数の実行時間のどのくらいを占めるかが示されます。 各関数の上に示される類似の表示は、 その関数とその子孫の実行時間が その関数を(直接)呼び出した親コールグラフの実行時間の どのくらいを占めるかを示します。

また、サイクルも、全体としてのサイクルのエントリ、 サイクルを構成する部分とそれらの時間の影響、 およびサイクルの呼び出し回数のリストの形で表示されます。

次のオプションを使用することができます。

−a static 宣言された関数の表示を抑制します。 このオプションが指定された場合には、 static な関数についてのすべての関連情報 (例えば、 時間サンプル、 他の関数の呼び出し、他の関数からの呼び出し)は、 static 関数の直前にロードされた a.out ファイル内の関数に属します。

−b プロファイルの各フィールドの説明の表示を抑制します。

−c プログラムの静的なコールグラフが、 オブジェクトファイルのテキストスペースを 検査するという発見的方法で見つけ出されます。 静的であるだけの親と子は、呼び出し回数 0 で示されます。

−e name
ルーチン name とその子孫のグラフのプロファイルエントリの表示を抑制します (抑制されていない他の先祖グラフから呼び出されていない場合)。 複数の −e オプションを指定することができます。 各 −e オプションには name を 1つだけ指定できます。

−E name
上記の −e と同様にルーチン name (とその子孫)のグラフプロファイルエントリの表示を抑制し、 さらに、時間の総計と割合の計算から、 name (とその子孫)のために費やされた時間を除きます (例えば、 −E mcount −E mcleanup がデフォルトになります)。

−f name
指定のルーチン name とその子孫のグラフプロファイルエントリだけを表示します。 複数の −f オプションを指定することができます。 各 −f オプションには、 name を 1つだけ指定します。

−F name
(上記の −f オプションと同様に)指定のルーチン name とその子孫のグラフプロファイルエントリだけを表示し、 さらに、実行時間の総計と割合の計算に、 表示されるルーチンの時間だけを使用します。 複数の −F オプションを指定することができます。 各 −F オプションでは、 name を 1つだけ指定します。 −F オプションは、 −E オプションより優先します。

−s 指定したすべてのプロファイルファイルに収められている プロファイル情報を集約したプロファイルファイル gmon.sum が作られます。 この要約プロファイルファイルは、それ以降に実行される gprof (−s オプションの指定が可能)に与え、 何度か a.out ファイルを実行することによってプロファイルデータを 蓄積することができます。

−z まったく使用されていないルーチン (呼び出し回数と蓄積時間がゼロで示されるもの)を表示します。 これは、1度も呼び出されなかったルーチンを突き止める時に、 −c オプションと組み合わせて使用すると有用です。

関連ファイル

a.out ネームリストとテキストスペース
gmon.out 動的コールグラフとプロファイル
gmon.sum 要約された動的コールグラフとプロファイル

関連事項

monitor(3), profil(2), cc(1), prof(1)
“gprof: A Call Graph Execution Profiler”, Graham, S.L., Kessler, P.B., McKusick, M.K.著、 Proceedings of the SIGPLAN ’82 Symposium on Compiler Construction, SIGPLAN Notices, Vol.17, No.6, pp.120-126, June 1982.

バグ

量子化エラーに気を付けてください。 サンプリングの粗さが示されますが、統計としては充分に使用できます。 1つの関数の各実行時間は、その関数の総実行時間を 呼び出し回数で割った値であるものとみなしています。 したがって、その関数の親に対するコールグラフの弧に沿って占めされる時間は、 その弧が横切られている回数に比例します。

それ自身がプロファイルされていない親は、 プロファイルされている子が占める実行時間を有しますが、 コールグラフの表示では自発的に呼び出されたように表され、 子に占められた時間は有していません。 同様に、シグナルキャッチャは、 プロファイルされていても、 (よりあいまいな理由から)自発的であるように表されます。 プロファイルされているシグナルキャッチャの子は、 そのシグナルキャッチャがプロファイリングルーチンの 実行中に呼び出されていなければ、 適正に占められた時間を有している必要があります。 プロファイリングルーチンの実行中に呼び出された場合には、 すべてが失われます。

プロファイルされたプログラムは、 exit(2) を呼び出して、プロファイリング情報が gmon.out ファイルに セーブされるように、正常に戻らなくてはなりません。

NEWS-OSRelease 3.3

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