ループの概要
ループとは、ジョブあるいは、作業単位によって反復して実行される一連の命令群のことです。 ジョブや機能がループすると、ハングしているように見えたり、大量の CP リソースが使用され、他の作業がサービスを受けることができなくなったりします。
ループには 3 つのタイプがあり、タイプごとに症状が異なります。
- 使用不可ループ
- 割り込み禁止ループとは、反復実行のことです。通常は、システム・レベル・コードで生じます。PSW の高位バイトの PSW マスクが X'x4' であるために、入出力割り込みや EXT タイプの割り込みが行えません。割り込み禁止ループは、システム内の 1 つの CP の中で起こります。 マルチ・プロセッサー環境であり、リソースが保留されている場合は、スピン・ループが検出されます。 ユニプロセッサーで発生した場合は、割り込み禁止ループの行き着く先は、システム停止です。
- 使用可能ループ
- 割り込み可能ループ とは、 ジョブや機能を代表して実行されている作業単位 (TCB か SRB) の下で発生します。 PSW の高位バイトのマスクが X'x7' にされて、実行されているため、入出力割り込みや、外部割り込みが可能です。 ループが割り込み可能化されている作業単位では、IO、EXT、CLKC のタイプの割り込みに関しては、定期的に割り込みが行われます。この割り込みは、システム・トレース・テーブルの中にトレースされます。
- スピン・ループ
- スピン・ループとは、システム・コード内の制限時間付き禁止ループです。これは、EXSPATxx (過度スピン状態処置) parmlib メンバー内の指定によりシステムによって制御されます。 システムは、マルチプロセッサー環境では、リソース (ロックなど) が別の CP から解放されるまでスピンにすることもできるし、ループ割り込み禁止にすることもできます。 EXSPATxx (過度スピン状態処置) parmlib メンバーについて詳しくは、「z/OS MVS 初期設定およびチューニング 解説書」を参照してください。
- 割り込み禁止ループの症状
- 割り込み禁止ループは、割り込み可能ループよりも特定しやすいです。 症状には、以下が含まれます。
- 説明の付かない理由で、システム CP 使用量が増加している。
- マスター・コンソール経由および、代替コンソール経由での、システムとの間の通信が行われていない。
- コンソール通信が、ロックアウトされている。 コンソールとの間の通信を確認するには、DISPLAY T コマンドを入力して、システムが応答しないかどうかを調べてください。
- 割り込み可能ループの症状
割り込み可能ループでは、一部または、すべての割り込みが機能します。 このループは通常、アプリケーション・プログラム内のエラーが原因です。 すべてあるいは、ほとんどのループは、問題状態で実行されているコードの中にありますが、このループにはシステム・コードが含まれることがあります。それは、ループ内の何らかの命令がシステム・サービスを要求する場合です。 割り込み可能ループは、複数の中央処理装置で発生することがあります。 このループは、無意味にリソースを消費し、全システム操作を占拠することがあります。
それ以外の症状として、次のものがあります。- ボトルネック。これは、システムの周期的な低下のことを意味します。したがって、これはパフォーマンスの問題を引き起こします。
- ジョブが長時間システムに居残り、状況が変化しなかったり、終了しない。
- 優先順位の低い作業がスローダウンしたり、実行を止めたりする (優先順位の高い割り込み可能ループが原因)。
- 説明の付かない理由により、システム CP 使用量が増加したり、CP によるアドレス・スペースの使用量が通常よりもはるかに大きい。
- スピン・ループの症状
スピン・ループが発生するのは、マルチプロセッサー環境内のあるプロセッサーが別のプロセッサーとの間で通信が行えないか、現在別のプロセッサーによって保持されているリソースを必要としている場合です。 通信を試みたプロセッサーは、検出側 プロセッサーか、スピン側 プロセッサーになります。 応答に失敗したプロセッサーは、失敗プロセッサーです。
検出側プロセッサーは、次のいずれかの状態になるまで失敗プロセッサーとの間で、通信を試み続けます。- 成功する。
- 指定された時間間隔が経過する。
この時間間隔の中で通信が成功しなかった場合は、過度スピン・ループによるタイムアウト があります。そうなると、検出側プロセッサーは、この条件に対応したリカバリー処理を開始させます。
過度スピン・ループ条件に対する MVS™ 処理では、オペレーターに対してプロンプトが出されたり、処置が要求されることなく、リカバリーに入ることがあります。 以下のリカバリー処置は、デフォルトに設定したり、EXSPATxx parmlib メンバーの中で指定することができます。- SPIN
- ある時間間隔でスピンを継続し、このイベントを完了できるようにします。
- ABEND
- 失敗プロセッサーに関しては、現行の作業単位を終了させるが、リカバリー・ルーチンを再試行できるようにする。
- TERM
- 失敗プロセッサーに関しては、現行の作業単位を終了させ、リカバリー・ルーチンの再試行をできないようにする。
- ACR
- 代替 CP リカバリー (ACR) を呼び出し、失敗プロセッサーをオフラインにする。
- システムは、ユーザーに対して意思決定や処置をまったく要求せずに、適切な処置を選択します。 過度スピン・ループの発生に対応して、処置が取られたけれども、その条件が解消されなかった場合は、システムは次に過度スピン・ループがタイムアウトになった時点で次の処置を取ります。 システムが取る処置のデフォルトの順番は、SPIN、ABEND、TERM、ACR です。
- システムでは、処置の順番を変更することができます。ただし、システムが取る最初の処置は、変えることができません。
- 以前にメッセージ IEA490A を引き起こしたハードウェア関連エラーの場合は、システムは、一連の処置を適用していったり、何らかの介入を要求したりせずに、直ちに ACR 処理を開始させます。
- デフォルトのスピン・ループのタイムアウト時間間隔というものがあります。 この時間間隔は、EXSPATxx (過度スピン状態処置) parmlib メンバー内のパラメーターを組み合わせ、SET コマンドを入力することにより変更できます。
- 不必要なリカバリー処置を回避するために、時間間隔を超過しても正当性を失わないシステム諸機能に関しては、過度スピン・ループ処理が免除されます。 それらがタイムアウト時間間隔を超過する場合は、そのシステム諸機能の存在により、過度スピン・ループのレコードがログ・レコーディング (LOGREC) データ・セットに書き込まれます。
- このシステムでは、オペレーター処置を使っても、過度スピン・ループのリカバリーは依然として制御可能です。