派生プロセス

synprog のパフォーマンスデータを収集したことを確認してください。 これらの作業がまだ済んでいない場合には、synprog サンプルのデータ収集を参照して実行してください。

ここでは、派生プロセスのさまざまな作成方法とその取り扱い方を紹介し、派生プロセスを作成するプログラムの実行について「タイムライン」ディスプレイを使用して概説します。 プログラムは、2 つの派生プロセスを生成します。 親プロセスは何らかの処理を行い、popen を呼び出し、さらに処理を行います。 第 1 派生プロセスは何らかの処理を行い、次に exec を呼び出します。 第 2 の派生プロセスは system を呼び出し、次に fork を呼び出しします。 この生成呼び出しの結果である派生プロセスは、ただちに exec を呼び出します。 派生プロセスは何らかの処理を行い、exec を再び呼び出し、さらに処理を行います。

  1. 実験とその派生を対象としてパフォーマンスアナライザを起動します。
    % cd work-directory/synprog
    % analyzer test.2.er &
    

    親実験の読み込む時には派生実験が自動的に読み込まれますが、それらのデータは除外されます。

  2. 派生実験のデータディスプレイを有効にするには、次を実行します。
    1. 「表示」and choose「データをフィルタ」を選択します。
    2. 「すべてを選択」をクリックし、「了解」をクリックします。
  3. 「タイムライン」タブをクリックします。

    各実験の最上部バーが「標本」バーです。 その下のバーには、時間ベースのプロファイルイベントデータが表示されます。

    一部の標本は、黄色と緑色で表示されます。 緑色は、ユーザー CPU モードでプロセスが稼動していることを意味します。 ユーザー CPU モードで消費される時間は、緑色で表示される標本における比率で示されます。 ほとんどの時間では 3 つのプロセスが稼動しているので、各標本の中で緑色で表示されるのは 3 分の 1 ほどだけです。 残りは、プロセスが CPU を待っていることを示す黄色で表示されます。 利用可能な CPU の数よりプロセスの数の方が多い場合、この種の表示が一般的です。 親プロセス (実験 1) が実行を終了して子プロセスの終了を待っているとき、実行中プロセスの標本は半分緑色、半分黄色であり、CPU を争うプロセスが 2 つしかないことがわかります。 実験 3 を生成するプロセスが終了すると、残りのプロセス (実験 7) は CPU を排他的に使用することができるので、この時点以降での実験 7 の標本は全面的に緑色となります。

  4. 半分黄色で半分緑色の標本が表示されている領域で、実験 7 の標本バーをクリックします。
  5. 個々のイベントマーカが見えるように拡大します。

    拡大するには、拡大先領域の中をドラッグするか、「拡大」ボタン zoom in x2 button icon をクリックするか、または「タイムライン」 and choose 「拡大」を選択します。

    実験 3 と実験 7 のイベントマーカの間には切れ目があります。1 つの実験にイベントマーカがある場合、他方の実験に切れ目が生じます。 これらの切れ目は、一方のプロセスが実行していて他方のプロセスが CPU 待ちをしていることを示します。

  6. ディスプレイを全幅にリセットします。

    ディスプレイをリセットするには、「表示をリセット」ボタン reset display button icon をクリックするか、「タイムライン」 and choose 「表示をリセット」を選択します。

    実行期間全体に及んでいない実験もあります。 この状況は、実験データがない時間領域の薄いグレーによって示されます。 実験 3、5、6、7 は、これらの実験の親プロセスが何らかの処理を行なったあとに作成されます。 実験 2、5、6 は、exec の正常呼び出しによって終了されます。 実験 3 は実験 7 とそのプロセスが正常に終了する前に終了します。 いつ exec が呼び出されるかは、はっきり提示されます。 実験 3 のデータは実験 2 のデータが終わるときに始まり、実験 7 のデータは実験 6 のデータが終わるときに始まります。

  7. 「実験」タブをクリックし、test.2.er を選択して閉じます。

    exec の正常呼び出しによって終了された実験は、「不正な実験」として「実験」タブに表示されます。 この実験のアイコンは、赤い丸の上に十字が重ねられたものです。

  8. test.2.er/_f1.er を選択をします。

    テキスト区画の下部に、実験が異常終了したことを示す警告が表示されます。 プロセスが exec を正常に呼び出すたびに、プロセスイメージが置換され、コレクタライブラリが読み込み解除されます。 実験は正常に終了できません。正常終了は、実験がアナライザに読み込まれたときに行われます。

  9. 「タイムライン」タブをクリックします。

    標本バーの濃いグレーの領域は、CPU 待ちやユーザーロック待ち以外の待ち時間を示します。 実験 1 における最初の濃いグレー領域は、popen の呼び出しで発生します。 ほとんどの時間は待ち時間ですが、いくつかのイベントも記録されます。 この領域で popen によって作成されたプロセスは CPU 時間を使用しているので他のプロセスと競合状態にありますが、実験には記録されません。 同様に、実験 4 における最初の濃いグレー領域は、system の呼び出しで発生します。 このとき、呼び出し側のプロセスは呼び出しが終了するまで待機するので、その時点になるまでは処理を行いません。 system によって作成されたプロセスもほかのプロセスとの間で CPU を巡って競合するので、実験の記録は行いません。

    実験 1 の最後のグレー領域は、プロセスがその派生プロセスの終了を待っているときに発生します。 実験 4 を記録するプロセスは system の呼び出しが終了すると fork を呼び出し、すべての派生プロセスが終了するのを待ちます。 この待ち時間が、最後のグレー領域です。 上記のいずれの場合にも、待機中プロセスが処理を行うことはなく、実験を記録していない派生プロセスを持つことはありません。

    実験 4 は、そのほとんどの時間を待つことに費やします。 そのため、実験が終わる直前になるまでプロファイルデータを記録しません。

    実験 5 は、まったくデータを持っていないように見えます。 この実験は fork の呼び出しによって作成され、この呼び出しの直後に exec が呼び出されます。

  10. 実験 4 の 2 つのグレー領域の境界を拡大してみましょう。

    十分拡大してみると、非常に小さい標本が実験 5 にあることがわかります。

  11. 実験 5 の標本をクリックし、「イベント」タブを調べます。

    実験は exec の呼び出しにおける初期標本ポイントと 1 つの標本ポイントを記録したものの、プロファイルデータを記録するに足る期間はなかったことがわかります。 実験 5 にプロファイルデータバーがないのは、このためです。

追加演習

複数のプロセッサを搭載しているコンピュータを利用できる場合には、第 2 のデータ収集を再実行してください。 「タイムライン」表示にどのような違いが現われましたか?

関連項目
「タイムライン」タブ
「イベント」タブ
タイムライン表示の解釈
プログラム内の問題ある期間を見つける


著作権と商標について