高性能なアプリケーションを開発するには、コンパイラのさまざまな機能、最適化された関数のライブラリ、およびパフォーマンス解析のためのツールを組み合わせる必要があります。この『 パフォーマンスアナライザ』マニュアルでは、コードのパフォーマンス評価、潜在的なパフォーマンス上の問題の特定、および問題が発生するコード部分の特定に役立つツールについて説明します。
統合開発環境 (IDE) からのパフォーマンスアナライザの起動については、/installation_directory/docs/index.html のマニュアル索引からアクセスできるパフォーマンスアナライザの Readme を参照してください。Solaris プラットフォームでのデフォルトのインストールディレクトリは /opt/SUNWspro です。Linux プラットフォームでのデフォルトのインストールディレクトリは、/opt/sun/sunstudio12 です。Sun Studio 12 のコンパイラとツールが /opt ディレクトリにインストールされていない場合は、システム管理者に実際のパスをお尋ねください。
このマニュアルでは、コレクタとパフォーマンスアナライザについて説明します。これらは、アプリケーションのパフォーマンスデータを収集および解析するために使用する 1 組の Sun Studio のツールです。いずれのツールも、コマンド行とグラフィカルユーザーインタフェースのどちらからでも使用できます。
パフォーマンスチューニングはソフトウェア開発者の主要な仕事ではないかもしれませんが、コレクタとパフォーマンスアナライザは開発者向けの設計になっています。これらのツールは、一般的に使用されているプロファイリングツールの prof および gprof に比べて柔軟性が高く、詳細で正確な解析が可能になります。また、gprof に見られる時間の因果関係の判定の誤りもありません。
これらのツールは、次のような疑問の解決に役立ちます。
使用可能なリソースのうちのどのぐらいがプログラムによって消費されるのか。
どの関数またはロードオブジェクトが特に多くのリソースを消費するのか。
どのソース行と命令がリソースを消費するのか。
特定の地点に達するまでにプログラムはどのような実行過程を経ているのか。
関数またはロードオブジェクトはどのようなリソースを消費しているのか。
コレクタツールは、プロファイリングと呼ばれる統計方法を使用し、関数呼び出しをトレースすることによって、パフォーマンスデータを収集します。データの内容には、呼び出しスタック、マイクロステートアカウンティング情報、スレッド同期遅延データ、ハードウェアカウンタのオーバーフローデータ、Message Passing Interface (MPI) 関数呼び出しデータ、メモリー割り当てデータ、およびオペレーティングシステムとプロセスの概要情報が含まれています。コレクタは C、C++、および Fortran に関するプログラムのあらゆる種類のデータを収集できるとともに、JavaTM プログラミング言語で書かれたアプリケーションに関するプロファイルデータを収集できます。また、動的に生成される関数と派生プロセスに関するデータも収集できます。収集対象のデータについては第 2 章「パフォーマンスデータ」、コレクタの詳細については第 3 章「パフォーマンスデータの収集」を参照してください。コレクタは、パフォーマンスアナライザ GUI、IDE、dbx コマンド行ツール、および collect コマンドを使用して実行できます。
パフォーマンスアナライザツールは、ユーザーがパフォーマンスデータを評価できるように、コレクタによって記録されたデータを表示します。パフォーマンスアナライザはデータを処理し、プログラム、関数、ソース行、および命令のレベルでパフォーマンスに関するさまざまなメトリックを表示します。これらのメトリックは、次の 5 つのグループに分類されます。
時間プロファイルメトリック
ハードウェアカウンタメトリック
同期遅延メトリック
メモリー割り当てメトリック
MPI トレースメトリック
パフォーマンスアナライザは、raw データを時間の関数としてグラフィカル形式で表示することができます。また、プログラムのアドレス空間における関数の読み込み順序を変更するために「マップファイル」を作成することで、パフォーマンスを改善することもできます。
パフォーマンスアナライザの詳細は、第 4 章「パフォーマンスアナライザツール」および IDE またはパフォーマンスアナライザ GUI のオンラインヘルプを参照してください。
第 5 章「カーネルプロファイリング」では、Sun Studio パフォーマンスツールを使用し、SolarisTM オペレーティングシステム (Solaris OS) が負荷を実行中にカーネルのプロファインリングを行う方法について説明しています。
第 6 章「 er_print コマンド行パフォーマンス解析ツール」では、コレクタが収集したデータを解析する er_print コマンド行インタフェースの使用方法について説明しています。
第 7 章「パフォーマンスアナライザとそのデータの内容」では、パフォーマンスアナライザとそのデータ、たとえば、データ収集の機能、パフォーマンスメトリック、呼び出しスタックとプログラムの実行、注釈付きコードリストなどの理解に関する内容について説明しています。パフォーマンスデータではなくコンパイラのコメントが含まれている注釈付きソースコードリストと逆 アセンブリコードリストは、er_src ユーティリティーによって表示できます。詳細は第 9 章「実験の操作」を参照してください。
第 8 章「注釈付きソースと逆アセンブリデータについて」では、注釈付きソースと逆アセンブリについて説明し、パフォーマンスアナライザが表示する各種インデックス行とコンパイラのコメントを解説します。
第 9 章「実験の操作」では、実験をコピー、移動、削除、アーカイブ、およびエクスポートする方法を説明します。
er_print ユーティリティーは、「タイムライン」表示を除く、パフォーマンスアナライザによって提供されるすべての表示をプレーンテキストで提示します。
Sun Studio ソフトウェアには、tcov という名前の、追加のプロファイリングツールがあります。これは、プログラム内の各文の正確な実行回数情報を生成します。このツールの詳細については、tcov(1) のマニュアルページを参照してください。
次に、「パフォーマンスアナライザ」ウィンドウの簡単な概要を示します。次で説明するタブの機能および特徴の詳細は、第 4 章「パフォーマンスアナライザツール」とオンラインヘルプを参照してください。
「パフォーマンスアナライザ」ウィンドウは、複数のタブで構成されており、メニューバーとツールバーが付いていますパフォーマンスアナライザの起動時に表示されるタブには、各関数の排他的メトリックと包括的メトリックをまとめた、プログラムの関数の一覧が表示されます。この一覧の内容は、ロードオブジェクト、スレッド、軽量プロセス (LWP)、CPU、およびタイムスライスによりフィルタ処理できます。
関数を選択すると、その関数の呼び出し元と呼び出し先が別のタブに表示されます。このタブでは、呼び出しツリーをたどり、たとえば、メトリック値の大きい部分を探すことができます。
このほか、ソースコードと逆アセンブリコードの 2 つのタブがあります。ソースコードのタブには、行単位でパフォーマンスメトリック付きのソース行と、コンパイラのコメントがインタリーブされ、逆アセンブリコードのタブには、各命令のメトリック付きの逆アセンブリコードと、可能であればソースコードおよびコンパイラのコメントがインタリーブされます。
パフォーマンスデータは、時間の関数として別のタブに表示されます。
このほか、実験とロードオブジェクトの詳細、関数の概要情報、メモリーリーク、およびプロセスの統計を表示するタブもあります。
そのほかに、索引オブジェクト、メモリーオブジェクト、データオブジェクト、データレイアウト、行、および PC を表示するタブもあります。各タブの詳細については、「アナライザデータ表示」を参照してください。
また、スレッドアナライザのデータを記録した実験用に、データの競合とデッドロックのタブもあります。タブは、読み込んだ実験がそれらをサポートするデータを持つ場合にのみ表示されます。
スレッドアナライザの詳細については、『Sun Studio 12: Thread Analyzer User’s Guide』を参照してください。
パフォーマンスアナライザは、マウスの使用だけでなく、キーボードから操作することもできます。
Solaris OS は、2 つの標準 UNIX® プロファイルツール、prof と gprof を長い間提供しています。prof ユーティリティーは、プログラムが使用する CPU 時間の統計プロファイルと、各関数に制御が渡される正確な回数を生成します。gprof ユーティリティーは、各関数に制御が渡される正確な回数と、プログラムの呼び出しグラフ内で個々の呼び出し元と呼び出し先の間で制御が受け渡しされる回数とともに、プログラムが使用する CPU 時間の統計プロファイルを生成します。これらのツールは、単純なプログラムでは便利ですが、複雑なプログラムのチューニングには適切ではありません。 これらの標準ツールの詳細については、prof(1) および gprof(1) のマニュアルページを参照してください。