クラスタロードに基づいてSGEクラスタで動的にQSUBジョブを送信する
-
21-12-2019 - |
質問
最大688のジョブをサポートするSGE(Sun Grid Engine)クラスタでQSUBジョブを実行しようとしています。現在クラスタ上で実行されているジョブの総数を見つける方法があるかどうかを知りたいのですが、現在のクラスタロードに基づいてジョブを送信できます。
私は次のようなことをする予定です:1分間スリープして、クラスタ内のジョブ数が688 <688の場合もう一度確認し、さらにジョブを送信してください。
と私の質問を明確にするために、現在送信した仕事だけでなく、クラスタに送信されたジョブの総数を知ることに関係しています。
事前にありがとうございました。
解決
qstat
を使用して、すべてのユーザーのジョブを一覧表示できます。 awk
およびwc
を使用すると、クラスタ上のジョブの総数を調べるために使用できます。
qstat -u "*" | awk '{if ($5 == "r" || $5 == "qw") print $0;}' | wc -l
.
上記のコマンドは、キューに入れられて計算ノードでスケジュールされるのを待つジョブを考慮に入れます。
しかし、クラスタのSysadminsは、それらに属していないジョブをチェックするためにユーザーが無効にすることができます。実行して他のユーザーのジョブを表示できるかどうかを確認できます。
qstat -u "*"
.
他のユーザーがジョブを実行しているという事実を知っていても、上記のコマンドの実行中には見えませんが、SYS Adminsがそのオプションを無効にする可能性が最も高いです。
後:私の理解から、あなたはただの通常のクラスタユーザーです - なぜあなたはこのように仕事を提出することを煩わしているのですか。必要なすべてのジョブを送信するだけでなく、クラスタがジョブをスケジュールできない場合は、それらをqw
の状態に入れるだけで、SGEが最も適切な時間があるときはいつでもそれらをスケジュールします。
他のヒント
クラスタの設定方法に応じて、ジョブアレイ(-t
のqsub
オプション)を使用するとこの制限が回避されます。
私は、単一のユーザーが送信できるジョブの最大数に似た制限を持っています。この制限は、qsub
の個々のインスタンスに関連し、シングルジョブアレイの提出潜在的に多くのタスク(その制限は別の構成変数、max_aj_tasks
を介して設定されます)。