ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris Studio 12.3 の概要 Oracle Solaris Studio 12.3 Information Library (日本語) |
Oracle Solaris Studio 12.3 の概要
Oracle Solaris Studio ソフトウェアの概要
Oracle Solaris Studio での開発者ワークフロー
Oracle Solaris Studio ソフトウェアはアプリケーションの動作を調べるために使用できるいくつかのツールを備えているため、アプリケーションのパフォーマンスを調整できます。
パフォーマンスツールには次のものが含まれています。
パフォーマンスアナライザおよび関連ツール。問題がパフォーマンスに影響を及ぼすコード内の位置を識別するために役立つ、高度なパフォーマンスツールおよびユーティリティーのセットです。
簡易パフォーマンス最適化ツール (SPOT)。パフォーマンスアナライザツールと連携し、それらのツールによって収集されたデータをレポートする Web ページを生成します。
DLight のプロファイリングツール。複数のソースから得た実行中のアプリケーションに関するデータを同期して解析できる、同時に実行されるグラフィカルツールのセットです。
IDE のプロファイリングツール。IDE 内からプロジェクトのパフォーマンスを調べることができる、DLight のものと同様のプロファイリングツールです。
Oracle Solaris Studio ソフトウェアには、相互に連携する一連の高度なパフォーマンスツールおよびユーティリティーが備わっています。コレクタ、パフォーマンスアナライザ、スレッドアナライザ、および er_print ユーティリティーは、コードのパフォーマンスを評価し、潜在的なパフォーマンスの問題を識別し、問題が発生するコードの部分を特定するために役立ちます。これらのツールをまとめてパフォーマンスアナライザツールといいます。
Oracle Solaris Studio の C、C++、および Fortran コンパイラのオプションを使用して、ハードウェアと、プログラムのパフォーマンスを向上させる高度な最適化テクニックをターゲットにすることができます。パフォーマンスアナライザツールは、Oracle Sun ハードウェア上でコンパイラとともに使用できるようにも設計されていて、Oracle Sun マシン上で実行する場合のプログラムのパフォーマンスを向上させるのに役立ちます。
パフォーマンスアナライザツールでは、DLight のプロファイリングツールに比べ、収集されるデータをより精密に制御し、データをより深く検査し、プログラムとハードウェアの相互の関連性を調べることができます。パフォーマンスアナライザツールは、現在の Oracle Sun ハードウェアで実行されている、複雑なコンピュート・インテンシブ・アプリケーション向けに設計されており、それらのアプリケーションでテスト済みです。
パフォーマンスアナライザツールは、OpenMP 並列アプリケーションおよび MPI ベースの分散アプリケーションのプロファイリング機能も備えているため、それらのテクノロジをアプリケーションで効果的に使用しているかどうかを判別できます。
パフォーマンスアナライザツールを使用するには、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) です。メトリックは次のとおりです。
プログラムがいくつかのカテゴリで時間を費やした箇所を示す時間プロファイルメトリック。
プログラムで発生する CPU 固有のイベントに関する情報を示す、ハードウェアカウンタメトリック。
マルチスレッドプログラムのさまざまなスレッドによって実行されるタスクの同期での遅延を示す、同期遅延メトリック。
プログラムでのメモリーリークを示す、メモリー割り当てメトリック。
MPI 呼び出しにより MPI プログラムにパフォーマンスの問題が発生する箇所の識別に役立つ MPI トレースメトリック。
パフォーマンスアナライザは 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 関数のリソース使用状況の詳細が左側の「概要」タブに表示されます。
パフォーマンスアナライザの使用方法については、『Oracle Solaris Studio 12.3: パフォーマンスアナライザ』マニュアル、パフォーマンスアナライザの統合ヘルプ、および analyzer(1) のマニュアルページを参照してください。
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 つの一般的なスレッドの問題を検出します。
1 つのプロセス内の 2 つのスレッドが、排他ロックを保持せずに共有メモリーの同じ場所に同時にアクセスし、それらのアクセスの少なくとも 1 つが書き込みである場合に発生するデータの競合。
2 つ以上のスレッドが互いのタスクの完了まで待機しているためにブロックされている場合に発生するデッドロック。
スレッドアナライザはマルチスレッドプログラムの分析向けに簡素化されていて、パフォーマンスアナライザの「競合」、「デッドロック」、「デュアルソース」、「競合の詳細」、「デッドロックの詳細」の各タブのみが表示されます。OpenMP プログラムについては、「OpenMP 並列領域」タブと「OpenMP タスク」タブも表示されます。
ソースコードまたはバイナリコードでのデータの競合も検出できます。どちらの場合も、コードに計測機構を組み込んで、必要なデータを収集できるようにする必要があります。
スレッドアナライザを使用するには:
データの競合を解析するため、コードに計測機構を組み込みます。ソースコードの場合は、コンパイル時に -xinstrument=datarace コンパイラオプションを使用します。バイナリコードの場合は、discover -i datarace コマンドを使用して、計測機構が組み込まれたバイナリを作成します。
デッドロックの検出には、計測機構は不要です。
データ競合データを収集するための -r race オプション、デッドロックデータを収集するための -r deadlock オプション、または両方の種類のデータを収集するための -r all オプションを付けた collect コマンドを使用して、実行可能ファイルを実行します。
tha コマンドでスレッドアナライザを起動するか、er_print コマンドを使用して結果の実験を表示します。
次の図は、OpenMP プログラムで検出されたデータの競合と、データの競合をもたらす呼び出しスタックが表示されている「スレッドアナライザ」ウィンドウを示しています。
スレッドアナライザの使用方法については、tha(1) のマニュアルページおよび『Oracle Solaris Studio 12.3: スレッドアナライザユーザーズガイド』を参照してください。
簡易パフォーマンス最適化ツール (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 実行レポートの一部を示しています。このレポートには、詳細情報を含むほかのページへのリンクがあります。
SPOT レポートの Web ページは、コンパイルされたすべてのデータを容易に調べられるように、相互にリンクされています。
詳細は、『Oracle Solaris Studio 12.2:Simple Performance Optimization Tool (SPOT) User’s Guide』を参照してください。
DLight は、Oracle Solaris 動的トレース (DTrace) テクノロジを使用して、実行中のプログラムの動作を監視する対話型のグラフィカルツールです。DLight は複数のプロファイリングツールを同時に起動するため、複数のソースから得た実行中のアプリケーションに関するデータを同期して解析できます。DLight のプロファイリングツールは、アプリケーションにおける実行時の問題の根本原因を特定するために役立ちます。これらのツールは影響が小さいため、プログラムまたはシステムに悪影響を及ぼすことなくプロファイリングを実行できます。
DLight のプロファイリングツールには、DTrace 機能へのユーザーアクセスを制御する権限が必要です。そのため DLight は、管理者権限を持っているか、管理者による dtrace_user、 dtrace_proc、および dtrace_kernel 権限の付与を受けることができるシステムで実行する必要があります。
DLight を起動するには:
% dlight
監視するターゲットアプリケーションと、DLight で実行するプロファイリングツールを選択します。ターゲットアプリケーションは、ローカルシステムで、またはログインアクセス権と DTrace 権限のある、ネットワークに接続されたリモートシステムで実行できます。
DLight は、まだ実行されていない実行可能ファイルに対して実行することも、実行中のプロセスに接続することもできます。また、プロセスと、そのプロセスによって起動された子プロセスを含むプロセスツリーに DLight を接続することもできます。DLight は、ターゲットプログラムの実行中に収集したデータをグラフィカルに表示します。
DLight には次のプロファイリングツールが含まれます。
スレッドマイクロステート – 実行しているプログラムで動作中のスレッドの状態に関する概要データを表示します。
CPU 使用 – プログラムによって実行中に使用される CPU 時間のパーセンテージを表示します。CPU 時間はユーザー CPU 時間とシステム CPU 時間に分けられます。
メモリー使用 – 時間の経過に伴うプログラムのメモリーヒープの変化を示します。
スレッド使用 – プログラム内で動作しているスレッドの数と、スレッドがどの時点で待機しているかを表示します。
I/O 使用法 – プログラムによって読み込まれたバイト数と書き込まれたバイト数を表示します。
各ツールには、より詳細な情報を表示する関連ツールを開くためのボタンがあります。
スレッドの詳細 – 「スレッドマイクロステート」グラフの「スレッドの詳細」ボタンをクリックします
関数あたりの CPU 時間 – 「CPU 使用」グラフの「ホットスポット」ボタンをクリックします
メモリーリーク – 「メモリー使用」グラフの「メモリーリーク」ボタンをクリックします
スレッド同期の詳細 – 「スレッド使用」グラフの「同期の問題」ボタンをクリックします
I/O 詳細 – 「I/O 使用法」グラフの「I/O 詳細」ボタンをクリックします
次の図は、Oracle Solaris Studio 12.3: DLight チュートリアルで使用されている ProfilingDemo サンプルアプリケーションに対して実行されている DLight のプロファイリングツールを示しています。
この図では、ユーザーが「スレッドマイクロステート」ツールの「スレッドの詳細」ボタンをクリックしたあと、DLight ウィンドウの左上に「スレッドの詳細」ウィンドウが開いています。右下に表示されている「スレッド同期の詳細」ウィンドウは、ユーザーが「スレッド使用」ツールの「同期の問題」ボタンをクリックすると開きます。
プロセスツリーターゲットに対して DLight を実行すると、次のツールが表示されます。
プロファイルされたプロセスのスレッドマイクロステート – DLight がプロセスツリーターゲットでプロファイルした全プロセスのすべてのスレッドのマイクロステートをまとめて表示します。このグラフのボタンでは、次の詳細情報のウィンドウが開きます。
プロセスツリーマイクロステートの詳細 - ターゲットプロセスとその子プロセスの各スレッドについて、マイクロステートの遷移をタイムライン形式で表示します。このツールを開くには、「プロファイルされたプロセスのスレッドマイクロステート」ツールでボタンをクリックします。
プロセスツリーブロック済スレッドの詳細 - プロセスとその子のロック統計を表示します。このツールを開くには、「プロファイルされたプロセスのスレッドマイクロステート」ツールでボタンをクリックします。
プロファイル作成プロセスの CPU 使用状況 - すべてのターゲットプロセスのすべてのスレッドについて、それらのプロセスが実行されているすべての CPU でプロファイルされた CPU 使用率をまとめて表示します。
プロセスツリーの「CPU ホットスポット」 - プログラム内の関数とともに、関数自体とその関数が呼び出す関数によって使用される CPU 時間を表示することで、プログラムのプロセスツリー内で CPU の負荷が大きい領域を示します。このツールを開くには、「プロファイル作成プロセスの CPU 使用状況」ツールでボタンをクリックします。
次の図は、プロセスツリーターゲットに対して実行されている DLight を示しています。
この図では、ユーザーが「プロファイルされたプロセスのスレッドマイクロステート」ツールの鍵のアイコンをクリックして開いた「プロセスツリーブロック済スレッドの詳細」ウィンドウが下部に表示されています。このウィンドウの右側では、選択したスレッドのロックが発生した呼び出しスタックを見ることができます。
「プロセスツリーのプロファイリング」グラフを併せて使用すると、アプリケーションの複数のプロセスおよび複数のスレッドがどのように連携しているかを判断できます。スレッドがブロックされている箇所と CPU 使用率への影響を調べ、それらが発生しているコード行まで問題を絞り込むことができます。
DLight の使用方法については、Oracle Solaris Studio 12.3: DLight チュートリアルおよび「ヘルプ」メニューから利用できる DLight の統合ヘルプを参照してください。
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 を示しています。
より詳細なプロファイリングのための追加ツールは、システムおよびアプリケーションへのパフォーマンス上の影響が大きいため、それらのツールは自動的には実行されません。高度なツールは自動プロファイリングツールにリンクされていて、ボタンのクリックによって簡単に起動できます。
IDE には、DLight では使用できない 2 つの追加ツールが用意されています。「データの競合とデッドロックの検出」ツールと「メモリーアクセスエラー」ツールです。
「データの競合とデッドロックの検出」ツールで使用されている基礎となるテクノロジは、このマニュアルで説明するスレッドアナライザと同じです。このツールは、スレッド化されたプログラムに計測機構を組み込んだあと、そのプログラムを実行中に解析して、スレッド間での実際のデータ競合およびデッドロックと潜在的なデータ競合およびデッドロックを検出します。このツールを起動するには、「プロジェクトをプロファイル」ボタンクリックし、「データの競合やデッドロック」を選択し、データ収集のオプションを指定して、「開始」をクリックします。
次の図は、データの競合を検出したあとの「データの競合とデッドロックの検出」ツールを示しています。
「データの競合の検出」ウィンドウの「詳細」リンクをクリックすると、「スレッドの詳細」ウィンドウが開き、データの競合の発生箇所が表示されます。「スレッドの詳細」ウィンドウでスレッドをダブルクリックして、問題が発生するソースファイルを開き、影響を受けるコード行に移動できます。
「メモリーアクセスエラー」ツールで使用される基礎となるテクノロジは、前述の Discover と同じです。このツールは、プログラムに計測機構を組み込んでから、プログラムを実行中に解析して、メモリーアクセスエラーおよびメモリーリークを検出します。このツールを起動するには、「プロジェクトをプロファイル」ボタンクリックし、「メモリーアクセスエラー」を選択し、データ収集のオプションを指定して、「開始」をクリックします。各種のメモリーアクセスエラーが「メモリー解析」ウィンドウに表示されます。エラーの種類をクリックすると、その種類のエラーが「メモリー解析ツール」ウィンドウに表示され、各エラーの呼び出しスタックを見ることができます。
次の図は、メモリーアクセスエラーを検出したあとの「メモリーアクセスエラー」ツールを示しています。
プロファイリングツールの使用方法については、F1 キーを押すか、IDE の「ヘルプ」メニューを使用してアクセスできる IDE の統合ヘルプを参照してください。ヘルプの「目次」タブで「C/C++/Fortran アプリケーションのプロファイル」、「データの競合とデッドロックの検出」、および「プロジェクト内のメモリーアクセスエラーの検出」を選択してください。