OProfileデーモンによってoprofiled周期的にサンプルが 収集され、 /var/lib/oprofile/samples/ ディレクトリに書き込まれます。 データを読み出す前に、次のコマンドをrootとして実行して 全てのデータがディレクトリに書き込まれたかを確認して下さい。
opcontrol --dump |
サンプルファイル名は実行可能ファイル名が基になっており、 スラッシュ(/)の代わりに 括弧(})が使われます。 ファイル名はシャープ(#)で終り、 その後にサンプルファイルに使用されるカウンタ番号が続きます。 例えば、次のファイルにはカウンタ0にて収集された /sbin/syslogd 実行可能ファイル が格納されています。
}sbin}syslogd#0 |
収集されたサンプルデータのプロファイルには次のツールを使用して下さい。
op_time
oprofpp
op_to_source
op_merge
レポートを生成しさらに分析を行なうには、 プロファイルされたバイナリと併して このようなツールを使用して下さい。
![]() | 警告 |
---|---|
プロファイルされた実行可能ファイルのデータを分析するには、 必ずこのようなツールを使用してください。 データを収集した後に変更が必要な場合は、サンプルとサンプルファイル作成 に使用された実行可能ファイルをバックアップしてください。 |
各実行可能ファイルのサンプルは単一のサンプルファイルに書き込みされます。 動的にリンクされたライブラリのサンプルも単一のサンプルファイルに書き込みされます。 OProfileが実行されている間に監視された実行可能ファイルが変更された上、 実行 可能ファイルのサンプルファイルが存在する場合、既存のサンプルファイルは自動的 に削除されます。 そのため、既存のサンプルファイルが必要な場合は、実行可能ファイルが新しい バージョンに更新される前に既存サンプルファイルとその生成に使用された実行 可能ファイルをバックアップして下さい。
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オプションはカウンタ番号の指定に便利です。
実行可能ファイルの詳細情報を読み出すには oprofppを使用してください。
oprofpp <mode> <executable> |
分析を行なうには、<executable> を実行可能ファイルのフルパスとしてください。 <mode> は次のうちの1つを選択してください。
シンボルにてサンプルデータの一覧を表示します。 次の例は、コマンド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オプションを使用してください。
シンボル名特有のサンプルデータを一覧で表示します。 コマンド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よりも詳細にシンボルにて表示します。例は 次の通りです。
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 オプションと変わりません。 各仮想メモリアドレスのサンプル数と、シンボルのサンプル数に対するサンプル数を百分率で 表示しています。
ファイルにgprof形式で出力します。生成 されたファイルの名前がgmon.outの場合は データーをさらに分析するのにgprofを使用することができます。詳細はgprof man ページを参照ください。
データをさらに制限するその他のオプションは次の通りです。
指定されたサンプルファイル<file-name>を 使用します。 デフォルトでは、/var/lib/oprofile/samples/ のサンプルファイルが使用されます。 このオプションを使用して、前回のセッションでのサンプルファイル指定します。
<file-name> をデータを取り込む実行可能ファイルの名前としてください。
C++ シンボル名を demangle します。
C++ シンボル名をdemangle し、STLライブラリの demangle 名を簡素化します。
特定カウンタより情報を収集します。カウンタが指定されていない場合、 デフォルトカウンタは0になります。
各サンプルに対するソースコードのライン番号を表示します。 実行可能ファイルがこのコマンドに対応している場合は、 GCCの-gオプションが使用されるはずです。 対応していない場合はこのオプションではライン番号は表示されません。 デフォルトではRed Hat Enterprise Linux実行可能ファイルはこのオプションに対応していません。
vma samples % symbol name linear info 0806cbb0 0 0 _start ../sysdeps/i386/elf/start.S:47 |
シンボルのカンマ区切りリストを出力から排除します。
共有ライブラリを含む追加カラムを表示します。 このオプションを正確に機能させるには、 OProfile設定時にopcontrolの --separate=library オプション の指定が必要です。又、このオプションと--dump-gprof-file オプションを併用しないようにしてください。
特定の列順で出力を表示します。 このオプションは-gと併用できません。
次の文字を使って列を表してください。
/var/lib/oprofile/samples/ディレクトリ に対するセッション又はディレクトリのフルパスを指定します。
分析対象の実行可能ファイルが位置するパスのカンマ区切りリストを 指定します。
op_to_sourceツールは 命令のサンプルをソースコードの対応ラインへ適合します。結果として生成された ファイルの左側にはラインのサンプルがあるはずです。 また、このツールは 各機能の最初にコメントを書き込み、機能のサンプル総数を表示します。
このユーティリティを確実に実行するには、 実行可能ファイルがGCCの-gオプションに対応していなければ なりません。デフォルトでは、Red Hat Enterprise Linuxはこのオプションに対応していません。
op_to_sourceの一般的な構文は次の通りです。
op_to_source --source-dir <src-dir> <executable> |
分析対象のソースコードと実行可能ファイルを 格納しているディレクトリを必ず指定してください。 追加コマンドラインオプションの一覧は op_to_sourceの man ページ を参照ください。
同じ実行可能ファイル又はライブラリのサンプルファイルが複数存在する場合、 ファイルを結合することにより分析を簡素化することができます。
例として、ライブラリ/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オプションの後にカウンタ番号を使用してください。