Oracle® Developer Studio 12.5: 概要

印刷ビューの終了

更新: 2016 年 6 月
 
 

アプリケーションのパフォーマンスを調整するためのツール

Oracle Developer Studio ソフトウェアはアプリケーションの動作を調べるために使用できるいくつかのツールを備えているため、アプリケーションのパフォーマンスを調整できます。

    パフォーマンスツールには次のものが含まれています。

  • パフォーマンスアナライザおよび関連ツール。問題がパフォーマンスに影響を及ぼすコード内の位置を識別するために役立つ、高度なパフォーマンスツールおよびユーティリティーのセットです。

  • 簡易パフォーマンス最適化ツール (SPOT)。パフォーマンスアナライザツールと連携し、それらのツールによって収集されたデータをレポートする Web ページを生成します。

  • IDE のプロファイリングツール。IDE 内からプロジェクトのパフォーマンスを検査できます。

パフォーマンスアナライザツール

Oracle Developer Studio ソフトウェアには、相互に連携する一連の高度なパフォーマンスツールおよびユーティリティーが備わっています。コレクタ、パフォーマンスアナライザ、スレッドアナライザ、および er_print ユーティリティーは、コードのパフォーマンスを評価し、潜在的なパフォーマンスの問題を識別し、問題が発生するコードの部分を特定するために役立ちます。これらのツールをまとめてパフォーマンスアナライザツールといいます。

Oracle Developer Studio の C、C++、および Fortran コンパイラのオプションを使用して、ハードウェアと、プログラムのパフォーマンスを向上させる高度な最適化テクニックをターゲットにすることができます。パフォーマンスアナライザツールは、Oracle Sun ハードウェア上でコンパイラとともに使用できるようにも設計されていて、Oracle Sun マシン上で実行する場合のプログラムのパフォーマンスを向上させるのに役立ちます。

パフォーマンスアナライザツールでは、収集されるデータをより精密に制御し、データをより深く検査し、プログラムとハードウェアの相互の関連性を調べることができます。パフォーマンスアナライザツールは、現在の Oracle Sun ハードウェアで実行されている、複雑なコンピュートインテンシブアプリケーション向けに設計されており、それらのアプリケーションでテスト済みです。

パフォーマンスアナライザツールは、OpenMP 並列アプリケーションおよび MPI ベースの分散アプリケーションのプロファイリング機能も備えているため、それらのテクノロジをアプリケーションで効果的に使用しているかどうかを判別できます。

パフォーマンスアナライザツールを使用するには、2 つの手順を実行する必要があります。

  1. パフォーマンスアナライザでターゲットアプリケーションをプロファイルするか、collect コマンドを使用してターゲットアプリケーションからパフォーマンスデータを収集します。

  2. パフォーマンスアナライザのグラフィカルツール、er_print コマンド行ユーティリティー、またはスレッドアナライザのグラフィカルツールでデータを検査して、データの競合やデッドロックデータを調べます。

パフォーマンスデータを収集してアプリケーションをプロファイルする

コレクタは、プロファイリングを使用し、関数呼び出しをトレースすることによってパフォーマンスデータを収集します。このデータには、呼び出しスタック、マイクロステートアカウンティング情報 (Oracle Solaris プラットフォームのみ)、スレッド同期遅延データ、ハードウェアカウンタのオーバーフローデータ、MPI (Message Passing Interface) 関数呼び出しデータ、メモリー割り当てデータ、およびオペレーティングシステムとプロセスのサマリー情報が含まれる可能性があります。コレクタは C、C++、および Fortran プログラムのあらゆる種類のデータと、Java プログラミング言語で記述されたアプリケーションのプロファイリングデータを収集できます。コレクタは、collect コマンドを使用して、またはパフォーマンスアナライザの「アプリケーションのプロファイル」ダイアログから、あるいは dbx デバッガの collect サブコマンドを使用して実行できます。

Oracle Developer Studio IDE のプロファイリングツールも、コレクタを使用して情報を収集します。

collect コマンドでデータを収集するには:

% collect [collect-options] executable executable-options

collect コマンドにオプションを付けて、収集するデータの種類を指定できます。たとえば、–i on オプションを指定すると、コレクタが入出力トレースを実行します。実行可能ファイルの後ろに引数を指定することによって、ターゲットの実行可能ファイルに引数を渡すことができます。

コレクタは、デフォルトで test.1.er という名前のデータディレクトリを作成しますが、コマンド行で別の名前を指定できます。test.1.er ディレクトリは実験と呼ばれ、その名前はツールによって実験として認識されるように、常に .er で終わる必要があります。

次のコマンドは、synprog プログラムに対して collect を使用する方法を示しています。

% collect synprog

Creating experiment database test.1.er (Process ID: 11103) ...
00:00:00.000  ===== (11103) synprog run
00:00:00.005  ===== (11103) Mon  22 Sep 14  17:05:51 Stopwatch calibration
  OS release 5.11 -- enabling microstate accounting 5.11.
        0.000096 s.  (22.4 % of 0.000426 s.) -- inner
	N = 1000, avg = 0.096 us., min = 0.090, max = 0.105
        0.000312 s.  (67.0 % of 0.000466 s.) -- outer
	N = 1000, avg = 0.312 us., min = 0.307, max = 0.457
00:00:00.006  ===== (11103)  Begin commandline
	icpu.md.cpu.rec.recd.dousl.gpf.fitos.uf.ec.tco.b.nap.sig.sys.so.sx.so
00:00:00.006  ===== (11103) start of icputime
    3.003069 wall-secs.,   2.978360 CPU-secs., in icputime
00:00:03.009  ===== (11103) start of muldiv
    3.007489 wall-secs.,   2.997647 CPU-secs., in muldiv
00:00:06.017  ===== (11103) start of cputime
    3.002315 wall-secs.,   2.989407 CPU-secs., in cputime
00:00:09.019  ===== (11103) start of recurse
    3.082371 wall-secs.,   3.069782 CPU-secs., in recurse
...
(output edited to conserve space)
...

データは test.1.er ディレクトリに格納され、パフォーマンスアナライザまたは er_print を使用して表示できます。

ダウンロード可能なサンプルアプリケーションにパフォーマンスアナライザを使用するステップごとの手順については、Oracle Developer Studio 12.5: パフォーマンスアナライザチュートリアルを参照してください。

プロファイリングアプリケーション、およびコレクタの使用方法の詳細については、パフォーマンスアナライザの「ヘルプ」メニュー、Oracle Developer Studio 12.5: パフォーマンスアナライザマニュアル、および collect(1) のマニュアルページを参照してください。

パフォーマンスアナライザでパフォーマンスデータを調べる

パフォーマンスアナライザを使用すると、アプリケーションの動作について深い理解が得られ、コード内の問題のある部分を見つけることができます。パフォーマンスアナライザは、もっともシステムリソースを使用している関数、コードセグメント、およびソース行を特定します。パフォーマンスアナライザは、シングルスレッド、マルチスレッド、およびマルチプロセスのアプリケーションをプロファイルし、アプリケーションのパフォーマンスを改善できる箇所を特定するために役立つプロファイリングデータを提供できます。

パフォーマンスアナライザは analyzer コマンドで実行できます。パフォーマンスアナライザを起動するための analyzer コマンドの基本構文です。

% analyzer [experiment-list]

experiment-list は、コレクタによって収集された実験の 1 つまたは複数のファイル名です。複数の実験をロードする場合は、名前をスペースで区切って指定します。パフォーマンスアナライザは、複数の実験に対して起動された場合、デフォルトでは実験データをまとめますが、コマンド行で実験名の前に –c オプションを指定すると、実験を比較するためにも使用できます。

コマンド行に実験を指定しないと、パフォーマンスアナライザの「ようこそ」画面が表示され、そこから作業を開始できます。

パフォーマンスアナライザで実験 test.1.er を開くには:

% analyzer test.1.er

実験の初期のビューは「概要」であり、プログラムによって使用された時間およびリソースの簡単な概要が表示され、パフォーマンスデータのビューに表示するパフォーマンスメトリックを選択できます。

次の図は、synprog の例で行われた test.1.er 実験についての、パフォーマンスアナライザの「関数」ビューを示しています。「関数」ビューには、synprog プログラムの各関数によって使用される CPU 時間が表示されます。関数 gpf_work をクリックすると、 gpf_work 関数のリソース使用状況の詳細が右側の「選択の詳細」タブに表示されます。「関数」ビューの下部にある「呼び出し元/呼び出し回数」領域には、gpf_work から呼び出される関数が表示され、各呼び出しをダブルクリックすると「関数」ビュー内のその呼び出しに移動できます。

image:パフォーマンスアナライザの「関数」タブのスクリーンショット

パフォーマンスアナライザの使用方法については、Oracle Developer Studio 12.5: パフォーマンスアナライザマニュアル、パフォーマンスアナライザの統合ヘルプ、および analyzer(1) のマニュアルページを参照してください。

ダウンロード可能なサンプルアプリケーションにパフォーマンスアナライザを使用するステップごとの手順については、Oracle Developer Studio 12.5: パフォーマンスアナライザチュートリアルを参照してください。

er_print ユーティリティーでパフォーマンスデータを調べる

er_print ユーティリティーは、「タイムライン」表示、「MPI タイムライン」表示、および「MPI チャート」表示を除き、パフォーマンスアナライザで提供される表示のほとんどをプレーンテキストで提供します。

er_print ユーティリティーを使用して、関数、呼び出し元と呼び出し先、呼び出しツリー、ソースコードリスト、逆アセンブリリスト、標本収集情報、データ空間データ、スレッド分析データ、および実行統計のパフォーマンスメトリックを表示できます。

er_print コマンドの一般的な構文です。

% er_print -command experiment-list

1 つまたは複数のコマンドを指定して、表示するデータの種類を示すことができます。experiment-list は、コレクタによって収集された実験の 1 つまたは複数のファイル名です。er_print は、複数の実験について起動された場合、デフォルトでは実験データをまとめますが、実験を比較するためにも使用できます。

次の例は、プログラムの関数情報を表示するためのコマンドを示しています。表示されている出力は、このドキュメントの前のセクションにあるパフォーマンスアナライザのスクリーンショットで使用されたのと同じ実験のものです。

%  er_print -functions test.1.er
Functions sorted by metric: Exclusive Total CPU Time

Excl.     Incl.      Name
Total     Total
CPU sec.  CPU sec.
50.806    50.806     <Total>
 5.994     5.994     so_burncpu
 5.914     5.914     real_recurse
 3.502     3.502     gpf_work
 3.012     3.012     sigtime_handler
 3.002     3.002     bounce_a
 3.002     3.002     cputime
 3.002     3.002     icputime
 2.992     2.992     sx_burncpu
 2.992     2.992     underflow
 2.792     2.792     muldiv
 2.532     2.532     my_irand
 1.831     1.831     gethrtime
 1.031     1.991     tailcall_b
 0.961     0.961     inc_middle
 0.961     0.961     tailcall_c
 0.941     0.941     gethrvtime
 0.941     0.941     gettimeofday
 0.911     2.902     tailcall_a
 0.801     0.801     dousleep
 0.650     0.650     inc_entry
 0.640     0.640     inc_exit
 0.480     3.012     fitos
 0.330     0.330     inc_func
 0.320     0.320     inc_body
 0.320     0.320     inc_brace
 0.290     4.003     systime
 0.260     0.260     ext_macro_code

lines deleted

er_print を起動するときに実験名を指定して、コマンドを省略すると、er_print を対話的に使用することもできます。(er_print) プロンプトにコマンドを入力できます。

er_print ユーティリティーの詳細は、Oracle Developer Studio 12.5: パフォーマンスアナライザマニュアルおよび er_print(1) のマニュアルページを参照してください。

スレッドアナライザでマルチスレッドアプリケーションのパフォーマンスを分析する

スレッドアナライザは、マルチスレッドプログラムを検査するためのパフォーマンスアナライザの特殊バージョンです。スレッドアナライザは、POSIX スレッド API、Oracle Solaris スレッド API、OpenMP ディレクティブ、またはこれらの組み合わせを使用して作成されたコード内でデータの競合やデッドロックの原因となっているマルチスレッドプログラミングのエラーを検出できます。

スレッドアナライザは、マルチスレッドプログラム内で 2 つの一般的なスレッドの問題を検出します。

  • 1 つのプロセス内の 2 つのスレッドが、排他ロックを保持せずに共有メモリーの同じ場所に同時にアクセスし、それらのアクセスの少なくとも 1 つが書き込みである場合に発生するデータの競合。

  • 2 つ以上のスレッドが互いのタスクの完了まで待機しているためにブロックされている場合に発生するデッドロック。

スレッドアナライザはマルチスレッドプログラムの分析向けに簡素化されていて、パフォーマンスアナライザの「競合」、「デッドロック」、および「デュアルソース」のデータビューのみが表示されます。OpenMP プログラムについては、「OpenMP 並列領域」ビューと「OpenMP タスク」ビューも表示されます。

ソースコードまたはバイナリコードでのデータの競合も検出できます。どちらの場合も、コードに計測機構を組み込んで、必要なデータを収集できるようにする必要があります。

スレッドアナライザを使用するには:

  1. データの競合を解析するため、コードに計測機構を組み込みます。ソースコードの場合は、コンパイル時に –xinstrument=datarace コンパイラオプションを使用します。バイナリコードの場合は、discover -i datarace コマンドを使用して、計測機構が組み込まれたバイナリを作成します。

    デッドロックの検出には、計測機構は不要です。

  2. データ競合データを収集するための –r race オプション、デッドロックデータを収集するための –r deadlock オプション、または両方の種類のデータを収集するための –r all オプションを付けた collect コマンドを使用して、実行可能ファイルを実行します。

  3. tha コマンドでスレッドアナライザを起動するか、er_print コマンドを使用して結果の実験を表示します。

次の図は、OpenMP プログラムで検出されたデータの競合と、データの競合をもたらす呼び出しスタックが表示されている「スレッドアナライザ」ウィンドウを示しています。

image:OpenMP プログラムでのデータの競合の呼び出しスタックトレースを示す「競合の詳細」ウィンドウが表示されたスレッドアナライザのスクリーンショット

スレッドアナライザの使用方法については、tha(1) のマニュアルページおよびOracle Developer Studio 12.5: スレッドアナライザユーザーズガイドを参照してください。

簡易パフォーマンス最適化ツール (SPOT)

簡易パフォーマンス最適化ツール (SPOT) は、アプリケーションでのパフォーマンスの問題を診断する際に役立ちます。SPOT はアプリケーションに対して一連のパフォーマンスツールを実行し、それらのツールによって収集されたデータをレポートする Web ページを生成します。それらのツールを SPOT から独立して実行することもできます。

SPOT は Oracle Developer Studio パフォーマンスアナライザを補完するものです。パフォーマンスアナライザは、アプリケーションの実行で時間がかかった箇所を通知します。ただし、特定の状況下では、アプリケーションの問題の診断に役立つ情報がさらに必要な場合があります。SPOT はこのような状況で助けになります。

SPOT は collect ユーティリティーをそのツールの 1 つとして使用します。SPOT は、er_print ユーティリティー、および er_html という追加のユーティリティーを使用して、プロファイルデータを Web ページとして表示します。

SPOT を使用する前に、SPOT ツールがコード行にパフォーマンス情報をマッピングできるように、–O オプションで何らかのレベルの最適化を指定し、–g オプションでデバッグ情報を含めてアプリケーションバイナリをコンパイルする必要があります。

SPOT を使用すると、アプリケーションを起動するか、すでに実行されているアプリケーションに接続して、パフォーマンスデータを収集できます。

SPOT を実行してアプリケーションを起動するには:

% spot executable

すでに実行されているアプリケーションに対して SPOT を実行するには:

% spot -P process-id

SPOT は、アプリケーションの毎回の実行についてのレポートのほか、異なる実行からの SPOT データを比較するレポートも生成します。

特定の PID に SPOT を使用すると、複数のツールがその PID に順に接続されて、レポートを生成します。

次の図は、SPOT が実行されたシステムと、アプリケーションがコンパイルされた方法についての情報を示す SPOT 実行レポートの一部を示しています。このレポートには、詳細情報を含むほかのページへのリンクがあります。

image:SPOT レポートのスクリーンショット

SPOT レポートの Web ページは、コンパイルされたすべてのデータを容易に調べられるように、相互にリンクされています。

詳細は、Oracle Solaris Studio 12.2 ドキュメントライブラリ (http://docs.oracle.com/cd/E18659_01/index.html) のOracle Solaris Studio 12.2: Simple Performance Optimization Tool (SPOT) User’s Guideを参照してください。

IDE のプロファイリングツール

Oracle Developer Studio IDE は、IDE 内で実行されているプロジェクトのパフォーマンスを検査できる対話型のグラフィカルプロファイリングツールを提供しています。プロファイリングツールは、Oracle Developer Studio のユーティリティーおよびオペレーティングシステムのユーティリティーを使用してデータを収集します。

プロファイリングツールは、「プロジェクトをプロファイル」ボタン image:「プロジェクトをプロファイル」ボタン から使用できます。

プロジェクトのモニター

プログラムのリソース使用状況のサマリーを確認できるグラフが表示されます。

メモリーアクセスエラー

実行されているプログラムを分析して、メモリーアクセスエラーおよびメモリーリークを検出します。

データ競合とデッドロックの検出

実行されているプログラムを分析して、実際に発生したデータの競合や潜在的なデータの競合、およびスレッド間のデッドロックを検出します。

プロジェクトをプロファイルして「プロジェクトをモニター」を選択すると、「実行モニター」ウィンドウが開いて、CPU 使用率、メモリー使用状況、およびスレッド使用量に関する低インパクトツールの出力が表示されます。

次の図は、「実行モニター」ツールが表示されている IDE を示しています。

image:「実行モニター」ツールが表示されている IDE のスクリーンショット

より詳細なプロファイリングのための追加ツールは、システムおよびアプリケーションへのパフォーマンス上の影響が大きいため、プロジェクトのモニターを実行したときにそれらのツールは自動的には実行されません。高度なツールは実行モニタープロファイリングツールにリンクされていて、ホットスポット、メモリーリーク、および同期の問題を表示するためのボタンをクリックすることによって簡単に起動できます。

「データの競合とデッドロックの検出」ツールで使用されているベースとなるテクノロジは、このドキュメントで説明するスレッドアナライザと同じです。このツールは、スレッド化されたプログラムに計測機構を組み込んだあと、そのプログラムを実行中に解析して、スレッド間での実際のデータ競合およびデッドロックと潜在的なデータ競合およびデッドロックを検出します。このツールを起動するには、「プロジェクトをプロファイル」ボタンクリックし、「データの競合やデッドロック」を選択し、データ収集のオプションを指定して、「開始」をクリックします。

次の図は、データの競合を検出したあとの「データの競合とデッドロックの検出」ツールを示しています。

image:「データの競合とデッドロックの検出」が実行されている IDE のスクリーンショット

「データの競合の検出」ウィンドウの「詳細」リンクをクリックすると、「スレッドの詳細」ウィンドウが開き、データの競合の発生箇所が表示されます。「スレッドの詳細」ウィンドウでスレッドをダブルクリックして、問題が発生するソースファイルを開き、影響を受けるコード行に移動できます。

「メモリーアクセスエラー」ツールで使用されるベースとなるテクノロジは、前述の discover と同じです。このツールは、プログラムに計測機構を組み込んでから、プログラムを実行中に解析して、メモリーアクセスエラーおよびメモリーリークを検出します。このツールを起動するには、「プロジェクトをプロファイル」ボタンクリックし、「メモリーアクセスエラー」を選択し、データ収集のオプションを指定して、「開始」をクリックします。各種のメモリーアクセスエラーが「メモリー解析」ウィンドウに表示されます。エラーの種類をクリックすると、その種類のエラーが「メモリー解析ツール」ウィンドウに表示され、各エラーの呼び出しスタックを見ることができます。

次の図は、メモリーアクセスエラーを検出したあとの「メモリーアクセスエラー」ツールを示しています。

image:「メモリーアクセスエラー」が実行されている IDE のスクリーンショット

プロファイリングツールの使用方法については、F1 キーを押すか、IDE の「ヘルプ」メニューを使用してアクセスできる IDE の統合ヘルプを参照してください。ヘルプの「目次」タブで「C/C++/Fortran アプリケーションのプロファイル」、「データの競合とデッドロックの検出」、および「プロジェクト内のメモリーアクセスエラーの検出」を選択してください。