9. APIライブラリ
5.1. バッチキューの設定例1
表5.2 バッチキューの設定例2
優先度 資源制限量 ユーザ制限 同時実行可能数
緊急ジョブ用キュー 高 無制限 JobCenter管理者 無制限
特定プロジェクト
キュー 中 大 特定プロジェクト 少(1)
小規模ジョブ用
キュー 中 小 なし 多(4)
中規模ジョブ用
キュー 中 中 なし 中(2)
大規模ジョブ用
キュー 中 大 なし 少(1)
実際の資源制限量や同時実行可能数の値は、各サイトにおけるシステム構成によって変わります ので、主記憶はどのくらい実装されているか、ファイルシステムの構成はどうなっているか、ど のようなバッチリクエストを実行することが多いかなどを考慮して決定してください。
JobCenter では、いくつかのバッチキューをひとまとまりにして全体としてバッチリクエストの 同時実行可能数を制限するキュー複合体を定義できます。たとえば、上記の例で特定プロジェク ト用キューと一般用の大規模ジョブ用キューには、大規模ジョブがそれぞれ 1 つずつ同時に実行 できるため、システムとしては同時に 2 個の大規模ジョブが実行できることになります。
しかしシステムとしてはせいぜい 1 個までしか大規模ジョブを同時に実行できない場合、特定プ ロジェクト用キューと大規模ジョブ用キューからなるキュー複合体を定義し、そのキュー複合体 の同時実行可能数を 1 個にすることにより、システムとしての大規模ジョブの同時実行を 1 つに制限できます。この時、特定プロジェクト用キューと大規模ジョブ用キューのどちらかに投 入されているバッチリクエスト数が 1 になると、たとえそのキューの同時実行可能数に余裕が あっても、それ以上のバッチリクエストは実行されません。
5.1.1.2. パイプキュー
パイプキューは、ほかのキューへリクエストを転送するキューです。パイプキューの用途は大き くわけて 3 つあります。
1. 資源制限などの条件により、リクエストをバッチキューの間で自動的に振り分ける 2. リクエストをリモートホスト上の特定のキューに転送する
3. 複数のホストで負荷を分散する
以下は代表的なパイプキューの使用例です。
表5.3 パイプキューの設定例 転送先
自動資源分けキュー 小規模ジョブ用バッチキュー
中規模ジョブ用バッチキュー 大規模ジョブ用バッチキュー 特定目的キュー ホスト1特定目的キュー 負荷分散キュー ホスト1自動資源分けキュー
ホスト2自動資源分けキュー ホスト3自動資源分けキュー
最初の自動資源分けキューは、転送先が資源制限の異なる 3 つのバッチキューとなっており、こ のパイプキューに投入すればユーザがいちいち自分でバッチキューを選択しなくても、適当な バッチキューが選択されるようになります。
2 つめの特定目的キューは特定ホストでしか実行できないリクエストをほかのホストから投入でき るようにするものです。
最後の負荷分散キューは複数の転送先ホストの中からパイプキューが適当なホストを選ぶことに よって、これらのホストの間で負荷分散を行います。
5.1.1.3. ネットワークキュー
ネットワークキューは結果ファイルを転送するためのキューで、その構成は転送先ホストによっ て決定されます。
Windows版JobCenterではネットワークキューはサポートしていません。
以下はこれらの代表的なネットワークキューの使用例です。
表5.4 ネットワークキューの設定例
優先度 転送先ホスト 同時転送可能数
ローカルホストLOC用キュー 高 LOC 無制限
リモートホストRMT1用キュー 中 RMT1 8
リモートホストRMT2用キュー 高 RMT2 4
転送先ホストに対応したネットワークキューが用意されていない場合、ネットワークジョブはデ フォルト・ネットワークキュー (キュー名: DefaultNetQue) に投入されます。このキューはバッ チジョブの結果ファイルをジョブの投入元ホストに出力するものです。
デフォルト・ネットワークキューは、転送先ホストに対応するネットワークキューを作成する前 や、ネットワークキューがなんらかの理由で投入を拒否されている場合に使用されます。
基本的にはローカルホストを含む各ホストのネットワークキューを用意していただくことによっ て、柔軟なスケジューリングが可能となります。
JobCenterキューには各キューのタイプに応じてそれぞれ特有の属性を定義できます。以下にその 各キューの属性について説明します。
5.3.1. バッチキュー
バッチキューの属性としては以下のものがあります。
5.3.1.1. キュープライオリティ
キュー間プライオリティとも呼びます。リクエストのスケジューリングの際にどのキューに登録 されているリクエストを優先的に実行するかを決める要因になります。この値が大きい方が優先 度が高く、等しい場合はキューへの投入時刻順に従います。この属性はバッチキューに閉じたも のであり、ほかのタイプのキューのキュープライオリティとはなんら関係をもちません。
この属性はバッチキューを作成する際に必ず指定しなければなりません。
5.3.1.2. 同時実行可能リクエスト数
そのキューに登録されたリクエストで同時に実行できる数です。この属性はキューを作成すると きに指定することもできますが、指定しなくてもかまいませんし、キュー作成後にこの属性を変 更することもできます。
ここではqmgrサブコマンドによるキュー作成時の指定方法についてのみ説明しておきます。
キュー作成後の設定・変更については後章で説明します。
Mgr: create batch_queue batch1 priority=20 run_limit=3 ↵
以上の手続きで、同時実行可能リクエスト数 3 のバッチキュー batch1 が作成されます。なお run_limit を指定しなかった場合は同時実行可能リクエスト数は1となります。
5.3.1.3. 資源制限
資源制限はそのキューに登録されるリクエストが使用する資源を制限するためのものです。詳細 については後節で説明します。
5.3.1.4. スケジューリングパラメータ
スケジューリングパラメータは、各リクエストが実際に実行されるときの UNIXカーネルによる CPU 割当などのスケジューリングに関するものです。バッチキューに設定されたパラメータ値は 登録されたリクエストに引き継がれ、リクエストが実行される際にそれらのパラメータがセット されます。
スケジューリングパラメータの例としては nice値 が挙げられます。
5.3.1.5. その他の属性
その他の属性として、キュー内リクエストスケジューリング方式、連続スケジュール数がありま す。詳しくは後節で説明します。
5.3.2. パイプキュー
パイプキューの属性として以下のものがあります。
5.3.2.1. キュープライオリティ
バッチキューで説明したものと同様のものです。
5.3.2.2. 同時実行可能リクエスト数
バッチキューで説明したものと同様のものです。qmgrサブコマンドによる指定例を以下に示しま す。
Mgr: create pipe_queue pipe1 priority=20 run_limit=3 server=(/usr/lib/nqs/pipeclient)↵
(R12.7以降のWindows版の場合は以下のとおり)
Mgr: create pipe_queue pipe1 priority=20 run_limit=3 ↵
以上の手続きで、同時実行可能リクエスト数 3 のパイプキュー pipe1 が作成されます(R12.7以降 のWindows版ではserverオプションは指定不要)。
なお run_limit を指定しなかった場合は同時実行可能リクエスト数は1となります。
5.3.2.3. 目的地
目的地とは、そのパイプキューがリクエストを転送する先のキューのことです。この属性は キュー作成時に定義することもできますし、キュー作成後に定義・変更することもできます。こ こではキュー作成時にqmgrサブコマンドにより定義する方法について説明します。キュー作成後 の定義・変更については、後節で説明します。
Mgr: create pipe_queue pipe1 priority=20 server=(/usr/lib/nqs/pipeclient) \ destination=(batch1@host1,batch2@host1) ↵
(R12.7以降のWindows版の場合は以下のとおり)
Mgr: create pipe_queue pipe1 priority=20 destination=(batch1@host1,batch2@host1) ↵ 以上の手続きで、リクエストの転送先が batch1@host1 か batch2@host1 のパイプキューpipe1 が作成されます。
上記の例のように目的地は複数定義できます。転送先は設定順に選択されます。したがって、ま ず batch1@host1 が転送先として選択され、batch1@host1 がリクエスト投入不可能な場合、
batch2@host1 が転送先として選択されます。
"batch1@host1"とはホスト host1 上の batch1 というキューであることを示しています。
5.3.2.4. 事前チェック機能
この属性を指定すると、リクエストをパイプキューに登録する前にそのパイプキューの目的地と なっているキューの状態を調べて、どこにも転送できない場合はパイプキューへの投入自体、不 可能になります。
判定に用いる条件は以下のとおりで、これらを満たしていればパイプキューに登録されます。
■目的地のキュー上でリクエストが投入可能かつ実行可能
■リクエストの資源制限≦目的地のキューの資源制限
ただし、この機能は目的地がローカルのキューの場合にのみ有効です。
この属性を設定していなければ、目的地への転送が不可能であった場合でもパイプキューには登 録されます。
ここではキュー作成時のqmgrサブコマンドによる定義方法を示します。
Mgr: create pipe_queue pipe1 priority=20 server=(/usr/lib/nqs/pipeclinet) check ↵ (R12.7以降のWindows版の場合は以下のとおり)