キュー内のジョブおよびリソースの処理効率を最大限に高めるには、もっとも厳しい規則を規則セットの先頭に置きます。この仕様に従うと、N1 Grid Engineスケジューラが特に効率的な方法で適切なキューインスタンスの量を絞り込むのに役立ちます。なぜなら、先頭の規則は、同じ規則セット内の後続の規則に影響されることはなく、常にその規則の代表になるためです。
このことを具体的に理解するために、次のような環境を考えてみます。
4 つのキュー Q001 〜 Q004
4 つの管理対象リソース F001 〜 F004
F001 などの特定の管理対象リソースを要求するジョブは、Q001 などの関連付けられているキューで実行するよう制限されている
ジョブは 5 つあるプロジェクト P001 〜 P005 の 1 つに発行する
こうした環境で、次のような規則セットを 1 つ定義したと仮定します。
{ name 30_for_each_project description "not more than 30 per project" enabled TRUE limit projects {*} queues Q001 to F001=30 limit projects {*} queues Q002 to F002=30 limit projects {*} queues Q003 to F003=30 limit projects {*} queues Q004 to F004=30 limit to F001=0,F002=0,F003=0,F004=0 } |
この 1 つの規則セットは、プロジェクト 1 つ当たりの各管理対象リソースの使用量を 30 に制限し、同時に適格のキュー内のジョブを制限します。この規則は問題なく機能しますが、多数のホストからなる大規模なクラスタでは、ジョブの割り当てに時間がかかる原因になります。
N1 Grid Engineスケジューラが仲介中にできるだけ多くのキューインスタンスを除外できるようにするには、この単一規則セットを 4 つの規則セットに分ける方が優れています。
{ name 30_for_each_project_in_Q001 description "not more than 30 per project of F001 in Q001" enabled TRUE limit queues !Q001 to F001=0 limit projects {*} queues Q001 to F001=30 } { name 30_for_each_project_in_Q002 description "not more than 30 per project of F002 in Q002" enabled TRUE limit queues !Q002 to F002=0 limit projects {*} queues Q002 to F002=30 } { name 30_for_each_project_in_Q003 description "not more than 30 per project of F003 in Q003" enabled TRUE limit queues !Q003 to F003=0 limit projects {*} queues Q003 to F003=30 } { name 30_for_each_project_in_Q004 description "not more than 30 per project of F004 in Q004" enabled TRUE limit queues !Q004 to F004=0 limit projects {*} queues Q004 to F004=30 } |
この 4 つの規則セットは、単一の規則セットと同じプロジェクト単位のリソース割り当て量制限を課します。しかし、4 つの規則セットは、不適切なキューインスタンスが最初にシールドされているため、ずっと効率的に処理できます。この場合、これらのシールドを 1 つのリソース割り当てセットにまとめることはできません。
前述の例の目的は、リソース 1 つ当たりクラスタキュー 1 つを推奨することではありません。実際は、その逆です。次に示すように、キューを少なくすることで、常にシールドをより少なく、より強力にできます。
{ name 30_for_each_project_in_Q001 description "not more than 30 per project of F001/F002 in Q001" enabled TRUE limit queues !Q001 to F001=0,F002=0 limit projects {*} queues Q001 to F001=30,F002=30 } { name 30_for_each_project_in_Q002 description "not more than 30 per project of F003/F004 in Q002" enabled TRUE limit queues !Q002 to F003=0,F004=0 limit projects {*} queues Q002 to F003=30,F004=30 } |
この例では、キューが Q001 〜 Q004 から Q001 〜 Q002 に整理されています。しかし、実際にはこうすることで、クラスタ全体の稼働率とスループットが向上します。