プログラムのパフォーマンス解析

標本アナライザについて

標本アナライザは、アプリケーションのパフォーマンスを測り、記録し、解析します。また、アプリケーションのアドレス空間へ関数をより効率的に読み込む順序を示し、改良されたアプリケーションの再構築を助けます。

図 2-3 標本アナライザのメインウィンドウ

Graphic

「実験ファイル」 メニュー 

実験データの読み込み、エクスポート、印刷、削除、およびマップファイルの作成を行なうためのコマンドを提供します。 

「表示」メニュー 

データの選択、ソート、検索、表示を行なうためのコマンドを提供します。 

「オプション」メニュー 

列の幅や棒グラフ名を変更するためのコマンドを提供します。 

「ヘルプ」メニュー 

オンラインヘルプを提供します。 

「データ」リストボックス 

解析対象となるパフォーマンスデータの種類を指定します。 

「表示形式」リストボックス 

解析対象となるデータの表示方法を指定します。 

「単位」ラジオボタン 

表示枠に表示するユニットの種類を選択します。 

「平均」凡例 

実験標本中に含まれる、パフォーマンスの問題箇所に費やされる時間の平均パーセンテージを表示します。 

「標本」表示枠 

収集されたデータの解析結果を視覚的に表示します。 

「標本の範囲」テキストフィールド 

標本、標本収集範囲、表示されている標本の数、またはそのどれかが表示されます。このテキストボックスは編集可能です。 

「矢印」ボタン 

クリックするごとに標本番号が 1 ずつ増加または減少し、実験の位置が移動し、各標本のプログラムの動作を確認できます。 

「メッセージ」エリア 

現在の動作に関する情報が表示されます。 

標本アナライザは、標本コレクタによって書き出された実験レコードを検証し、それを画面上にグラフィカルに表示します。er_export ユーティリティは実験レコードのデータを ASCII フォーマットへ変換し、er_print ユーティリティは現在表示されているデータをファイルまたはプリンタに出力します。これら 2 つのユーティリティは、「実験ファイル」メニューの「エクスポート」および「印刷」コマンドから起動されます。コマンド行から実行されることは、通常はありません。

実験結果の読み込み

実験結果は標本アナライザのオープン時に読み込むことも、あるいは標本アナライザをオープンした後であらためて読み込むことも可能です。デフォルトでは、実験データは 「概要」 表示画面で表示されますが、データの内容に応じて、「ヒストグラム」、「累計」、「アドレス空間」、「統計」 表示画面に切り替えることも可能です。

標本アナライザのオープン時に実験データを読み込むには、「標本アナライザ」ウィンドウが開いた時点で現れる「実験ファイルの読み込み」ダイアログボックスで実験データファイル名をダブルクリックします。

あるいは、「名前」フィールドに実験ファイルの名前を入力して、「了解」ボタンをクリックします。

標本アナライザがすでにオープンしている状態で、実験結果を読み込むには、以下の手順に従ってください。

  1. 「実験ファイル」メニューの「読み込み」を選択します。

  2. 「名前」テキストフィールドに実験ファイルの名前を入力して「了解」ボタンをクリックするか、ファイルフィルタ上のエントリをダブルクリックします。

表示のためのデータの種類の選択

標本アナライザでは、収集したデータの表示方法をさまざまに切り替えられます。アプリケーションのパフォーマンス改良に役立つようなデータの種類を指定できます。

「データ」リストボックスを使って、以下の表に示すデータの種類の中から 1 つを選択してください。

表 2-1 標本アナライザによる表示が可能なデータの種類

プロセス時間 

処理状態の推移の集計 

ユーザー時間 

命令実行によってユーザープロセス状態に費やされる時間 

システム待ち時間 

処理がカーネルでスリープしている時間 (ただし、「中断」、「アイドル」、「ロック待ち」、 「テキストフォルト」、「データフォルト」状態は含まない)  

システム時間 

オペレーティングシステムがシステムコールの実行に費やす時間 

テキストページ・フォルト時間 

テキストページでのフォルティングに費やされる時間 

データページ・フォルト時間 

データページでのフォルティングに費やされる時間 

プログラムのサイズ 

アプリケーションの関数、モジュール、セグメントのサイズ(バイト)。「アドレス空間」データと組み合わせると、アプリケーションのサイズを確認し、必要なメモリ要件を確定できる 

アドレス空間 

テキストページおよびデータページの両方の参照動作。 「プログラムのサイズ」データと組み合わせると、アプリケーションのサイズを確認し、必要なメモリ要件を確定できる。 

実行統計 

アプリケーション実行に関する包括的な統計情報 

データの種類と表示形式

各種のデータは、その性質に合った表示画面でのみ表示できます。表 2-2 には、各データの種類と関連した表示形式を示します。

表 2-2 標本アナライザのデータの種類と対応する表示形式

データの種類 

表示形式 

プロセス時間 

概要 

ユーザー時間 

ヒストグラム、累計 

システム待ち時間 

ヒストグラム、累計 

システム時間 

ヒストグラム、累計 

テキストページ・フォルト時間 

ヒストグラム、累計 

データページ・フォルト時間 

ヒストグラム、累計 

プログラムのサイズ 

ヒストグラム 

アドレス空間 

アドレス空間 

実行統計 

統計 

表示形式の選択

標本アナライザは、実際のデータの性質に応じて、各データの種類により 1 つか 2 つの表示形式を選択し関連付けます。

「表示」リストボックスを使って、表 2-3 に示す表示形式から 1 つを選択してください。

表 2-3 データの種類に対する標本アナライザの表示形式

概要 

デフォルトの表示は、パフォーマンス動作のレベルの高い概要を提供する。  

ヒストグラム 

関数、ファイル、読み込みオブジェクトの実行に費やした時間の合計 

累計 

関数、ファイル、読み込みオブジェクトの実行に費やした時間の累積合計。呼び出し関数、ファイル、セグメントに費やされた時間も含む 

アドレス空間 

メモリの使用状況についての情報 

統計 

パフォーマンスおよびシステム資源の使用状況についての総合的なデータ 

「概要」表示画面

「概要」表示画面では、アプリケーションが異なる処理状態において費やす時間の合計を各標本ごとに表示します (図 2-4 を参照)。標本コレクタはデータ収集処理中つねにこのデータを収集するため、実験結果が標本アナライザに読み込まれる際には、デフォルトとして「概要」表示画面が表示されます。

「概要」表示形式の特徴を以下に示します。

図 2-4 「概要」表示画面

Graphic

「概要」表示画面には、セグメント分けされたバーからなる、番号の付けられた標本のカラムが表示されます。各カラムは、実験中に収集された個々の標本を表しています。

各カラム内のセグメントは、異なるパフォーマンス領域を表しています。そして、各セグメントの高さは、各パフォーマンス領域に費やされた時間に比例しています。

それぞれのパフォーマンス領域を示すカラムの凡例は、実験データのすべてのカラム、およびほかの実験においても同じです。

透明なセグメント (表示画面の前景色と同じ色のセグメント) は、パフォーマンス領域が小さすぎて、表示できないことを示しています。透明なセグメントにどのパフォーマンス領域が含まれているかを確認するには、そのセグメントのカラムをクリックし、「表示」メニューの「詳細表示」を選択すると、「標本の詳細」ダイアログボックスが表示されます(図 2-5 を参照)。

「標本の詳細」ダイアログボックス

「表示」メニューから「詳細表示」を選択すると、「標本の詳細」ダイアログボックスを表示できます。

図 2-5 「標本詳細」ダイアログボックス

Graphic

このダイアログボックスのフィールドには、選択された標本についての以下の情報が含まれます。

表 2-4 「標本の詳細」ダイアログボックスのフィールド

標本 

現在選択されている標本とそれらの実験におけるパーセンテージ 

開始時間 

標本採取の開始時刻 

終了時間 

標本採取の終了時刻 

経過時間 

標本採取の期間 

ユーザー 

アプリケーション命令実行に費やされた時間 

システム 

オペレーティングシステムがシステムコール実行に費やした時間 

トラップ 

トラップ (自動的な例外処理あるいはメモリのエラー) 実行に費やした時間 

テキストフォルト 

テキストページでのフォルティングに費やされる時間 

データフォルト 

データページでのフォルティングに費やされる時間 

I/O 

プログラム I/O に費やされる時間 

ロック待ち 

ライトウェイトプロセスロックが解放されるまでの待ち時間 

スリープ 

プログラムがスリープに費やす時間 (「テキストフォルト」、「データフォルト」、「システム待ち」、「ロック待ち」以外の理由による)  

中断 

サスペンドに費やされる時間 (ブレークポイントに到達した際に、デバッガで費やす時間も含む)  

アイドル 

アイドルに費やされる時間 

パラメータ 

各標本用に収集されるデータパラメータの一覧 (実験の開始前に、標本コレクタにおいて設定します)  

「ヒストグラム」表示画面

「ヒストグラム」表示画面は、アプリケーションが関数、ファイル、読み込みオブジェクトの実行にどれくらいの時間を費やしたかを表示します。(図 2-6 を参照)

「ヒストグラム」表示画面オプションは、以下のデータの種類に対して利用できます。

図 2-6 関数実行に費やす時間を示す「ヒストグラム」表示画面

Graphic

アプリケーションのパフォーマンスデータをコンパイル細分性のレベルごとに表示するには、以下の表に示すいずれかの単位を選択してください。

表 2-5 標本アナライザが使用する測定の表示単位

関数 

アプリケーションが関数実行に費やす時間 

ファイル 

ファイルレベル単位の実行に費やす時間。アプリケーションが多くの関数を持っている場合には、この表示方法は有用です。ひとつのソースファイルのすべてのデータが一緒に表示されます。 

注意 : 実行対象の一部 (共有ライブラリを含む) が -g オプションによってコンパイルされていない場合、関数とその関数を含むファイルとの関連情報が足りない場合もあります。 

ロードオブジェクト 

テキストセグメントの実行に費やす時間 

「ヒストグラム」表示画面に含める標本は、以下の 3 通りの方法で選択できます。

「ヒストグラム」表示画面に含めるセグメントを選択するには、「表示」メニューの 「ファイルから取り込むセグメント」コマンドを選択し、「ファイルから取り込むセグメント」ダイアログボックスを開きます。そして、任意のセグメントを選択し、「適用」ボタンをクリックするか、「すべてを選択」ボタンをクリックして全セグメントを選択します。

「ヒストグラム」 表示画面をソートするには、「表示」メニューの 「ソート基準」コマンドを選択し、「値」または「名前」を選択します。

特定の名前を検索するには、「表示」メニューの「検索」コマンドを選択し、「検索」ダイアログボックスを開きます。そして、検索文字列をテキストフィールドに入力し、「適用」ボタンをクリックします。

「累計」表示画面

「累計」表示画面には、関数、ファイル、ロードオブジェクトによって費やされる総実行時間 (呼び出された関数、ファイル、セグメントに費やされる時間も含みます) が表示されます(図 2-7 を参照)。下位クラスの関数において累積された実行時間は、すべて親関数へと帰します。

「累計」表示画面は以下のデータの種類に対して利用できます。

図 2-7 「累計」表示画面

Graphic

データをコンパイル細分性のレベルごとに表示するには、以下の表に示すいずれかの単位を選択してください。

表 2-6 標本アナライザが使用する測定の表示単位

関数 

アプリケーションが関数実行に費やす時間 

ファイル 

ファイルレベル単位の実行に費やす時間。アプリケーションが多くの関数を持っている場合には、この表示方法は有用です。ひとつのソースファイルのすべてのデータが一緒に表示されます。 注意 : 実行対象の一部 (共有ライブラリを含む) が -g オプションによってコンパイルされていない場合、関数とその関数を含むファイルとの関連情報が足りない場合もあります。

ロードオブジェクト 

テキストセグメントの実行に費やす時間 

「累計」表示画面に含める標本は、以下の 3 通りの方法で選択できます。

「累計」表示画面に含めるセグメントを選択するには、「表示」メニューの 「ファイルから取り込むセグメント」コマンドを選択し、「ファイルから取り込むセグメント」ダイアログボックスを開きます。そして、任意のセグメントを選択し、「適用」ボタンをクリックするか、「すべてを選択」ボタンをクリックして全セグメントを選択します。

「累計」 表示画面をソートするには、「表示」メニューの 「ソート基準」コマンドを選択し、「値」または「名前」を選択します。

特定の名前を検索するには、「表示」メニューの「検索」コマンドを選択し、「検索」ダイアログボックスを開きます。そして、検索文字列をテキストフィールドに入力し、「適用」ボタンをクリックします。

「アドレス空間」表示画面

「アドレス空間」表示画面によって、アプリケーションが最も集中的に利用するメモリ (修正および参照ページ) を示すことができます。また、実験がアプリケーションのすべての関数を試すわけではないため、あるいは、アプリケーションに無駄なコードやメモリ割り当ての問題などが含まれているなどの理由から、未使用となっているメモリも識別します。

「アドレス空間」表示画面形式は、アドレス空間データを収集する場合のみ、データを提示します。アドレス空間データが収集されていない場合、標本アナライザ画面の下部にその旨を告げるメッセージが表示されます。

メモリのカテゴリ

「アドレス空間」表示画面では、アプリケーションが使用するメモリを以下のカテゴリに分類しています。

表 2-7 標本アナライザが表示するメモリのカテゴリ

変更 

アプリケーションの実行中に書き込まれるページ。参照されることも、参照されないこともある。 

参照 

アプリケーションに読み取られるページあるいはアプリケーションによって実行される命令を含むページ 

参照なし 

アプリケーションによって変更も参照もされないページ 

「アドレス空間」表示画面のレイアウト

「アドレス空間」表示画面は、個々の正方形 (ページ) または長方形 (セグメント) からなる列と行とで構成されます。そして、列と行にはメモリ内のアドレスを示す番号が付けられています。空白部分は、アプリケーションが使用しないアドレス空間の領域を表しています。

図 2-8 「アドレス空間」表示画面

Graphic

SunOS は 4 K バイトあるいは 8 K バイトのページを使用します。ページのアドレスは 0x1000 (16 進数で表す 4 Kバイト) または 0x2000 (16 進数で表す 8 Kバイト) の倍数です。

システムのページサイズを確認するには、プロンプトから次のように入力してください。

% pagesize

この pagesize コマンドはページサイズをバイト単位で返します。

ページサイズが 4 Kバイトの場合、行当たりのページ数は 16 です。ページサイズが 8 K バイトの場合、行当たりのページ数は 8 です。

ページを含む行と列の 16 進数値を組み合わせることで、そのページのアドレスを知ることができます。たとえば、確認中のページが第 4 行 (0004__00) 、第 2 列 (20) にあるなら、そのページのアドレスは 00042000 となります。

「アドレス空間」表示画面において、メモリ単位を異なる細分性レベルで表示するには、「表示形式」領域で「ページ」または「セグメント」を選択します。

選択されたページおよびセグメントには影が付けられ、浮き出して表示されます。選択したページ上でマウスの左ボタンを押し続けると、そのページを含むセグメントも表示され、影が付けられます。同様に、選択したセグメント上でマウスの左ボタンを押し続けると、そのセグメント内に含まれるページが表示され、選択されます。

選択したページまたはセグメントのプロパティに関する情報を表示するには、「表示」メニューの「詳細表示」コマンドを選択し、以下の情報を含む「ページ属性」ダイアログボックスを開きます。

「アドレス空間」表示画面に含める標本は、以下の 3 通りの方法で選択できます。

「統計」表示画面

「統計」表示画面には、アプリケーションの全体的なパフォーマンスおよびシステム資源利用方法などのデータが表示されます (図 2-9 を参照) 。一方、「ヒストグラム」、「累計」、「アドレス空間」表示形式は、関数やページなどのプログラムコンポーネントごとに区分けされたデータを提示します。「統計」表示画面が提供する情報は、予想した見積りと実際の数値とを比較したい場合などに便利です。

図 2-9 プログラム実行についての「統計」表示画面

Graphic

「統計」表示画面の生成に必要な情報は、データの収集処理中、常時標本コレクタによって生成されるため、この表示画面に情報を表示するために、特別なデータの種類を指定する必要はありません。「統計」表示画面には、以下の情報が表示されます。

表 2-8 標本アナライザの「統計」表示画面に表示される情報

副ページフォルト数 

物理的な I/O 活動を必要としないページフォルトの数 

主ページフォルト数 

物理的な I/O 活動を必要とするページフォルトの数 (数が非ゼロの場合、「概要」表示画面には、テキストページあるいはデータページフォルトの待ち時間が表示されます) 

プロセススワップ数 

処理がメインメモリ外にスワップされる回数 

入力ブロック数 

非キャラクタあるいは特殊ファイル上でシステムコール read( ) が実行される回数 

出力ブロック数 

非キャラクタあるいは特殊ファイル上でシステムコール write( ) が実行される回数 

送信メッセージ数 

ソケットを越えて送信されるメッセージ数 

受信メッセージ数 

ソケットから受信されるメッセージ数 

処置されたシグナル数 

配信または受信されるシグナル数 

自発的コンテキストスイッチ数 

分配された時間が完了する前に、処理が自発的にプロセッサを放棄して、利用可能な資源を待つために起こるコンテキストスイッチの回数 

非自発的コンテキストスイッチ数 

優先順位がより高い処理が実行可能になるか、現在の処理が分配された時間を超過してしまったために起こるコンテキストスイッチの回数 

システムコール数 

システムコールの総数 

I/O 文字数 

読み取りおよび書き込みコールによって、キャラクタデバイスまたはファイル間で転送されるキャラクタ数 

ワーキングセット合計サイズ(ページ) 

アドレス空間の総サイズ (ページ単位)  

ワーキングセット最大サイズ(ページ/標本) 

アドレス空間の最大サイズ (標本あたりのページ数)  

ワーキングセット最小サイズ(ページ/標本) 

アドレス空間の最小サイズ (標本あたりのページ数)  

ワーキングセット平均サイズ(ページ/秒) 

アドレス空間の平均サイズ (標本あたりのページ数)  

テキストのワーキングセット合計サイズ(ページ) 

テキストアドレス空間の総サイズ (ページ単位)  

テキストのワーキングセット最大サイズ(ページ/標本) 

テキストアドレス空間の最大サイズ (標本あたりのページ数)  

テキストのワーキングセット最小サイズ(ページ/標本) 

テキストアドレス空間の最小サイズ (標本あたりのページ数)  

テキストのワーキングセット平均サイズ(ページ/秒) 

テキストアドレス空間の平均サイズ (標本あたりのページ数)  

非テキストのワーキングセット合計サイズ(ページ) 

非テキストアドレス空間の総サイズ (ページ単位)  

非テキストのワーキングセット最大サイズ(ページ/標本) 

非テキストアドレス空間の最大サイズ (標本あたりのページ数)  

非テキストのワーキングセット最小サイズ(ページ/標本) 

非テキストアドレス空間の最小サイズ (標本あたりのページ数)  

非テキストのワーキングセット平均サイズ(ページ/秒) 

非テキストアドレス空間の平均サイズ (標本あたりのページ数)  


注 -

アドレス空間データが収集されている場合のみ、ワークセットサイズは非ゼロになります。


「統計」表示画面に含める標本は、以下の 3 通りの方法で選択できます。

アプリケーションの再配置

テキストページフォルトが実行時間の大部分を占める場合は(その場合のみ)、アプリケーションの再配置をすることもできます。

動作データが収集された後、標本アナライザを使って、関数の並び順が改良されたマップファイルを生成できます。-M オプションはそのマップファイルをリンカーに渡し、リンカーはアプリケーションを再リンクし、より小さなテキストアドレス空間を持った新しい実行可能なアプリケーションを生成します。

アプリケーションの再配置を行った後は、新しい実験を実行し、オリジナルのバージョンと再配置後のバージョンとを比較できます。

アプリケーションの再配置を行うには、以下の手順に従ってください。

  1. アプリケーションを -xF オプションを使ってコンパイルします。

    -xF オプションは、再配置のために必要です。このオプションによって、コンパイラは、個別に再配置が可能な関数を生成します。

    C アプリケーションに対しては、以下のコマンドを入力してください。

    cc -xF -c a.c b.c

    cc -o application_name a.o b.o

    C++ アプリケーションに対しては、以下のコマンドを入力してください。

    CC -xF -c a.cc b.cc

    CC -o application_name a.o b.o

    Fortran アプリケーションに対しては、以下のコマンドを入力してください。

    f77 -xF -c a.f b.f

    f77 -o application_name a.o b.o

    以下の警告メッセージが表示される場合、非共有オブジェクトやライブラリファイルなど、静的にリンクされているファイルをチェックしてください。これらのファイルが -xF オプションによってコンパイルされていない可能性があります。

    ld: warning: mapfile: text: .text% function_name:

    object_file_name:

    Entrance criteria not met the named file, function_name, has not been compiled with the -xF option.

  2. デバッグのためにアプリケーションを Sun WorkShop へ読み込みます。

  3. 「デバッグ」ウィンドウの「ウィンドウ」メニューから「標本コレクタ」を選択して、標本コレクタをアクティブにし、パフォーマンスデータを収集します。 アドレス空間情報の収集も必ず可能にしておきます。

  4. アプリケーションをデバッガ内で実行します。

  5. 指定された実験データを標本アナライザへ読み込みます。

  6. 「実験ファイル」メニューから「マップファイル作成」を選択し、標本アナライザで再配置マップを作成します。使用する標本、マップファイルディレクトリ、生成するマップファイル名を指定し、「了解」をクリックします。

    マップファイルには、関連するユーザー CPU 時間を持った関数名が含まれます。プロファイリングデータとファンクションサイズを降順にソートすることで、テキストアドレス空間サイズを縮小するための関数の並び順を指定します。マップファイルにリストされないすべての関数は、リストされた関数の後ろに配置されます。

  7. 新しいマップファイルを使ってアプリケーションをリンクします。

    C アプリケーションに対しては、以下のコマンドを入力してください。

    cc -M mapfile_name a.o b.o

    C++ アプリケーションに対しては、以下のコマンドを入力してください。

    CC -M mapfile_name a.o b.o

    C アプリケーションに対しては、-M オプションの使用により、コンパイラが -M mapfile_name をリンカーに渡します。

    Fortran アプリケーションに対しては、以下のコマンドを入力してください。

    f77 -M mapfile_name a.o b.o

実行時実験標本の比較

標本アナライザでは、複数の表示画面に同時にデータを表示できるため、実験データの標本を比較することが可能です。複数の表示画面によって、以下の操作が可能となります。

複数の表示画面を表示するには、以下の手順に従ってください。

  1. 「表示」メニューの「新規ウィンドウ」を選択し、「アナライザ」ウィンドウをもう 1 つオープンします。

  2. 新しい「アナライザ」ウィンドウで、データの種類、表示形式、比較する標本を選択するか、ほかの実験データを読み込みます。

    新しいウィンドウは、すでにオープンしている 1 つ目の「アナライザ」ウィンドウの設定を継承しません。新しいウィンドウには、つねにデフォルトの設定が適用されます。また、オリジナルの「アナライザ」ウィンドウを閉じたり、終了したりすると、そのウィンドウからオープンしたすべてのウィンドウが閉じられます。

実験データの印刷

実験の記録を保存したければ、実験データをプリンタまたはファイルに出力できます。標本アナライザでは、以下の項目を印刷できます。

現在の表示画面のプレーンテキストバージョンを印刷するには、以下の手順に従ってください。

  1. 「実験ファイル」メニューの「印刷」を選択し、「印刷」ダイアログボックスを開きます。

  2. データをプリンタで印刷するか、ファイルに出力するかを選択し、必要ならば、プリンタ名、用紙サイズなどを指定します。

  3. 「印刷」をクリックします。

実験結果のプレーンテキスト要約を印刷するには、以下の手順に従ってください。

  1. 「実験ファイル」メニューの「要約を印刷」を選択します。

  2. 要約データをプリンタで印刷するか、ファイルに出力するかを選択し、必要ならば、プリンタ名、用紙サイズなどを指定します。

  3. 「印刷」をクリックします。

実験データのエクスポート

標本アナライザでは、実験データをほかのプログラムで利用できるように、ASCII ファイルへエクスポートできます。

実験データを ASCII ファイルにエクスポートするには、以下の手順に従ってください。

  1. 「実験ファイル」メニューの「エクスポート」を選択し、「実験ファイルのエクスポート」ダイアログボックスを開きます。

  2. エクスポートする実験データファイルのディレクトリと名前を指定します。

  3. 「了解」をクリックすると、指定された名前で実験データが保存されます。