標本コレクタは以下の情報を収集します。
アプリケーションについての統計情報
呼び出し先の関数の回数を含む場合と含まない場合の実行プロファイルデータ
プログラムのメモリ使用法データ
標本コレクタは標本としてデータを取り出し、それぞれの標本は実行のある部分を表します。標本アナライザはそうした標本の任意の組み合わせに対するデータをグラフィカルに表示します。
統計情報はつねに収集され、これには 2 種類のデータが含まれます。最初のデータは、さまざまな状況においてプログラムが費やした時間の統計情報であり、標本アナライザの初期画面に表示されます。これには、ユーザー時間、システム時間、システム待ち時間、テキストページ・フォルト時間、データページ・フォルト時間が含まれます。
2 番目の統計データは、標本アナライザの「実行統計」画面に表示され、こちらには、ページフォルトおよび I/O 情報、コンテキストスイッチ、さまざなまページ常駐 (ワーキングセットおよびページング) 情報が含まれます。
実行プロファイルは、アプリケーション実行中に、関数、モジュール、セグメントによってどのくらいの時間が消費されるかを示します。標本アナライザでは、ヒストグラム (呼び出し先の関数の回数が標本に含まれない場合) もしくは累積ヒストグラム (呼び出し先の関数の回数が標本に含まれる場合) として表示されます。
実行プロファイルデータは、以下の疑問に答えてくれます。
アプリケーションは、さまざまな関数、オブジェクトモジュール、セグメントの実行にどれくらいの時間を費やすか。
どの関数、モジュール、セグメントが一番多く、あるいは一番少なく時間を消費しているか。
呼び出し先の関数の回数が標本に含まれる場合、その関数によるほかの関数の呼び出しにどれくらい時間が費やされるか。
アドレス空間データは、処理アドレス空間を一連のセグメントとして表示し、各セグメントにはページ数が含まれます。このデータによって、標本アナライザは各ページの状態、そのページは参照されるか、あるいは変更されるかを表示できます。プログラムのメモリの使用状況データは、標本アナライザの「アドレス空間」表示画面に表示されます。
アドレス空間データは、以下の疑問に対する答えを導くヒントとなります。
メモリの使用状況はどのように変化するか。
アプリケーションはページを効率的に使用しているか。
特定のオペレーション中にどのページがアクセスされるか。
データの収集を開始する前に、以下の項目を確認してください。
プログラムは必ず「WorkShop デバッグ」ウィンドウに読み込んでおく。
実行時検査はオフにしておく。
データを収集するには、以下の手順に従ってください。
「デバッグ」ウィンドウで「ウィンドウ」メニューの「標本コレクタ」コマンドを選択し、「標本コレクタ」ウィンドウを開きます (図 2-2 参照) 。
1 回の実行に対してのみデータを収集するか、すべての実行に対してデータを収集するかを指定します。
1 回の実行に対してのみ標本コレクタを実行する場合、実験データが作成された後に、標本コレクタは終了します。一方、すべての実行に対して標本コレクタを実行する場合は、実験データの作成後も標本コレクタは終了せず、再び実行をすれば、実験データが追加記録されます。
標本コレクタをオンにしても、データ収集は始まりません。プログラムを「デバッグ」ウィンドウ上で開始すると、パフォーマンスデータは収集されます。
「実験ファイル」 テキストフィールドに実験ファイルのフルパスを入力します。
標本コレクタは、デフォルトの実験名として test.1.er と名付けます。.1.er を接尾辞として使用する場合、標本コレクタは自動的に数字の部分を1ずつ増やします (つまり、test.1.er の次は test.2.er となります)。
収集するデータを選択します。
統計情報データは常に収集されますが、実行された関数についての情報は収集されません。ほとんどのユーザーは実行された関数についての情報を必要とするので、「実行プロファイル情報」チェックボックスを選択してください。また、「実行プロファイル情報」には、呼び出された関数に費やされる時間を含めるかどうかも指定できます。ほとんどのユーザーは呼び出された関数に費やされた時間を含めることを望む場合が多く、そのためには、「呼び出し先の関数を含む」ラジオボタンを選択してください。
アプリケーションによるメモリの使用方法に関する情報が必要な場合は、「アドレス空間情報」チェックボックスも選択してください。
データは標本として収集され、それぞれがプログラムの実行時標本となります。デフォルトでは、標本は周期的に収集されます。「現行の標本収集を終了して、新規に開始」で「手動」ラジオボタンを選択している場合は、「新規標本」コマンドまたは 「新規標本」ボタンに応答する形でサンプリングは開始されます。また、標本を手動で収集するか、周期的に収集するかにかかわらず、プログラムがブレークポイントに到達すると、つねに追加の標本収集が開始されます。
「コレクタ」メニューの「開始」または「継続」をクリックすると、「デバッグ」ウィンドウでプログラムの実行が開始します。
「開始」は、プログラムの標本採取をコードの先頭から開始します。一方、「継続」は、プログラムの標本採取をコードの現在位置から開始します。
「コレクタ」メニュー |
プログラム標本収集を開始、プログラム標本収集を停止、標本アナライザを起動、標本コレクタを終了するためのコマンドを提供します。 |
「データ収集」 ラジオボタン |
標本コレクタをオフ、一回の実行のみオン、またはすべての実行においてオンにします。「一回の実行のみ」を選択している場合、実験データの作成後に、標本コレクタはオフとなります。「すべての実行で」を選択している場合は、実験データ作成後も標本コレクタは起動したままの状態となります。標本コレクタをオンにしても、データ収集は開始されません。パフォーマンスデータは、「デバッグ」ウィンドウ上でプログラムを実行した場合のみ収集されます。 |
「実験ファイル」 テキストフィールド |
実験ファイルのフルパスを入力します。パスはキーボードから入力することも、ファイルチューザから選択することも可能です。ファイルチューザを利用するには、テキストフィールドの右端の省略記号 (...) の付いたボタンをクリックしてください。 |
「アドレス空間情報」チェックボックス |
一連のセグメント (それぞれにはページ数が含まれます) として表されるプロセスのアドレス空間データを収集します。こうしたデータによって、標本アナライザは、各ページの状態、およびそのページが参照されたかまたは変更されたかどうかを示します。 |
「実行プロファイル情報」チェックボックス |
アプリケーション実行中に、関数、モジュール、セグメントによって費やされた時間についての情報を収集します。 |
「プロファイルデータ収集」 スライダ |
標本コレクタが 1 秒間にどれくらいの標本を収集するかを制御します。 |
「プロファイル時間」ラジオボタン |
標本データに呼び出し先の関数の回数を含めるかどうかを指定します。 |
「手動(「新規標本」コマンド使用)」 ラジオボタン |
「コレクタ」メニューの「新規標本」コマンドが選択されると、データを集計し、新しい標本収集を開始します。 |
「周期的に」 ラジオボタン |
「周期」スライダによって設定された間隔に従って、データを周期的に収集します (デフォルトは 1 秒です)。 |
「周期」スライダ |
データを周期的に収集する間隔を指定します。 |
標本コレクタがプロファイル PC およびコールスタックを記録する頻度は、1 秒あたりの回数として指定できます。その範囲は秒あたり 1〜100 サンプルとなります。
収集データの精度が落ちても、データ収集によるオーバーヘッドを少なくしたい場合は、頻度を低くします。
データ収集によるオーバーヘッドが増大しても、収集データの精度を上げたければ、頻度を高くします。
プロファイル収集の間隔を指定するには、「プロファイルデータ収集」スライダを動かして、秒あたりのサンプル回数を指定します。
標本コレクタは、以下に示す 3 つのポイントにさしかかると、1 つの標本に対するデータの収集を中断して、次の標本採取へと移ります。
ブレークポイント
「コレクタ」メニューの「新規標本」コマンドが選択された場合
ユーザーによって指定された秒数(周期)が経過した場合
データはコード中のブレークポイントにおいて常に集計されるので、どの位置にでもブレークポイントを設定すれば、データを自由に収集することができます。
アプリケーションが -g オプションによってコンパイルされている場合、収集したい情報に関係のあるコードの特定の位置にブレークポイントを設定できます。ブレークポイントは関数の最初、最後、およびコード中の任意の行に設定できます。
アプリケーションが -O オプションによってコンパイルされている場合、関数上にはブレークポイントを設定できますが、特定のソースコード行には設定できません。
「手動(「新規標本」コマンド使用)」ラジオボタンが選択されている場合は、コードにブレークポイントを設定しておかなくても、「コレクタ」メニューの「新規標本」コマンドによって、アプリケーションのどのポイントのデータでもチェックできます。ユーザーとアプリケーションとのインタラクション (メニューからコマンドを選択するまでの時間や、キーボードからコマンドを入力する時間など) を測りたい場合などには、便利な機能です。
「周期的に」ラジオボタンを選択しておけば、アプリケーションの実行を観察しながら動作データ標本を採取できるため、アプリケーションの動作を一定の規則に従って確認できます。「標本コレクタ」ウィンドウ下部の「周期」スライダを使うことで、標本コレクタが標本データを集計する間隔を設定できます。間隔は 1 〜 60 秒の範囲で指定できます。