第23章 OProfile

OProfile は、維持負担の少ないシステム全体のパフォーマンス監視ツールで、oprofile パッケージに含まれています。プロセッサー上にあるパフォーマンス監視ハードウェアを使用して、メモリーの参照タイミング、第 2 レベルのキャッシュ要求の回数、受け取ったハードウェア割り込みの回数など、システム上のカーネルと実行可能ファイルに関する情報を取得します。OProfile は、Java Virtual Machine (JVM) で実行されるアプリケーションのプロファイリングも実行できます。

以下は、OProfile で提供されるツールのオプションです。従来の opcontrol ツールと新たな operf ツールは同時に利用できない点に注意してください。

ophelp
システムプロセッサーで使用可能なイベントとその簡単な説明を表示します。
operf
opcontrol の後継となる予定です。operf ツールは Linux Performance Events Subsystem を使用するので、単一プロセスでも、システム全体でもプロファイルのターゲットの精度を向上できます。また、システム上でパフォーマンス監視ハードウェアを使用する他のツールと OProfile がよりうまく共存することが可能になります。opcontrol とは異なり、初期設定が不要で、--system-wide オプションを使用していなければ、root 権限なしで使用できます。
opimport
サンプルデータベースファイルをシステム用に外部のバイナリー形式からネイティブの形式に変換します。異なるアーキテクチャーからのサンプルデータベースを解析する時にのみこのオプションを使用して下さい。
opannotate
アプリケーションがデバッグシンボルでコンパイルされている場合は、実行可能ファイル用の注釈付きのソースを作成します。
opreport
プロファイルデータを取得します。
opcontrol
このツールは OProfile デーモン (oprofiled) を開始/終了し、プロファイルセッションの設定に使われます。
oprofiled
デーモンとして実行して定期的にサンプルデータをディスクに書き込みます。

レガシーモード (opcontroloprofiled、および post-processing ツール) は依然使用可能ですが、プロファイリング方法としては推奨されません。レガシーモードの詳しい説明は『システム管理者のガイド』「レガシーモードを使った OProfile の設定」の章を参照してください。

23.1. OProfile の使用

operf は、推奨されるプロファイリングデータ収集ツールです。このツールは、初期設定が必要なく、すべてのオプションはコマンドラインで渡されます。レガシーの opcontrol ツールとは異なり、operfroot 権限なしに実行できます。operf ツールの使用方法に関する詳しい情報は、『システム管理者ガイド』「operf の使用」の章を参照してください。

例23.1 Java プログラムのプロファイリングでの operf の使用

以下の例では、operf ツールを使用して Java (JIT) プログラムからのプロファイリングデータを収集し、次に opreport を使用して、シンボル毎にデータを出力します。

  1. この例で使用するデモの Java プログラムをインストールします。これは、java-1.8.0-openjdk-demo パッケージの一部で、Optional チャンネルに含まれます。Optionalチャンネルの使用方法については、「Enabling Supplementary and Optional Repositories」を参照してください。Optional チャンネルを有効にしたら以下のパッケージをインストールします。

    ~]# yum install java-1.8.0-openjdk-demo
  2. OProfileoprofile-jit パッケージをインストールして、Java プログラムからプロファイルデータを収集できるようにします。

    ~]# yum install oprofile-jit
  3. OProfile データのディレクトリーを作成します。

    ~]$ mkdir ~/oprofile_data
  4. デモプログラムが含まれるディレクトリーに移動します。

    ~]$ cd /usr/lib/jvm/java-1.8.0-openjdk/demo/applets/MoleculeViewer/
  5. プロファイリングを開始します。

    ~]$ operf -d ~/oprofile_data appletviewer \
    -J"-agentpath:/usr/lib64/oprofile/libjvmti_oprofile.so" example2.html
  6. ホームディレクトリーに移動して、収集したデータを分析します。

    ~]$ cd
    ~]$ opreport --symbols --threshold 0.5

    出力例は以下のとおりです。

    $ opreport --symbols --threshold 0.5
    Using /home/rkratky/oprofile_data/samples/ for samples directory.
    
    WARNING! Some of the events were throttled. Throttling occurs when
    the initial sample rate is too high, causing an excessive number of
    interrupts.  Decrease the sampling frequency. Check the directory
    /home/rkratky/oprofile_data/samples/current/stats/throttled
    for the throttled event names.
    
    warning: /dm_crypt could not be found.
    warning: /e1000e could not be found.
    warning: /kvm could not be found.
    CPU: Intel Ivy Bridge microarchitecture, speed 3600 MHz (estimated)
    Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (No unit mask) count 100000
    samples  %        image name               symbol name
    14270    57.1257  libjvm.so                /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.51-1.b16.el7_1.x86_64/jre/lib/amd64/server/libjvm.so
    3537     14.1593  23719.jo                 Interpreter
    690       2.7622  libc-2.17.so             fgetc
    581       2.3259  libX11.so.6.3.0          /usr/lib64/libX11.so.6.3.0
    364       1.4572  libpthread-2.17.so       pthread_getspecific
    130       0.5204  libfreetype.so.6.10.0    /usr/lib64/libfreetype.so.6.10.0
    128       0.5124  libc-2.17.so             __memset_sse2

23.2. OProfile のドキュメント

OProfile に関する詳細情報は、oprofile(1) man ページを参照してください。Red Hat Enterprise Linux には、OProfile に関する包括的なガイドが含まれており、このガイドは file:///usr/share/doc/oprofile-version/ にあります。

OProfile Manual
OProfile の詳細にわたる設定や用途の説明が含まれる包括的なマニュアルは、file:///usr/share/doc/oprofile-version/oprofile.html にあります。
OProfile Internals
OProfile の内部での機能に関する情報は、file:///usr/share/doc/oprofile-version/internals.html にあり、OProfile アップストリームへの貢献に興味のあるプログラマーには役立つ情報が含まれています。