Sun WorkShop 入門

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

この章では、標本コレクタと標本アナライザを使用して、Sun WorkShop のアプリケーションのパフォーマンスをチューニングする方法について説明します。各ツールの詳細については、『プログラムのパフォーマンス解析』と Sun WorkShop のオンラインヘルプを参照してください。

この章は、次の各節から構成されています。

Sun WorkShop でのパフォーマンスのプロファイル

標本コレクタは WorkShop の「デバッグ」ウィンドウから使用することができ、アプリケーションの実行中にパフォーマンスデータを収集し、そのデータを実験ファイルとして格納します。標本アナライザは Sun WorkShop のメインウィンドウから使用できる独立したツールで、収集したパフォーマンスデータを表示します。ページングが障害になっている場合は、メモリー内で関数を再割り当てするようにリンカーに指示するファイルを作成することができます。

UNIX の prof および gprof のパフォーマンスプロファイルツールが作成できる情報は、ユーザーの CPU 時間情報だけです。標本コレクタと標本アナライザを使用すると、ユーザーの CPU 時間情報だけでなく、入出力時間、システム時間、テキストおよびデータのページフォルト時間、プログラムサイズ、実行統計に関する情報も得ることができます。

図 6-1 では、Sun WorkShop の基本的なパフォーマンスチューニングのアーキテクチャについて説明します。

図 6-1 パフォーマンスチューニングのアーキテクチャ

Graphic

標本コレクタは、アプリケーションからパフォーマンスデータを収集し、そのデータを実験結果に書き込みます。標本アナライザでは、オンラインでテストデータを表示し、ファイルまたはプリンタに出力することができます。また、リンカー用のマップファイルを作成して、アプリケーションを再コンパイルすることもできます。

次の表に、パフォーマンスデータの収集と解析の基本的な手順を示します。各手順についての詳細は、『プログラムのパフォーマンス解析』、Sun WorkShop のオンラインヘルプの「パフォーマンスデータの解析」と「パフォーマンスデータの収集」を参照してください。

アプリケーションの構築

パフォーマンスデータを収集する前に、アプリケーションを構築する必要があります。構築の詳細については、第 4 章「Sun WorkShop でのプログラムの構築」とオンラインヘルプを参照してください。

パフォーマンスデータの収集

標本コレクタは、「デバッグ」ウィンドウを使って実行されるプログラムに関するパフォーマンスデータを収集します。収集した実験ファイルの結果を表示するには、「アナライザ」ウィンドウを使用する必要があります。「アナライザ」ウィンドウは WorkShop メインウィンドウから表示するか、標本コレクタで「コレクタ」⇒「解析」を選択して表示することができます。

標本コレクタで実験ファイルを作成する場合は、実験ファイルと同じディレクトリ内に隠しディレクトリも作成されます。隠しディレクトリ名の先頭にはドット (.) が付きます。たとえば、実験ファイルが test.1.er という名前だとすると、隠しディレクトリは、.test.1.er となります。このディレクトリ内のファイルには、セグメント、モジュール、行、関数の情報が含まれます。


注 -

「ワークセット」ウィンドウの「アナライザ」リストフィールド (「セクション」リストから選択) には、現在のワークセットに関連する実験ファイルが一覧表示されます。「実験を追加」ボタンと「実験を削除」ボタンを使用して、実験ファイルを追加・削除することができます。


収集できるデータの種類

収集するデータの種類を選択する方法については、『プログラムのパフォーマンス解析』と、Sun WorkShop のオンラインヘルプの「収集するデータの種類選択」を参照してください。

標本収集の頻度

標本とは、アプリケーションの実行中、一定期間内に収集されたデータの集合のことです。

「プロファイルデータ収集」データスライダを移動して、標本収集の頻度を秒単位で指定することができます。1 秒間に収集する標本数が増えると、データの正確性は向上しますが、収集のオーバーヘッドは大きくなります。

データの収集

パフォーマンスデータを収集するには、次の手順に従ってください。

  1. 「デバッグ」ウィンドウで、実行時検査をオフにし、「ウィンドウ」⇒「標本コレクタ」を選択して標本コレクタを開きます。

  2. 「実験ファイル」テキストフィールドに、作成する実験ファイルの絶対パス名を入力します。

  3. 「データ収集」ラジオボタンで、1 回の実行のデータを収集するのか、すべての実行のデータを収集するのかを選択します。

    1 回の実行のみのデータを収集する場合は、実験ファイルが作成されると、標本コレクタの動作は終了します。すべての実行のデータを収集する場合は、実験ファイルが作成された後も、標本コレクタの動作は終了しません。

  4. プログラムを「デバッグ」ウィンドウに読み込み、「開始」または「継続」ボタンをクリックして実行します。

パフォーマンスデータの解析

標本コレクタで収集したパフォーマンスデータを表示できるのは、標本アナライザだけです。標本アナライザは、Sun WorkShop のメインウィンドウから呼び出せる独立したツールです。このツールは、「標本コレクタ」ウィンドウで「コレクタ」⇒「解析」を選択しても、同じように呼び出すことができます。

標本コレクタで収集できる 3 種類のデータは、9 種類のデータに分けて解析することができます。これら 9 種類の解析可能なデータには、アナライザ表示オプションをそれぞれ 1 〜 2 個指定することができます。

表示、解析可能なデータの種類

「アナライザ」ウィンドウの「データ」リストから以下の種類のデータを選択して、解析することができます。

データの種類を選択する方法については、WorkShop オンラインヘルプの「データの種類の選択」を参照してください。

表示オプション

標本アナライザは、次の 5 種類の方法で収集されたパフォーマンスデータを表示します。

呼び出された関数、ファイル、セグメントに使われた時間も含まれます。

表示オプションを選択する方法については、Sun WorkShop オンラインヘルプの「データの種類の選択」を参照してください。

標本の比較

「アナライザ」ウィンドウで 「表示」⇒「新規ウィンドウ」を選択すると、新しい「アナライザ」ウィンドウが開いて、2 つの標本を比較したり、同じ標本を異なる方法で表示したりすることができます。

プログラム関数の並べ替え

テキストのページフォルトによって、アプリケーションの時間が大量に使われている場合は、アナライザによってプログラム関数が並べ替えられ、関数の順序が変更されたマップファイルが生成されます。最も使用頻度の高い関数がグループにまとめられて同じページセットに配置されるので、呼び出された関数は、すでにメモリー上にある確率が高くなります。

-M オプションではマップファイルがリンカーに渡され、アプリケーションと再リンクし、小さなテキストアドレス空間で実行可能なアプリケーションを新規に生成できます。

アプリケーションを並べ替えた後、新しい実験ファイルを実行して並べ替えの前と後のバージョンを比較することができます。

アプリケーションを並べ替えるには、次の手順に従ってください。

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

    並べ替えには、-xF オプションが必要です。このオプションを指定すると、コンパイラによって、独立して再配置可能な関数が生成されます。

    C アプリケーションの場合、次のように指定します。


    cc -g -xF -c a.c b.c
    cc -o application_name a.o b.o

    C++ アプリケーションの場合、次のように指定します。


    CC -g -xF -c a.cc b.cc
    CC -o application_name a.o b.o

    Fortran アプリケーションの場合、次のように指定します。


    f77 -g -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. Sun WorkShop でアプリケーションを実行します。

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

  6. 「実験ファイル」⇒「マップファイル作成」を選択して、標本アナライザ内に並べ替えたマップを作成します。使用する標本、マップファイルのディレクトリ、マップファイルの名前をファイル選択ボックスに入力して、「了解」をクリックします。

    マップファイルには、関数の名前と、その関数に対応するユーザー CPU 時間が示されます。プロファイルデータと関数のサイズを降順にソートすることで、テキストアドレス空間のサイズを小さくする関数の順序が指定されます。マップファイル中に記述されていない関数はすべて、マップファイル中の関数の後に配置されます。

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

    C アプリケーションの場合、次のように指定します。


    cc -Wl -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_namea.o b.o

出力

現在表示されている要約されていないテキストか、実験データのテキスト形式の要約 (データの種類ごとの平均標本収集時間と関数、モジュール、セグメントの使用頻度に関する情報など) を出力するには、「アナライザ」ウィンドウで「実験ファイル」⇒「印刷」、または「実験ファイル」⇒「要約を印刷」を選択し、ダイアログに適切な情報を入力してください。

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

収集した実験データをファイルにエクスポートして、別のプログラム (スプレッドシートや独自のアプリケーションなど) で使用することができます。

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

  1. エクスポートする実験ファイルのディレクトリを「ディレクトリ」テキストボックスに入力し、ファイル名を「ファイル」テキストボックスに入力します。

  2. 「実験ファイル」⇒「エクスポート」を選択します。

  3. 「了解」をクリックして、指定した名前で実験データを保存します。