43.5. データ分析

OProfileデーモンによってoprofiled周期的にサンプルが 収集され、 /var/lib/oprofile/samples/ ディレクトリに書き込まれます。 データを読み出す前に、次のコマンドをrootとして実行して 全てのデータがディレクトリに書き込まれたかを確認して下さい。

opcontrol --dump

サンプルファイル名は実行可能ファイル名が基になっており、 スラッシュ(/)の代わりに 括弧(})が使われます。 ファイル名はシャープ(#)で終り、 その後にサンプルファイルに使用されるカウンタ番号が続きます。 例えば、次のファイルにはカウンタ0にて収集された /sbin/syslogd 実行可能ファイル が格納されています。

}sbin}syslogd#0

収集されたサンプルデータのプロファイルには次のツールを使用して下さい。

レポートを生成しさらに分析を行なうには、 プロファイルされたバイナリと併して このようなツールを使用して下さい。

警告警告
 

プロファイルされた実行可能ファイルのデータを分析するには、 必ずこのようなツールを使用してください。 データを収集した後に変更が必要な場合は、サンプルとサンプルファイル作成 に使用された実行可能ファイルをバックアップしてください。

各実行可能ファイルのサンプルは単一のサンプルファイルに書き込みされます。 動的にリンクされたライブラリのサンプルも単一のサンプルファイルに書き込みされます。 OProfileが実行されている間に監視された実行可能ファイルが変更された上、 実行 可能ファイルのサンプルファイルが存在する場合、既存のサンプルファイルは自動的 に削除されます。 そのため、既存のサンプルファイルが必要な場合は、実行可能ファイルが新しい バージョンに更新される前に既存サンプルファイルとその生成に使用された実行 可能ファイルをバックアップして下さい。

43.5.1. op_timeの使用

op_timeツールは プロファイルされた全ての実行可能ファイルの概要を表示します。

出力例の一部は次の通りです。

581        0.2949  0.0000 /usr/bin/oprofiled
966        0.4904  0.0000 /usr/sbin/cupsd
1028       0.5218  0.0000 /usr/sbin/irqbalance
1187       0.6026  0.0000 /bin/bash
1480       0.7513  0.0000 /usr/bin/slocate
2039       1.0351  0.0000 /usr/lib/rpm/rpmq
6249       3.1722  0.0000 /usr/X11R6/bin/XFree86
8842       4.4885  0.0000 /bin/sed
31342     15.9103  0.0000 /usr/bin/gdmgreeter
58283     29.5865  0.0000 /no-vmlinux
82853     42.0591  0.0000 /usr/bin/perl

各実行可能ファイルは独自のラインに表示されます。 最初の列は、実行可能ファイルに対して記録されたサンプル数を表します。 2番目の列は 、サンプル総数に対するサンプル数を百分率で表しています。 3番目の列は未使用で、4番目の列は実行可能ファイル名となっています。

コマンドラインオプションの一覧は op_time のman ページを参照ください。 -rオプションは実行可能ファイルからの出力を サンプル数の多いものから降順にソートします。 また、-cオプションはカウンタ番号の指定に便利です。

43.5.2. oprofppの使用

実行可能ファイルの詳細情報を読み出すには oprofppを使用してください。

oprofpp <mode> <executable>

分析を行なうには、<executable> を実行可能ファイルのフルパスとしてください。 <mode> は次のうちの1つを選択してください。

-l

シンボルにてサンプルデータの一覧を表示します。 次の例は、コマンドoprofpp -l /usr/X11R6/bin/XFree86の出力の一部です。

vma      samples  %           symbol name
...
08195d10 4        3.0303      miComputeCompositeClip
080b9180 5        3.78788     Dispatch
080cdce0 5        3.78788     FreeResource
080ce4a0 5        3.78788     LegalNewID
080ce640 5        3.78788     SecurityLookupIDByClass
080dd470 9        6.81818     WaitForSomething
080e1360 12       9.09091     StandardReadRequestFromClient
...

最初の列は、開始仮想メモリアドレス(vma)を表します。 2番目の列は、シンボルのサンプル数を表します。 3番目の列は、実行可能ファイルのサンプル総数に対するシンボルのサンプル数を 百分率で表しています。 4番目の列はシンボル名となっています。

出力をサンプル数の多いものから降順にソートするには、 -r in conjunction with the -lオプションを使用してください。

-s <symbol-name>

シンボル名特有のサンプルデータを一覧で表示します。 コマンドoprofpp -s StandardReadRequestFromClient /usr/X11R6/bin/XFree86の 出力は次の通りです。

vma      samples  %           symbol name
080e1360 12       100         StandardReadRequestFromClient
080e1360 1        8.33333
080e137f 1        8.33333
080e13bb 1        8.33333
080e13f4 1        8.33333
080e13fb 1        8.33333
080e144a 1        8.33333
080e15aa 1        8.33333
080e1668 1        8.33333
080e1803 1        8.33333
080e1873 1        8.33333
080e190a 2        16.6667

最初のラインはシンボル/実行可能ファイルが一体した要約です。

最初の列にサンプルされた仮想メモリアドレスが含まれます。 2番目の列はメモリアドレスのサンプル数になります。 3番目の列はシンボルのサンプル総数に対するメモリアドレスのサンプル を百分率で表示しています。

-L

サンプルデータを-lよりも詳細にシンボルにて表示します。例は 次の通りです。

vma      samples  %           symbol name
08083630 2        1.51515     xf86Wakeup
 08083641 1        50
 080836a1 1        50
080b8150 1        0.757576    Ones
 080b8179 1        100
080b8fb0 2        1.51515     FlushClientCaches
 080b8fb9 1        50
 080b8fba 1        50
...

各シンボルの仮想メモリアドレスが表示されていることを除けば データは-l オプションと変わりません。 各仮想メモリアドレスのサンプル数と、シンボルのサンプル数に対するサンプル数を百分率で 表示しています。

-g <file-name>

ファイルにgprof形式で出力します。生成 されたファイルの名前がgmon.outの場合は データーをさらに分析するのにgprofを使用することができます。詳細はgprof man ページを参照ください。

データをさらに制限するその他のオプションは次の通りです。

-f <file-name>

指定されたサンプルファイル<file-name>を 使用します。 デフォルトでは、/var/lib/oprofile/samples/ のサンプルファイルが使用されます。 このオプションを使用して、前回のセッションでのサンプルファイル指定します。

-i <file-name>

<file-name> をデータを取り込む実行可能ファイルの名前としてください。

-d

C++ シンボル名を demangle します。

-D

C++ シンボル名をdemangle し、STLライブラリの demangle 名を簡素化します。

--counter <number>

特定カウンタより情報を収集します。カウンタが指定されていない場合、 デフォルトカウンタは0になります。

-o

各サンプルに対するソースコードのライン番号を表示します。 実行可能ファイルがこのコマンドに対応している場合は、 GCCの-gオプションが使用されるはずです。 対応していない場合はこのオプションではライン番号は表示されません。 デフォルトではRed Hat Enterprise Linux実行可能ファイルはこのオプションに対応していません。

vma      samples  %      symbol name        linear info
0806cbb0 0        0      _start             ../sysdeps/i386/elf/start.S:47
-e <symbol-name>

シンボルのカンマ区切りリストを出力から排除します。

-k

共有ライブラリを含む追加カラムを表示します。 このオプションを正確に機能させるには、 OProfile設定時にopcontrol--separate=library オプション の指定が必要です。又、このオプションと--dump-gprof-file オプションを併用しないようにしてください。

-t <format>

特定の列順で出力を表示します。 このオプションは-gと併用できません。

次の文字を使って列を表してください。

文字説明
v仮想メモリアドレス
sサンプル数
S累積サンプル数
p実行可能ファイルのサンプル総数に対するサンプル数のパーセント値
P実行可能ファイルのサンプル総数に対するサンプル数の累積パーセント値
qサンプルした全実行可能ファイルに対するサンプル数のパーセント値
Qサンプルした全実行可能ファイルに対するサンプル数の累積パーセント値
nシンボル名
lフルパスを含む、ソースファイルとライン番号のファイル名
Lソースコードとライン番号のベース名
iフルパスを含む実行可能ファイル名
I実行可能ファイルのベース名
dサンプルの詳細
h列のヘッダーを表示

表 43-4. 列順を指定する文字

--session <name>

/var/lib/oprofile/samples/ディレクトリ に対するセッション又はディレクトリのフルパスを指定します。

-p <path-list>

分析対象の実行可能ファイルが位置するパスのカンマ区切りリストを 指定します。

43.5.3. op_to_sourceの使用

op_to_sourceツールは 命令のサンプルをソースコードの対応ラインへ適合します。結果として生成された ファイルの左側にはラインのサンプルがあるはずです。 また、このツールは 各機能の最初にコメントを書き込み、機能のサンプル総数を表示します。

このユーティリティを確実に実行するには、 実行可能ファイルがGCCの-gオプションに対応していなければ なりません。デフォルトでは、Red Hat Enterprise Linuxはこのオプションに対応していません。

op_to_sourceの一般的な構文は次の通りです。

op_to_source --source-dir <src-dir> <executable>

分析対象のソースコードと実行可能ファイルを 格納しているディレクトリを必ず指定してください。 追加コマンドラインオプションの一覧は op_to_sourceの man ページ を参照ください。

43.5.4. op_mergeの使用

同じ実行可能ファイル又はライブラリのサンプルファイルが複数存在する場合、 ファイルを結合することにより分析を簡素化することができます。

例として、ライブラリ/usr/lib/library-1.2.3.soのファイルを結合するには、次のコマンドをrootとして実行 します。

op_merge /usr/lib/library-1.2.3.so

結果として/var/lib/oprofile/samples/}usr}lib}library-1.2.3.soが作成されました。

特定カウンタに結合するサンプルを制限するには、 -cオプションの後にカウンタ番号を使用してください。