JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
Oracle Solaris Studio 12.3 の概要     Oracle Solaris Studio 12.3 Information Library (日本語)
search filter icon
search icon

ドキュメントの情報

はじめに

Oracle Solaris Studio 12.3 の概要

Oracle Solaris Studio ソフトウェアの概要

Oracle Solaris Studio での開発者ワークフロー

Oracle Solaris Studio IDE

Oracle Solaris Studio コンパイラ

C コンパイラ

cc コマンドの構文

C のドキュメント

C++ コンパイラ

CC コマンドの構文

C++ のドキュメント

Fortran 95 コンパイラ

f95 コマンドの構文

Fortran のドキュメント

C/C++/Fortran ライブラリ

並列プログラミング用の OpenMP 3.1

大量の計算を行うプログラムのための Sun Performance Library

アプリケーションの構築用の dmake ユーティリティー

アプリケーションのデバッグ用のツール

コマンド行での dbx

IDE での dbx

dbxtool での dbx

アプリケーションの検証用のツール

メモリーエラーを検出するための Discover ツール

コードカバレージを測定するための Uncover ツール

統合エラーチェック用のコードアナライザツール

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

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

コレクタでパフォーマンスデータを収集する

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

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

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

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

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

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

詳細情報

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

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

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

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

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

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

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

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

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

  1. コレクタでパフォーマンスデータを収集します。

  2. パフォーマンスアナライザのグラフィカルツールである er_print コマンド行ユーティリティー、またはスレッドアナライザでデータを調べて、マルチスレッドアプリケーションでのデータの競合およびデッドロックを検出します。

コレクタでパフォーマンスデータを収集する

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

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

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

% collect [collect-options] executable executable-options

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

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

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

% collect synprog
Creating experiment database test.1.er ...
00:00:00.000  ===== (15909) synprog run
00:00:00.002  ===== (15909) Thu  10 Nov 11  15:12:18 Stopwatch calibration
  OS release 5.10 -- enabling microstate accounting 5.10.
        0.001498 s.  (32.8 % of 0.004568 s.) -- inner
        N = 1000, avg = 1.498 us., min = 0.721, max = 596.665
        0.003482 s.  (72.9 % of 0.004776 s.) -- outer
        N = 1000, avg = 3.482 us., min = 2.883, max = 599.007
00:00:00.007  ===== (15909)  Begin commandline
        icpu.md.cpu.rec.recd.dousl.gpf.fitos.uf.ec.tco.b.nap.sig.sys.so.sx.so
00:00:00.008  ===== (15909) start of icputime
    3.019055 wall-secs.,   2.328491 CPU-secs., in icputime
00:00:03.027  ===== (15909) start of muldiv
    3.012635 wall-secs.,   2.675769 CPU-secs., in muldiv
00:00:06.040  ===== (15909) start of cputime
    3.000567 wall-secs.,   2.591964 CPU-secs., in cputime
00:00:09.041  ===== (15909) start of recurse
...
(output edited to conserve space)
...

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

コレクタの使用方法については、パフォーマンスアナライザの「ヘルプ」メニュー、『Oracle Solaris Studio 12.3: パフォーマンスアナライザ』マニュアル、および collect(1) のマニュアルページを参照してください。

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

パフォーマンスアナライザは、コレクタによって記録されたデータのメトリックを表示するグラフィカルユーザーインタフェース (GUI) です。メトリックは次のとおりです。

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

% analyzer [experiment-list]

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

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

% analyzer test.1.er

次の図は、synprog の例で行われた test.1.er 実験についての、パフォーマンスアナライザの「関数」タブを示しています。「関数」タブには、synprog プログラムの各関数によって使用される CPU 時間が表示されます。関数 gpf_work をクリックすると、 gpf_work 関数のリソース使用状況の詳細が左側の「概要」タブに表示されます。

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

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

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 User CPU Time

Excl.     Incl.      Name
User CPU  User CPU
  sec.      sec.
57.290    57.290     <Total>
 8.116     8.116     gpf_work
 7.305     7.305     real_recurse
 4.413     4.413     bounce_a
 3.502     3.502     my_irand
 3.082     3.082     muldiv
 3.032     3.032     cputime
 3.022     3.022     icputime
 3.012     3.012     sigtime_handler
 3.002     3.002     underflow
 2.242     2.242     dousleep
 2.242     2.242     inc_middle
 1.661     1.661     gethrtime
 1.511     1.511     inc_entry
 1.511     1.511     inc_exit
 1.121     1.121     tailcall_c
 1.101     3.322     tailcall_a
 1.101     2.222     tailcall_b
 0.781     0.781     gettimeofday
 0.781     0.781     inc_func
 0.771     0.771     gethrvtime
 0.761     3.973     systime
 0.751     0.751     inc_body
 0.751     0.751     inc_brace
 0.490     0.490     ext_macro_code
.
.lines deleted

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

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

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

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

スレッドアナライザは、マルチスレッドプログラム内で 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 Solaris Studio 12.3: スレッドアナライザユーザーズガイド』を参照してください。

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

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

SPOT は Oracle Solaris 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:Simple Performance Optimization Tool (SPOT) User’s Guide』を参照してください。

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

DLight は、Oracle Solaris 動的トレース (DTrace) テクノロジを使用して、実行中のプログラムの動作を監視する対話型のグラフィカルツールです。DLight は複数のプロファイリングツールを同時に起動するため、複数のソースから得た実行中のアプリケーションに関するデータを同期して解析できます。DLight のプロファイリングツールは、アプリケーションにおける実行時の問題の根本原因を特定するために役立ちます。これらのツールは影響が小さいため、プログラムまたはシステムに悪影響を及ぼすことなくプロファイリングを実行できます。

DLight のプロファイリングツールには、DTrace 機能へのユーザーアクセスを制御する権限が必要です。そのため DLight は、管理者権限を持っているか、管理者による dtrace_user dtrace_proc、および dtrace_kernel 権限の付与を受けることができるシステムで実行する必要があります。

DLight を起動するには:

% dlight

監視するターゲットアプリケーションと、DLight で実行するプロファイリングツールを選択します。ターゲットアプリケーションは、ローカルシステムで、またはログインアクセス権と DTrace 権限のある、ネットワークに接続されたリモートシステムで実行できます。

DLight は、まだ実行されていない実行可能ファイルに対して実行することも、実行中のプロセスに接続することもできます。また、プロセスと、そのプロセスによって起動された子プロセスを含むプロセスツリーに DLight を接続することもできます。DLight は、ターゲットプログラムの実行中に収集したデータをグラフィカルに表示します。

DLight には次のプロファイリングツールが含まれます。

各ツールには、より詳細な情報を表示する関連ツールを開くためのボタンがあります。

次の図は、Oracle Solaris Studio 12.3: DLight チュートリアルで使用されている ProfilingDemo サンプルアプリケーションに対して実行されている DLight のプロファイリングツールを示しています。

image:C/C++/Fortran プロファイリングツールが表示されている DLight ウィンドウ

この図では、ユーザーが「スレッドマイクロステート」ツールの「スレッドの詳細」ボタンをクリックしたあと、DLight ウィンドウの左上に「スレッドの詳細」ウィンドウが開いています。右下に表示されている「スレッド同期の詳細」ウィンドウは、ユーザーが「スレッド使用」ツールの「同期の問題」ボタンをクリックすると開きます。

プロセスツリーターゲットに対して DLight を実行すると、次のツールが表示されます。

次の図は、プロセスツリーターゲットに対して実行されている DLight を示しています。

image:プロセスツリーのプロファイリングツールが表示されている DLight ウィンドウ

この図では、ユーザーが「プロファイルされたプロセスのスレッドマイクロステート」ツールの鍵のアイコンをクリックして開いた「プロセスツリーブロック済スレッドの詳細」ウィンドウが下部に表示されています。このウィンドウの右側では、選択したスレッドのロックが発生した呼び出しスタックを見ることができます。

「プロセスツリーのプロファイリング」グラフを併せて使用すると、アプリケーションの複数のプロセスおよび複数のスレッドがどのように連携しているかを判断できます。スレッドがブロックされている箇所と CPU 使用率への影響を調べ、それらが発生しているコード行まで問題を絞り込むことができます。

DLight の使用方法については、Oracle Solaris Studio 12.3: DLight チュートリアルおよび「ヘルプ」メニューから利用できる DLight の統合ヘルプを参照してください。

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

IDE は、IDE 内からプロジェクトのパフォーマンスを調べることができる、DLight と同じプロファイリングツールの多くを備えています。これらのツールは、C、C++、または Fortran プロジェクトを実行するたびに自動的に実行されます。これらのツールは影響が小さいため、プログラムまたはシステムに悪影響を及ぼすことなくプロファイリングを実行できます。

データはグラフィカルに表示されるため、プログラムのリソース使用状況の概要を容易に確認できます。プロジェクトを実行すると、「実行監視」ウィンドウが自動的に開き、影響の小さいツールの出力が表示されます。必要に応じて、プロファイリングツールを無効にしたり、自動的に実行するツールを指定したりできます。

デフォルトのプロファイリングツールは、基礎となるテクノロジとして DTrace を使用しません。その代わりに、Studio のユーティリティーとオペレーティングシステムのユーティリティーを使用してデータを収集します。この方法により、ツールが Oracle Solaris と Linux のどちらで実行されていても、すべてのユーザーがそれらのツールを使用できます。ただし、Oracle Solaris 上で IDE を実行している場合は、DTrace を使用するツールを選択すると、はるかに詳細な情報を得ることができます。

DLight の場合と同様、DTrace を使用する IDE ツールでは、DTrace 機能へのユーザーのアクセスを制御する権限が必要です。その権限を割り当てる方法については、IDE ヘルプの「C/C++/Fortran アプリケーションのプロファイルのための DTrace の有効化」の手順を参照してください。

次の図は、デフォルトの「実行監視」ツールが表示されている IDE を示しています。

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

より詳細なプロファイリングのための追加ツールは、システムおよびアプリケーションへのパフォーマンス上の影響が大きいため、それらのツールは自動的には実行されません。高度なツールは自動プロファイリングツールにリンクされていて、ボタンのクリックによって簡単に起動できます。

IDE には、DLight では使用できない 2 つの追加ツールが用意されています。「データの競合とデッドロックの検出」ツールと「メモリーアクセスエラー」ツールです。

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

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

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

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

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

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

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

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