もともと誤ってStackOverflowに投稿されました...その投稿からの応答については、下部のPSを参照してください。
しばらく検索しましたが、答えが見つかりません。私が抱えている問題はこれです:2台の12CPUマシンでSGEがセットアップされていると仮定します。グリッドに送信する1CPUジョブが2つありますが、他のユーザーは12CPUジョブを送信したいと思うことがよくあります。これらは、複数のマシンに分割できない共有メモリジョブです。時々、2つのジョブを送信すると、それぞれが別々のマシンに送られ、それぞれに11/12のCPUが空いたままになります。これにより、私が作業している間、他の人が12CPUのジョブを実行できなくなります。
これを回避する方法はありますか?フィルアップルールを使用して単一のqsubを制御できることは知っています(したがって、フィルアップにより、12 CPUのqsubを1台のマシンに残したり、複数のマシンに分割したりできます)が、別々のqsubを強制的に実行するための同等の設定があります同じマシンに?特定のマシンを明示的に要求できることも知っていますが(-hマシン名などだと思います)、これよりも堅牢なセットアップが必要です。
どんな助けでも大歓迎です。ありがとう!
PS:スタックオーバーフローの投稿で、スレッドが閉じられる前に1つの応答があり、並列環境allocation_rule = $ fill_upを使用することを提案しました。何か間違ったことをしていない限り、これで問題が解決するとは思いません。私がテストを見たところ、fill_upに設定した場合、これは、単一のqsub内で要求されたCPUが、可能であれば同じグリッドマシンに配置されることを意味しますが、異なるqsubsからのCPUは、引き続き低負荷マシン(またはその他)に移動します。グリッドが選択)、空のマシンに移動する可能性があります。これをテストするには、いくつかの単一CPUジョブをqsubbingし、最大5分間待機してから、さらにいくつか送信する必要がありました。最初のグループが同じマシンに配置されることもありますが(マシンの負荷がリアルタイムではないため、すべて同じ低負荷のマシンに送信されたと思いますか?)、2番目のグループは一貫して最初のグループと同じマシン。
スケジューラのデフォルトload_forumla設定はnp_load_avgで、負荷平均が最も低いノードに新しいジョブを割り当てます。代わりにノードを埋めるには、load_formulaをslotsに設定します。現在のスケジューラ設定を表示するには:
qconf -ssconf
設定を変更するには:
qconf -msconf