どうもちゃんと動いていないような気がしてならないので、いろいろテストしてみる。
$ echo "sleep 30" | qsub -l nodes=1:ppn=8
こういうふうにジョブを投げると
$ qstat -t Job ID Name User Time Use S Queue ------------------------- ---------------- --------------- -------- - ----- 97.HostA STDIN rnaseq 0 R batch
こんなふうに走る。
このコマンドを6個くらい連打すると
$ qstat -t Job ID Name User Time Use S Queue ------------------------- ---------------- --------------- -------- - ----- 98.HostA STDIN rnaseq 0 R batch 99.HostA STDIN rnaseq 0 R batch 100.HostA STDIN rnaseq 0 R batch 101.HostA STDIN rnaseq 0 R batch 102.HostA STDIN rnaseq 0 R batch 103.HostA STDIN rnaseq 0 Q batch
このように5ジョブがR、1ジョブがQとなった。
-l nodes=1:ppn=8
としているので1ジョブで1ノードの8CPUを専有しているため、8/16/16の3ノードで5ジョブが走ったわけだ。
つまりちゃんとジョブ管理できているね。
$ echo "sleep 30" | qsub -l nodes=2:ppn=16
こんなふうに投げると2ノードを専有するため1ジョブしか走れなくなり
$ qstat -t Job ID Name User Time Use S Queue ------------------------- ---------------- --------------- -------- - ----- 107.HostA STDIN rnaseq 0 R batch 108.HostA STDIN rnaseq 0 Q batch
こうなる。
先日の動作試験ではHostAでしか動作しなかったのだが、スクリプトの書き方に問題があったのかもしれない。
TORQUEの場合、どうもどのノードで処理するかの指定が効かないし、実際にどのノードで走っているのかはわからないようだ。今のシステムのように計算ノードでCPUの種類や構成が違っている場合、指定ができたほうが割り振りが効率的にできそうな気もするのだが。