This file is written in UTF-8 (Japanese). TAB=4chars. Copyright 2003, 2004, 2005, 2006 Grid Technology Research Center, National Institute of Advanced Industrial Science and Technology Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. このパッケージについての解説 2006/10/17 このパッケージに内容物と予約利用の簡単な解説・仕様を示す。 開発中のため、ここに記述されている内容と現実の動作は異なる場合がある。 もくじ === 概要 ディレクトリ構成と主な内容物 動作環境 セットアップ 起動と終了 予約管理コマンド 予約トランザクションの制限 予約へのジョブ投入 予約とジョブ実行について SGE キューベース版の動作解説 Torqueスケジューラ設定とPluS設定の対応 ジョブのスケジューリングアルゴリズム Torque 認証プログラムの改良について 概要 == 本パッケージは、TORQUE (PBS), SGE に事前予約機能を追加するものである。 起動時オプションにより、以下のいずれかの動作をする。 o SGE キューベース版 SGE スケジューラーを置き換えず、予約キューを管理するだけで予約機能を実現する。 セットアップは容易である。 o SGE 自前スケジューリング版 SGE スケジューラーをまるごと置き換え、予約管理機能と、それに基づくジョブ スケジューリング機能を実現する。 SGE 本体のビルドが必要であり、セットアップは手間がかかる。 SGE の全てのスケジューリング機能をサポートしていない。 o TORQUE 自前スケジューリング版 TORQUE スケジューラーをまるごと置き換え、予約管理機能と、それに基づくジョブ スケジューリング機能を実現する。 ディレクトリ構成と主な内容物 ============== build.xml ビルドファイル plus.jar スケジューラーJARファイル (ビルド後に作成) bin/ plus_scheduler 本スケジューラー起動用スクリプト plus_schedkill 本スケジューラー停止用スクリプト plus_reserve 予約取得用スクリプト plus_modify 予約変更用スクリプト plus_cancel 予約キャンセル用スクリプト plus_destroy 予約破棄用スクリプト plus_availnodes 予約可能ノード数確認用スクリプト plus_commit 予約トランザクション確定スクリプト plus_abort 予約トランザクション破棄スクリプト log4j.properties log4j 設定ファイル build/ パッケージビルド用作業ディレクトリ (ビルド時に作成される) src/jp/aist/gtrc/plus/ command/ 予約管理コマンド関連ソース(Java) scheduler/ スケジューラー関連ソース(Java, 一部C言語, シェルスクリプト) reserve/ 予約管理機構関連ソース(Java) doc/ README.txt 本ファイル db4o.lilcense.txt DB4objects ライセンスファイル (GPLv2) Apache.license.txt Apache ライセンスファイル(log4j用) pbs/TorqueProtocol.txt TORQUE (PBS) プロトコル解説 sge/gdi-manual.txt GDI (Gridengine Database Interface) API解説 sge/XMLsample.txt SGE 情報のXML出力例 lib/ db4o-5.?-java5.jar Java 5.0 用 db4objects ver 5./ ライブラリ http://www.db4o.com log4j-1.2.13.jar Apache Log4j ライブラリ http://logging.apache.org/ 動作環境 ==== o SGE SGE 6.0 には対応している。 ただし、SGE 6.0u6 の qstat にはバグがあり、PluS が正常動作しないことがある。 SGE 6.0u8 以降が望ましい。 Linux 2.6.x, x86 環境での動作確認済。それ以外の環境は未確認。 SGE 5.3 には対応していない。対応予定はない。 o TORQUE (PBS) TORQUE は、1.2.0p4, 2.0.0p5, 2.1.0p0, 2.1.1, 2.1.3 で動作確認済である。 Linux 2.6.x, x86 環境での動作確認済。それ以外の環境は未確認。 OpenPBS での動作は確認していない。基本的に TORQUE と同等なので動作する可能性はある。 PBSPro のスケジューラーとして利用することはできない。 セットアップ ====== <セットアップ条件> Java コンパイラは 1.5.0 以上であること。それ以前には非対応。 <セットアップ手順> まず [1] の作業を行い、PluS 起動形態によって[2]〜[4]も行う。 [1] <必須> Java スケジューラーと予約コマンドのコンパイル・インストール   build.xml のあるディレクトリで、 ant sudo ant install する。 これで、/usr/local/bin に各種スクリプトがコピーされ、 /usr/local/PluS に plus.jar, db4o-xxx.jar などが コピーされる。 インストールディレクトリを変更する場合は、 ant -Dinstall.bin.dir=/myhome/bin -Dinstall.jar.dir=/myhome/jars install などとすればよい。build.xml の冒頭部分を適宜編集しても良い。 ビルド中にスクリプトファイル内のディレクトリ名などを書き換えるようにしている。 build.xml を変更した場合は、ant clean を最初に行うこと。 java にパスを通しておくこと。 [2] sudoers, SGE の設定 PluSスケジューラーが、qresub コマンドをパスワード無しで sudo 実行できるように設定する。 例えば、sudo visudo して plus ALL=(ALL) NOPASSWD: /opt/gridengine/bin/lx26-x86/qresub というような一行を追加する。ここでPluSスケジューラーの起動者は plus とする。 PluS スケジューラー起動者(例:plus)を SGE のマネージャーグループに追加しておくこと。 sudo qconf -am plus などとする。キューの操作にはマネージャー権限が必要なため。 qconf -sm で表示されるユーザー名を確認すること。 [1] で指定した install.bin.dir にパスを通しておくこと。 [3] sge_operatord のビルド SGE 6.0u8 のソースコードを入手する。 http://gridengine.sunsource.net/files/documents/7/78/sge-V60u8_TAG-src.tar.gz 解凍し、 src/jp/aist/gtrc/plus/scheduler/specific/sgesched/operatord/sge-V60u8-plus.patch を当てる。 SGE を通常通りビルドする。 gridengine/source/LINUX86_26/sge_operatord を $SGE_ROOT/bin/lx26-x86 に コピーする。 sge_operatord にパスを通しておくこと。 sge_qmaster や qsub コマンドなどまで差し替えなくても良い(差し替えても良い)。 なお、Linux 2.6, Intel x86, glibc 2.3.3, SGE 6.0u8 環境用の コンパイル済み sge_operatord は src/jp/aist/gtrc/plus/scheduler/specific/sgesched/operatord/sge_operatord-V60u8-lx26-x86 である。これを $SGE_ROOT/bin/lx26-x86/sge_operatord としてコピーしても良い。 ただし、システム環境によっては動作しない可能性もある。 sge_operatord に関しては、 src/jp/aist/gtrc/plus/scheduler/specific/sgesched/operatord/README.txt を参照のこと。 [4] pbs_iff のビルド TORQUE ソース (1.2.0以降) を以下から入手する。 http://www.clusterresources.com/downloads/torque/ 解凍後、torque-X.Y.ZpN/src/iff/iff2.c を src/jp/aist/gtrc/plus/scheduler/specific/pbs/pbs_iff/iff2.c_torque-X.Y.ZpN で置き換える。 TORQUE を通常通りビルド、セットアップする。 pbs_iff にパスを通しておくこと。 iff2.c のパッチは、TORQUE 1.2.0p4, 2.0.0p5, 2.1.0p0, 2.1.3 を用意している。 我々の修正は10行程度の物であるので、これ以外のバージョンでも、同様の修正を 施すのは容易と思われる。 =============================================================================== 起動と終了 ===== <起動条件> PluS は、sge_qmaster (SGE 利用の場合)/pbs_server (TORQUE 利用の場合) の 起動ノードで起動すること。 sge_qmaster/pbs_server は、デフォルトのポートを開いていること(-p指定しないこと)。 SGEキューベース版では、sge_schedd が起動していること。 SGE/TORQUE自前スケジューリング版では、sge_schedd/pbs_sched が起動していないこと。 PluSスクリプトインストールディレクトリ(デフォルトでは /usr/local/bin) にパスが 通っていること。 sge_qmaster/pbs_server が起動していること。 同一ノードで既に PluS が起動していないこと。 <スケジューラー起動方法> "plus_scheduler -t 実行形態 -r 予約DBディレクトリ" を実行する。 root 権限での起動でなくても良い。 "plus_scheduler -h" で簡易ヘルプが出る。 予約DBディレクトリは、予約DBファイルが置かれるディレクトリである。 読み書き込み権限のあるディレクトリを指定すること。 <SGEキューベース版起動> plus_scheduler -t sge -r ... <SGE自前スケジューラー版起動> plus_scheduler -t sgesched -r ... <TORQUE自前スケジューラー版起動> plus_scheduler -t pbs -r ... <スケジューラー停止方法> "plus_schedkill" を実行する(暫定: 誰でも実行でき、止められてしまう問題あり)。 あるいは、PluS の Java プロセスを殺す。 予約管理コマンド ======== <利用条件> 予約操作ホストとスケジューラー起動ホストが異なる場合は、 "-R スケジューラーホスト名" をスクリプトに指定すること。 無指定の場合は、予約操作ホストにPluSスケジューラーが起動している物とみなす。 どのコマンドも -h オプションを指定すると、簡単なヘルプが出る。 <終了コードと表示> 正常終了の場合(ヘルプ表示の場合を含む) プログラムの終了コードは0である。 標準出力にメッセージなどが表示される。 異常終了の場合 プログラムの終了コードは1である。 標準エラー出力にエラーメッセージが表示される。 ●予約登録 plus_reserve {-R スケジューラーホスト名} {-T} -s 開始時刻 -e 終了時刻 -n ノード数 {-x} 時刻指定は、以下の形式をサポートする。 "yyyy-MM-ddTHH:mm:ss+zz:zz" or "...-zz:zz" "yyyy-MM-ddTHH:mm:ss+zzzz" or "...-zzzz" "yyyy-MM-ddTHH:mm:ssZ" "yyyy-MM-ddTHH:mm:ss" 1番目と3番目は ISO8601 で定められた形式である。 3番目は UTC、4番目はこのコマンドを実行したホストのローカル時間と解釈する。 日本(GMT+09:00)の 2006年1月27日 において、以下の表記は等価である。 "2006-01-27T12:34:56+09:00" "2006-01-27T12:34:56+0900" "2006-01-27T03:34:56Z" "2006-01-27T12:34:56" PBSPro 形式の時刻表記にも対応している。PBSPro の時刻表記は "[CC[YY[MM[dd]]]]HHmm[.ss]" という形式である。例えば、上の例の時刻ならば "200601271234.56" "0601271234.56" "01271234.56" "271234.56" "1234.56" は、今日が2006/01/27ならば、全て等価である。秒指定が無い場合は 00 秒とみなす。 なお、日付指定が無い場合で、その時刻が既に過ぎている場合、翌日の時刻とみなす。 例えば、今が 15:00 の時、"1234.56" という指定は、明日のその時刻と解釈する。 月・日についても、既に過ぎていれば、同様に来年・来月と解釈する。 タイムゾーン指定はできず、全てローカル時刻とみなす。 touch(1) と同じで、date(1) とは CCYY の位置が異なる。 ノードリソースの指定(CPU数、メモリ量など)は、コマンド側非対応(暫定制限)。 予約成功の場合は、   "Reserve succeeded: reserve id is R123" などと表示される。行末の "R123" が予約IDである。 -T オプションを付けた場合は、本コマンド呼び出し後に、plus_commit/plus_abort を 呼び出して、処理の確定/破棄をする。 -x オプションを指定した場合は、"R123" (改行無し) と表示される。 ●予約情報閲覧 plus_status {-R スケジューラーホスト名} {-r 予約ID} {-o 予約者} {-x} {-n} 予約ID指定があれば、その予約情報を予約ノード名付きで表示する。 予約者指定があれば、その予約者の全ての予約を表示する。 予約ID、予約者の指定がなければ、全ての予約情報を表示する。 -x オプション付きの場合は、XML 形式で表示する。 全ての予約情報を表示する場合は以下の形式: .... ... 一つの予約情報は以下の形式: R123 ohkubo-k 2006-01-25T18:00:00+09:00 2006-01-25T19:00:00+09:00 Running 1 host00.example.com 時刻表記は、上の例と同じく ISO8601 形式とする。タイムゾーンは必ず付記する。 タイムゾーンの表記は {+-}zz:zz の形式とし、: を入れる。Java のタイムゾーン 表記では、デフォルトでは : が入らないことに注意。 XML 表記の場合、時刻はスケジューラー稼働ホストのタイムゾーン表記となる。 XML 表記でない場合、plus_rsvstatus コマンド実行ホストのタイムゾーン表記となる。 -n オプション付きの場合は、ノードごとに開始時刻順に分類して表示する。 ●予約キャンセル plus_cancel {-R スケジューラーホスト名} {-T} {-r 予約ID} {-o 予約者} 指定された予約IDの予約か、指定された予約者の全ての予約をキャンセルする。 キャンセルされた予約は、本来の予約終了時刻になるまで、キャンセル状態 のまま残る。キャンセルされた予約に投入したジョブは実行されない。 キャンセルできるのはコマンド実行者の予約だけである。 -T オプションを付けた場合は、本コマンド呼び出し後に、plus_commit/plus_abort を 呼び出して、処理の確定/破棄をする。 ただし、-T と -o の同時指定はできない。-o 指定の場合は、暗黙のうちに commit され、 abort はできない。 ジョブ実行中にそのジョブの予約がキャンセルされた場合、そのジョブは停止し キューに戻るが、再び実行されることはない。 ●予約内容変更 plus_modify {-R スケジューラーホスト名} {-T} -r 予約ID {-s 開始時刻} {-e 終了時刻} {-n ノード数} 指定された予約の、開始・終了時刻やノード数を変更する。 指定されなかったパラメータは元のままとする。 変更できなかった場合(新たにノード予約できなかった場合)、元の予約状態のままとなる。 時刻表記は plus_reserve と同じである。 -T オプションを付けた場合は、本コマンド呼び出し後に、plus_commit/plus_abort を 呼び出して、処理の確定/破棄をする。 ●予約可能ノード数確認 plus_availnodes {-R スケジューラーホスト名} -s 開始時刻 -e 終了時刻 {-x} 開始時刻・終了時刻は plus_reserve と同様の形式で指定する。 その時間内にまたがる予約が無いノード数を表示する。 ノード数確認成功の場合は、   "Available node number is 10" などと表示される。行末の数字が予約可能なノード数である。 -x オプションを指定した場合は、"10" (改行無し) と表示される。 ●予約破棄 plus_destroy {-R スケジューラーホスト名} {-T} {-r 予約ID} {-o 予約者} 指定された予約IDの予約か、指定された予約者の全ての予約を破棄する。 破棄された予約は、予約終了時刻を待たずに、即座に消滅する。 破棄できるのは、コマンド実行者の予約だけである。 -T オプションを付けた場合は、本コマンド呼び出し後に、plus_commit/plus_abort を 呼び出して、処理の確定/破棄をする。 ただし、-T と -o の同時指定はできない。-o 指定の場合は、暗黙のうちに commit され、 abort はできない。 ●予約処理確定 plus_commit {-R スケジューラーホスト名} -r 予約ID -T 付きで plus_reserve/modify/cancel/destroy を呼び出した後、その処理に 成功した場合、その処理を確定する。 ●予約処理破棄 plus_abort {-R スケジューラーホスト名} -r 予約ID -T 付きで plus_reserve/modify/cancel/destroy を呼び出した後、その処理に 成功した場合、予約処理の変更を破棄する。そもそも処理に失敗した場合は plus_abort は 不要である。 plus_abort すると、plus_xxx -T を実行する前の状態に戻る。 予約トランザクションの制限 ============= plus_reserve/cancel/modify/destroy には -T オプションがある。 plus_xxx -T ありを実行した場合: 処理成功ならば、plus_commit で処理確定 or plus_abort で処理破棄する。 commit/abort 待ち状態ならば、新たな plus_reserve/cancel/modify/destroy 処理は できない。plus_commit/abort か plus_status/availnodes/schedkill のみ受け付ける。 処理失敗ならば、plus_abort は不要。 plus_xxx -T なしを実行した場合: 処理成功でも失敗でも、plus_commit/abort は不要。 いずれの場合でも plus_abort はできない。 commit/abort 待ち状態は、plus_scheduler 再起動を跨いで有効である。 plus_cancel/destroy で -o owner 指定する場合は、-T は使えない。 commit/abort 待ち中に、予約終了時刻を過ぎてしまった場合は、自動的に abort 扱いとなる。 予約へのジョブ投入 ========= 上記の予約登録により、予約ID = R123 の予約が出来たとする。 <SGEキューベース版での予約利用> R123 という名前のキューが作成されているので、qsub -q R123 ... などとして そのキューにジョブを投入する。 <SGE自前スケジューリング版での予約利用> qsub -ac rsvid=R123 ... などとしてジョブ投入する。 qsub -W x=rsvid:R123 ... などとしてジョブ投入する。 予約IDが誤っていたり、予約実行を取りやめたい時は、 qdel ジョブID でジョブを削除すること。 予約とジョブ実行について ============ ジョブ投入時に予約IDが指定されていないジョブは、その時点で予約されておらず ジョブも実行していない実行ノードがあれば速やかに実行される。 ただし、TORQUE はジョブ投入直後にスケジューリングするが、SGE は定期的にしか スケジューリングされない。 予約IDが指定されているジョブは、その予約の開始時間が来てから実行される。 ただし、ジョブの実行スケジューリングは最大30秒間隔で行っているので、 実行ノードに空きがあっても、予約開始時間から実行開始まで最大30秒の間が空く ことがある。 予約登録に成功していても、実行時に実行ノードがダウンしていたり、その予約に 大量のジョブが投入されていたりすると、実行されないこともある。 その場合、予約ノードの振り替えなどは行われない(暫定仕様)。 あるノードの予約開始時刻に、予約無しで投入されたジョブが走っていた場合、 そのジョブは強制停止の上、キューに戻る(ジョブ投入力後の状態に戻る)。 その後のスケジューリングで、予約されておらずジョブも実行していない実行ノードが 見つかれば、そこでジョブを最初から再実行する。 =============================================================================== SGE キューベース版の動作解説 =============== SGE キューベース版PluSは、予約を作成すると、それに対応するSGE のキューを作成する。 予約利用者はこの予約キューにジョブを投入することで予約を利用できる。 予約の排他的利用のため、予約キューには、利用可能なユーザー・利用可能な実行ホストを 指定している。 PluS は、予約開始前は予約キューを suspend しておき、予約開始時刻に resume し、 予約終了時にキューごと削除する。suspend 状態の予約キューにジョブを投入しても ジョブは走らず、resume 後の最初のスケジューリングで予約ジョブが走りだす。 SGE キューベース版でのジョブスケジューリングは、オリジナルの sge_schedd が 行っており、PluS 自体はジョブスケジューリングはしない。 PluS のキュー制御は、自作したシェルスクリプトを PluS から起動することで行っている。 ○予約作成時の処理 1. PluS 自体が収集したノード情報を元に、予約ノードを決定する。予約ID(ここでは R123 とする)を払い出し、DB ファイルに予約情報を記録する。 これらの処理は、自前スケジューリング版と同じである。 2. 予約ノード集合に対応する @R123_hosts というSGEのホストグループを作成する。 3. 予約者に対応する R123_users という SGE のユーザーグループを作成する。 4. 予約キュー R123 を作成する。このとき、利用可能なホストは @R123_hosts、 利用可能なユーザーは R123_users に設定する。 5. R123 を suspend 状態にする。 2 の処理は sge_rsvq_reg_nodes.sh で、3〜5 の処理は sge_rsvq_new.sh で行う。 ○通常時の処理 PluS は、定期的(デフォルトでは30秒間隔)に予約テーブルをチェックし、予約開始時刻・終了時刻に なった予約がないかチェックしている。 予約期間中になったのにまだ suspend 状態のキューがあれば「予約開始時の処理」を、予約終了時刻を 過ぎたのにまだ存在している予約キューがあれば「予約終了時の処理」を行う。 ○予約開始時の処理 1. 予約ノード上にある通常キュー(PluSが作成した予約キュー以外の、元からあるキュー)を suspend する。 2. 予約ノードで走っている予約無しジョブを強制終了してキューに戻す。 3. 予約キューを resume する。 1〜3 の処理は sge_rsvq_start_rsv.sh で行う。 2 の処理は、このスクリプトで qmod -sj ジョブID sudo -u ジョブオーナー名 qresub ジョブID qdel ジョブID とすることで実現している。この部分を変更すれば、予約開始時の予約無しジョブの扱いを変えられる。 なお、qresub でジョブの再投入を行うと、そのジョブのオーナーはqresub の実行者、 すなわち PluS スケジューラー起動者になってしまう。これを避けるため sudo を 利用している。セットアップ時に sudoers の設定が必要になるのはこのためである。 ○予約終了時の処理 1. 予約キュー上にある全てのジョブを削除する(動作中・動作待ちにかかわらず)。 2. 予約キュー、そのために作成したユーザーグループ、ホストグループを削除する。 1〜2の処理は sge_rsvq_del.sh で行う。 1 の処理は、動作中ジョブも削除するため -f を付けて qdel -f ジョブID で行う。この部分を変更すれば、予約終了時のジョブの扱いを変えられる。 ○予約キャンセル時の処理 1. 予約キューが利用可能なホストを、本来の @R123_hosts から、NONE に変更する。 PluS の仕様として、予約キャンセルの場合は、予約ノードを解放するだけで、 予約情報自体は残る。このため、予約キューなどは残す。 この処理は sge_rsvq_unreg_nodes.sh で行う。 ジョブのスケジューリングアルゴリズム ================== SGE 自前スケジューリング版、 TORQUE 自前スケジューリング版では、オリジナルの スケジューラー(sge_schedd/pbs_sched)は利用せず、PluS 自身がジョブの スケジューリングを行う。 PluS は、デフォルトでは ジョブのプライオリティー順に、それが同一ならば FIFO (ジョブの投入時刻順) に実行される。 ジョブの実行順やノードの割り当て順を指定するには、以下に示す設定ファイル (sched_confとする)を作成し、スケジューラー起動時に plus_scheduler -a Sort -c sched_conf とする。 sched_conf の記述例 --------------------------------------------------------------- # Scheduler Config file SAMPLE # NodeSortKey can specify (see NodeSortKey.java) # LowestLoadAverage, LongestIdleTime, LargestPhysicalMemory # JobSortKey can specify (see JobSortKey.java) # JobPriority, LeastTimeRequested, MostTimeRequested, # QueuePriority, QueueRoundRobin, ByQueue, # OwnersName, OwnersGroup, OwnersHost # OwnersXxx needs to specify XxxsOrder. # # SortKey: 1st sort key, 2nd sort key, ... NodeSortKey: LowestLoadAverage, LongestIdleTime JobSortKey: QueuePriority, JobPriority # # OrderType: primary job owner(group/host/domain), 2nd, ... #OwnersOrder: nakada, takefusa #GroupsOrder: professors, doctors, masters #HostsOrder: apgrid.org, hpcc.org --------------------------------------------------------------- この例では、   実行ノードは、負荷が低い物、それが同じならばアイドル時間が長い物が優先   実行ジョブは、キューのプライオリティが高い物、それが同じならジョブプライオリティの 高い物が優先 となる。 投入者に順番を付ける時は、誰を優先するかを OwnersOrder, GroupsOrder, HostsOrder で指定しなければならない。 ジョブのプライオリティは qsub -p X で指定する X (最高1023, 標準0) の値である。 Torqueスケジューラ設定とPluS設定の対応 ==================== TorqueのFifoスケジューラー設定ファイル(/var/spool/torque/sched_priv/sched_conf) には、以下のジョブソート指定方法がある。 round_robin: キューが複数ある場合、最初に1番目のキューのジョブを実行し、2回目のスケジューリングでは 先ほどのキューに実行待ちジョブがあっても2番目のキューを実行する。 デフォルトでは false。 by_queue: キューが複数ある場合、最初に1番目のキューのジョブを実行し、2回目のスケジューリングでは 先ほどのキューに実行待ちジョブがあればそれを、無ければ2番目のキューのジョブを実行する。 デフォルトでは true。 sort_queues: キューの選択順(round_robin, by_queue の指定があるときもないときも)を、 キューのプライオリティー順とする。 無ければ、pbs_server に登録されている順番となる。 デフォルトでは true。 strict_fifo: あるキューに複数の実行待ちジョブがある場合、最初に投入されたジョブから実行する。 指定がなければ、ジョブのプライオリティー順となる。 デフォルトでは false。 ただし、Torque 実装では、複数のキューにジョブがある場合、全てのキューの 全てのジョブを投入順に実行するのではなく、pbs_server に登録されたキューの 順に、かつ、あるキューのジョブは投入順に実行される。つまり、strict_fifo が true の場合は、それ以外の値の設定にかかわらず、round_robin=false, by_queue=true, sort_queues=false という扱いになる。 以下の表で、rr は round_robin, bq は by_queue, sq は sort_queues, sf は strict_fifo の設定値を、F は false, T は True を示す。 rr bq sq sf PluSでの JobSortKey 指定 ---------------------------------------------------------- F F F F JobPriority [キューの区別はしない] F F F T SubmitTime [キューの区別はしない] F F T F QueuePriority, JobPriority F F T T QueuePriority, SubmitTime F T F F ByQueue, JobPriority F T F T ByQueue, SubmitTime F T T F QueuePriority, ByQueue, JobPriority (Torqueのデフォルト) F T T T QueuePriority, ByQueue, SubmitTime T F F F QueueRoundRobin, JobPriority T F F T QueueRoundRobin, SubmitTime T F T F QueuePriority, QueueRoundRobin, JobPriority T F T T QueuePriority, QueueRoundRobin, SubmitTime T T F F rr と bq の同時指定はあり得ない T T F T 同上 T T T F 同上 T T T T 同上 例えば、デフォルトの sched_conf では、sort_queueとby_queue が True, それ以外が False となっている。これと同様のスケジューリングとするには、PluS用の設定ファイルに JobSortKey: QueuePriority, ByQueue, JobPriority と書いておく。 設定ファイル名が未指定の場合、これと同じ扱いとなる。 実行時に関連するファイル ============ 予約記録ファイル Java スケジューラー(plus_scheduler)を起動したノードにデフォルトで /usr/local/PluS/reserves.db4o というファイルが出来る。 ここは、plus.jar などがインストールされるディレクトリでもある。 起動時に保存パスを変更する場合は、plus_scheduler -r /some/where などとする。/some/where/reserves.db4o というファイルが出来る。 手動で削除してスケジューラを再起動すれば、 全ての予約は消滅する。 db4o には、デフラグメントを行う com.db4o.tools.Defragment という クラスがある。しかし、デフォルトではコンパイルされておらず、利用も 推奨されていないようである。 ログファイル   スケジューラーの動作ログは、デフォルトで /usr/local/PluS/plus.log に記録される。   記録先ファイル名、記録レベルは bin/log4j.properties で変更できる。   変更後は ant install を再実行すること。 Torque 認証プログラムの改良について ================== オリジナルの iff2.c から作られる pbs_iff コマンドは、 pbs_iff サーバー名 ポート番号 sockfd というオプションを取る。 サーバー名 pbs_server 起動ホスト名 ポート番号 pbs_server のポート(デフォルトで15001) sockfd pbs_iff を呼び出したコマンドが既に pbs_server に接続し、 利用認証を受けたいソケットのファイルディスクリプタ番号 Java ではファイルディスクリプタ番号が取れないので、以下のように仕様変更した。 pbs_iff サーバー名 ポート番号 fd_port サーバー名 オリジナルと同じ ポート番号 オリジナルと同じ fd_port 値が 1024 未満ならば、オリジナルと同じ。 1024 以上ならば、利用認証を受けたいソケットのポート番号 Java スケジューラーからはポート番号指定で pbs_iff を実行する。 今まで pbs_iff を利用していたオリジナルコマンド(qsubなど)も、 改良版pbs_iffで今まで通り認証できる。 ソースコードの変更部分は #ifdef ORIGINAL オリジナルソース #else 変更したソース #endif としてある。 [EOF]