キュー内のジョブおよびリソースの処理効率を最大限に高めるには、もっとも厳しい規則を規則セットの先頭に置きます。この仕様に従うと、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 に整理されています。しかし、実際にはこうすることで、クラスタ全体の稼働率とスループットが向上します。