プログラムのパフォーマンス解析

prof によるプログラムプロファイルの生成

prof はプログラムによって使用される CPU 時間の統計プロファイルを生成し、プログラム中の各関数へ制御が渡される回数をカウントします。さらに詳細なデータは、コールグラフプロファイルおよびコードカバレージツールによって提供されます。

prof を利用するための手順は以下の 3 段階となっています。

  1. prof 用のプログラムをコンパイルします。

  2. プログラムを実行して、プロファイルデータファイルを作成します。

  3. prof を使ってデータを要約したレポートを生成します。

prof によるプロファイリング用のプログラムをコンパイルするには、コンパイラに対して -p オプションを使用してください。たとえば、index.assist.c という名前の C のソースファイルをプロファイリング用にコンパイルするには、以下のコンパイラコマンドを使用します。


% cc -p -o index.assist index.assist.c

コンパイラは index.assist という名前のプログラムを作成します。

次に、この index.assist プログラムを実行してください。プログラムを実行するたびに、プロファイリングデータが mon.out と呼ばれるファイルに送られます。プログラムを実行するたびに、新しい mon.out が生成され、古いバージョンは上書きされます。

最後に prof コマンドを使ってレポートを生成します。


% index.assist 
% ls mon.out
mon.out
% prof index.assist

prof の出力は、以下の例のようになります。

%Time 

Seconds 

Cumsecs 

#Calls 

msecs/call 

Name  

19.4 

3.28 

3.28 

11962 

0.27 

compare_strings  

15.6 

2.64 

5.92 

32731 

0.08 

_strlen  

12.6 

2.14 

8.06 

4579 

0.47 

__doprnt  

10.5 

1.78 

9.84 

 

 

mcount 

9.9 

1.68 

11.52 

6849 

0.25 

_get_field  

5.3 

0.90 

12.42 

762 

1.18 

_fgets  

4.7 

0.80 

13.22 

19715 

0.04 

_strcmp  

4.0 

0.67 

13.89 

5329 

0.13 

_malloc  

 3.4 0.57 14.46 11152 0.05 _insert_index_entry
 3.1 0.53 14.99 11152 0.05 _compare_entry
 2.5 0.42 15.41 1289 0.33 lmodt
 0.9 0.16 15.57 761 0.21 _get_index_terms
 0.9 0.16 15.73 3805 0.04 _strcpy
 0.8 0.14 15.87 6849 0.02 _skip_space
 0.7 0.12 15.99 13 9.23 _read
 0.7 0.12 16.11 1289 0.09 ldivt
 0.6 0.10 16.21 1405 0.07 _print_index
 . . (以下の出力はそれほど重要ではありません)