(7/8)4.2. スケジューリングの戦略と実現方式
4.2.1. スケジューリングの戦略
自動運転スケジューラの実現方式を説明する前に、本システムの基本となるスケジューリングの戦略について紹介する。
すなわち、ジョブのターンアラウンドの保障とシステムの運転効率の向上といった相反する要求を満足するスケジューリングを実現することは、ある意味困難である。しかし、この間のシステムの利用状況を整理すると、つぎのような特徴がある。
- 1日を時間帯で見れば15:00以降、夜中2:00までに利用が多く、他の時間は比較的すく傾向にある。
- 週単位に見ると月曜は比較的すいており、木曜以降週末の利用が多くなる。
- また、これは本センターの負担金制度ともからむ話しであるが、定額利用制度期間の最終月には利用が集中してしまう。 したがって、このような利用状況を背景に、つぎのような戦略を妥当なものとする。
- システムの運転カレンダーをジョブのスケジューリングで最優先のパラメータとする。
- 混雑時は、ジョブが要求するCPU時間ぐらいの実行待ちは妥当であると判断し、要求するCPU時間が短いものを優先してスケジューリングする。
- キューhのような多くの40PEを必要とするジョブは、極力利用の少ない時間帯(例えば、深夜2時以降、週末から日曜)に実行されるよにうスケジューリングする。
4.2.2. 実現方式自動運転スケジューラシステム(以下、本システムと略す)の実現方式としては、NQSとのより密な連携のためにNQS出口ルーチンの利用も検討したが新規にプロセスを起動できない、SIGNALマスクがさわれないといった大きな制約があること判明したので、独立したデーモンプロセスとして作成することにした。
実現方式の概要は、つぎのようなものである。
プログラムの開発は、基本的にperlを用い、ジョブ状況の確認には、システムで提供されるコマンドを利用して実現することを考えている。
- NQSは起動時からGlobal_Batch_Limitをゼロに設定することで、全てのジョブスケジューリングを本システムが制御できるようにする。
- 本システムのスケジューリング処理には、ジョブの受付け、終了、キャンセルなどジョブの状況変化を契機にする処理とタイマーにより一定で行う二種類がある。前者は、NQSのジョブ処理と本システムを密に連携させるために追加した機能で、NQSの出口ルーチンを改造して、新たなログメッセージをNQSログに出力させ、これを本システムが注視する形で実現している。
- ジョブが新たに投入されると、そのジョブの要求しているCPU時間を調べ、システム停止時刻までに終了しないと判断したジョブはqholdコマンドにより、オペレータホールド属性に遷移させる。また、一旦、システム停止時刻までに実行可能と判断され、実行待ちとなっているジョブのCPU時間を調べ、終了しないものは同様にオペレータホールド属性に遷移させる。さらに、Global_Batch_Limitを一定時間大きくすることで、実行待ちジョブを実行させる。
- また、ジョブの実行終了や実行中ジョブがキャンセルされた場合も、実行待ちジョブの状況を調べて、Global_Batch_Limitを操作することでジョブを実行させる。
- タイマーにより起動された契機では、まず、実行待ちジョブの待ち時間と要求資源を調べて長時間待ちになっているジョブがあれば、実行中ジョブの残りの実行時間を算出して、残り時間の少ないジョブが使っているPEを調べて、Run_LimitとJob_Class_Listを変更し,長時間待ちジョブが実行できるように構成変更を行う。