Sun N1 Grid Engine 6.1 管理ガイド

共有ベースポリシーの構成

共有ベーススケジューリングは、週、月、四半期などの累積期間中に、各ユーザーおよびプロジェクトに、システムリソースの割り当て済み配分を付与します。共有ベーススケジューリングは、共有ツリースケジューリングとも呼ばれます。このスケジューリングでは常に、次のスケジューリング間隔までの短い時間の間に、各ユーザーおよびプロジェクトに予定されているリソース配分が調整されます。共有ベーススケジューリングは、ユーザーやプロジェクト、またはその両方に対して定義します。

共有ベーススケジューリングにより、時間の経過とともに、共有ツリーで構成されているインスタンスに対し、定義済みの配分が保証されるようになります。システムがジョブを振り分ける場合には、過去のリソース消費量が予想より少なかった共有ツリーのブランチに関連付けられているジョブが優先されます。同時に、そのほかの共有ツリーのブランチに関連付けられている保留中のジョブに、未使用の配分比率が依然として使用可能であるため、完全なリソース使用率が保証されます。

各ユーザーまたはプロジェクトにできるかぎり目標に近い配分を付与することによって、ユーザーまたはプロジェクトのグループも目標の配分を得られるようになります。部署や部門は、そのようなグループの例です。累積期間中にリソースエンタイトルメントを持つすべてのエンティティーがリソースを得ようとした場合にのみ、すべてのエンティティーに対する公平な配分を達成できます。ユーザー、プロジェクト、またはグループが特定の期間中にジョブを発行しなかった場合、リソースはジョブの発行者の間で分配されます。

共有ベーススケジューリングはフィードバック方式です。任意のユーザー/ユーザーグループ、またはプロジェクト/プロジェクトグループにエンタイトルメントが与えられている対象のシステムの配分は、構成パラメータです。ジョブにエンタイトルメントが与えられている対象のシステムの配分は、次の要素に基づいて決定されます。

Grid Engine ソフトウェアは、ユーザーおよびプロジェクトがすでに受け取った使用率を追跡します。スケジューリング間隔のたびに、スケジューラはすべてのジョブのリソース配分を調整します。このようにして、すべてのユーザー、ユーザーグループ、プロジェクト、プロジェクトグループが、累積期間の間にできるかぎりシステムの公平な配分を受けられるようにします。言い替えれば、リソース使用率を許可したり、拒否したりすることによって、誰もがほぼ目標に近い配分を受けられるようにします。

半減期係数

半減期とは、システムがユーザーのリソース消費を「忘れる」速さです。システム管理者は、それが 6 か月前であれ 6 日前であれ、ユーザーの大きなリソース消費にペナルティーを科すかどうかを決定できます。また管理者は、どのようにしてペナルティーを科すかも決定できます。Grid Engine ソフトウェアは、共有ツリーのすべてのノードについてユーザーのリソース消費記録を維持します。

共有ベースポリシーを設定する際、システム管理者はこの記録に基づいて、ユーザーの過少利用または過大利用を判断する際、どのくらい過去にさかのぼるかを決定できます。この意味でのリソース利用量は、「スライドする時間枠」で消費されたすべてのコンピュータリソースの数学的な合計です。

この時間枠の長さは「半減期」係数で決まり、Grid Engine システムではそれは 内部減少関数です。この減少関数は、経時的に発生するリソース消費の影響を小さくします。半減期が短いほど、リソースの過大消費の影響は短期間に小さくなり、半減期が長いほど、リソースの過大消費の影響は徐々に小さくなります。

この半減期減少関数は指定された時間単位に基づきます。たとえば、1,000 単位のリソース消費に 7 日の半減期を適用した場合を考えます。この半減期減少係数を使用した場合、経時で次の使用「ペナルティー」による調整が行われます。

半減期に基づく減少は、ペナルティーの効果が無視できるまで、経時のユーザーのリソース消費の影響を小さくします。


注 –

優先チケットは別のポリシーシステムに属するため、ユーザーが受け取る優先チケットは、過去の使用ペナルティーの影響を受けません。減少関数は、共有ツリーポリシーのみの特性です。


補正係数

比較では、場合によって、実際の利用量が目標使用率を大きく下回っていることが明らかになることがあります。このような場合は、ユーザーのリソースの配分またはプロジェクトのリソースの配分を調整することで、ユーザーがシステムを優先使用できます。このような調整は、目標の配分に到達するという目的に基づいています。ただし、この優先使用は望ましくない場合があります。

補正係数を使用すると、管理者は、ユーザーまたはプロジェクトが短期にリソースを優先使用できる度合いを制限できます。

たとえば補正係数 2 は、ユーザーまたはプロジェクトの現在の配分を目標配分の 2 倍に制限します。ユーザーまたはプロジェクトが、累積期間中にシステムリソースの 20% を受けられるようになっていると仮定すると、ユーザーまたはプロジェクトが現在受けている量がそれより非常に低い場合、短期に受け取れる最大量は、40% だけになります。

共有ベースポリシーは、共有ツリーに従ってユーザーまたはプロジェクトの長期のリソースエンタイトルメントを定義します。共有ベースポリシーと補正係数を組み合わせることによって、エンタイトルメントの自動的な調整が行われます。

ユーザーまたはプロジェクトが、定義された目標のエンタイトルメントを下回っている上回っている場合、Grid Engine システムは補正を行います。システムは、ユーザーまたはプロジェクトの短期のエンタイトルメントを長期目標よりも上げるか、下げることによって補正をします。この補正は、共有ツリーアルゴリズムにより計算されます。

補正係数は、Grid Engine システムが割り当てる補正量を制御するもう 1 つの仕組みを提供します。この追加の補正係数 (CF) 計算は、次の条件が真である場合にのみ行われます。

上記の条件の一方または両方が真ではない場合は、共有ツリーアルゴリズムによって定義および実装されている補正が適用されます。

CF 値が小さいほど、その効果は大きくなります。値が 1 より大きい場合、Grid Engine システムの補正は限られた効果しかありません。補正の上限は、長期エンタイトルメントと CF の積で計算されます。上記で定義されているように、補正係数に基づく操作が行われるには、短期エンタイトルメントがこの上限を超えている必要があります。

CF が 1 の場合、Grid Engine システムはそのままの共有ツリーアルゴリズムと同じ方法で補正をします。このため、値 1 は値 0 と似た効果になります。唯一の違いは、実装の詳細です。CF = 1 の場合は、CF 計算が行われますが、影響はありません。CF = 0 の場合は、CF 計算が抑止されます。

値が 1 より小さい場合、Grid Engine システムは過剰補正を行います。ジョブは、共有ツリーアルゴリズムに基づいて得られるよりも大幅に多くの補正量を受けます。また、補正の実施条件が低い短期エンタイトルメント値で満たされるため、ジョブは早期にこの過剰補正を受けることになります。実施条件は「短期エンタイトルメント > 長期エンタイトルメント * CF」です。

階層形式の共有ツリー

共有ベースポリシーは、共有ツリーを使用して実現されます。共有ツリーは、移動累積期間中にすべてのユーザーおよびプロジェクトの間でどのようにシステムリソースを配分するかを規定します。累積期間の長さは、構成可能な減少定数で決まります。Grid Engine システムは、共有ツリー内の各親ノードのその累積上限への到達度に基づいて、ジョブの共有エンタイトルメントを決定します。ジョブの共有エンタイトルメントは、そのリーフノードの配分割り当てに基づいて決まり、リーフノードの配分割り当てはその親ノードの割り当てに依存します。リーフノードに関連付けられているすべてのジョブ間で、関連付けられている配分が分配されます。

ジョブの最終的なエンタイトルメントは、共有ツリーから得られるエンタイトルメントと、機能ポリシーなどから得られるほかのエンタイトルメントを組み合わせることによって決定されます。共有ツリーには、共有ベーススケジューリングに対するチケットの合計数が割り当てられます。この数によって、4 通りあるスケジューリングポリシーにおける共有ベーススケジューリングの重みが決まります。

共有ツリーは、インストール中に定義し、いつでも変更することができます。共有ツリーを編集すると、次のスケジューリング間隔で新しい共有割り当てが有効になります。

QMON を使用した共有ツリーポリシーの構成

QMON Policy Configuration」ダイアログボックス (図 5–1) で「Share Tree Policy」をクリックします。「Share Tree Policy」ダイアログボックスが表示されます。

「Node Attributes」

「Node Attributes」の下には、選択したノードの属性が表示されます。

ユーザーノードまたはプロジェクトノードを削除して、追加して戻しても、そのユーザーまたはプロジェクトの使用率は残ります。ノードは、共有ツリー内の同じ場所または別の場所に追加して戻すことができます。ノードを共有ツリーに追加して戻す前に、その使用率をゼロにすることができます。このためには、まず Grid Engine システムで構成したユーザーまたはプロジェクトからノードを削除します。続いて、その場所のユーザーまたはプロジェクトにノードを追加して戻します。

共有ツリーに存在しなかったにもかかわらず、ジョブを実行したユーザーまたはプロジェクトを、共有ツリーに追加すると、その使用率はゼロ以外の値になります。そのようなユーザーまたはプロジェクトをツリーに追加する際に、使用率をゼロにするには、Grid Engine システムで構成したユーザーまたはプロジェクトからそのユーザーまたはプロジェクトを削除します。続いて、そのユーザーまたはプロジェクトをツリーに追加します。

選択したノードの下に内部ノードを追加するには、「Add Node」をクリックします。空の「Node Info」ウィンドウが表示され、このウィンドウにノードの名前と配分の数を入力できます。任意のノード名または配分の数を入力できます。

選択したノードの下にリーフノードを追加するには、「Add Leaf」をクリックします。空の「Node Info」ウィンドウが表示され、このウィンドウにノードの名前と配分の数を入力できます。ノードの名前は、既存の Grid Engine ユーザー (QMON を使用したユーザーオブジェクトの構成」) またはプロジェクト (「プロジェクトの定義」) でなければなりません。

リーフノードを追加する際には、次の規則が適用されます。

選択したノードを編集するには、「Modify」をクリックします。「Node Info」ウィンドウが表示されます。ウィンドウにはモードの名前と、配分の数が表示されます。

選択したノードのカットまたはバッファーへのコピーを行うには、「Cut」または「Copy」をクリックします。直前にカットまたはコピーしたノードの内容を、選択したノードの下にペーストするには、「Paste」をクリックします。

選択したノードとそのすべての子孫を削除するには、「Delete」をクリックします。

共有ツリー階層全体をクリアするには、「Clear Usage」をクリックします。共有ベースポリシーを予算に合わせて、各予算編成時期に最初からやり直す必要がある場合に、階層をクリアします。「Clear Usage」機能は、N1 Grid Engine 6.1 ソフトウェアのテスト環境を設定したり、変更したりする際にも便利です。

QMON は、「Share Tree Policy」ダイアログボックスに表示される情報を定期的に更新します。ただちに表示を更新させるには、「Refresh」をクリックします。

行なったすべてのノードの変更を保存するには、「Apply」をクリックします。変更を保存することなくダイアログボックスを閉じるには、「Done」をクリックします。

共有ツリーでノード名を検索するには「Find」をクリックしてから検索文字列を入力します。検索文字列は大文字と小文字が区別され、その文字列から始まるノード名が表示されます。次に一致する検索文字列を検索するには、「Find Next」をクリックします。

オンラインヘルプシステムを開くには、「Help」をクリックします。

共有ツリーポリシーのパラメータ

「Share Tree Policy Parameters」を表示するには、「Node Attributes」の右側にある矢印をクリックします。

特殊ユーザー default について

多数のユーザーがいるサイトでは、特殊なユーザー default を使用して、共有ツリーを保守する作業量を減らすことができます。共有ツリーポリシーにおいては、ジョブの優先順位は、ジョブが共有ツリー内で対応するノードに基づいて決定されます。共有ツリー内で明示的に名前が付けられていないユーザーは、(存在する場合) default ノードに割り当てられます。

1 つの default ノードを指定することで、シンプルな共有ツリーの作成が可能になります。このような共有ツリーにより、ユーザーに基づく公正な分配が可能になります。

また、大部分のユーザーに同じ共有エンタイトルメントが割り当てられている場合でも、default ユーザーを使用できます。同じ共有エンタイトルメントは、均等配分スケジューリングとも呼ばれます。

default ユーザーは、default ノードの下ですべてのユーザーエントリを構成し、各ユーザーに同じ配分量を与えます。ジョブを発行する各ユーザーは、default ユーザーに対して構成されているのと同じ共有エンタイトルメントを受け取ります。特定のユーザーに対してこの機能を有効にするには、Grid Engine ユーザーのリストにこのユーザーを追加する必要があります。

共有ツリーでは、default ノードに割り当てられているすべてのユーザーに関して、「仮想」ノードが表示されます。仮想ノードを表示することで、default ノードに割り当てられているユーザーに関して、使用率と、公正な配分スケジューリングのパラメータを調べることができます。

また、「ハイブリッド」の共有ツリーに対して default ユーザーを使用することもできます。このツリーでは、ユーザーは共有ツリー内のプロジェクトの従属下に置かれます。default ユーザーは、プロジェクトノードのリーフノードになることができます。

ユーザーの短期エンタイトルメントは、ユーザーが消費するリソース量の違いにより異なります。ただし、ユーザーの長期エンタイトルメントは同じままになります。

一部のユーザーにだけ低い、または高いエンタイトルメントを割り当てて、ほかのすべてのユーザーには同じ長期エンタイトルメントを維持したい場合があります。このためには、特別なエンタイトルメントを持つのユーザー用の default ユーザーの隣に、個別のユーザーエントリを含む共有ツリーを構成します。

例 A では、プロジェクト A に発行するすべてのユーザーが同じ長期エンタイトルメントを得ます。プロジェクト B に発行するユーザーは、プロジェクト B の累積リソース消費量に関係します。プロジェクト B のユーザーのエンタイトルメントは管理されません。


例 5–2 例 A


例 A と例 B を比較してください。


例 5–3 例 B


例 B では、プロジェクト A に対する扱いは、例 A のときと同じです。しかし、ユーザー A および B を除き、プロジェクト B にジョブを発行するすべてのデフォルトユーザーは、同等の長期のリソースエンタイトルメントを得ます。デフォルトのユーザーは 20 の配分を持ちます。ユーザー A の配分は 10 で、受けるエンタイトルメントはデフォルトユーザーの半分です。ユーザー B の配分は 40 で、受けるエンタイトルメントはデフォルトユーザーの 2 倍です。

コマンド行からの共有ベースポリシーの構成


注 –

階層ツリーはグラフィカルな表示と編集に適しているため、QMON を使用して共有ツリーポリシーを構成します。ただし、共有ツリーの変更をシェルスクリプトで統合する必要がある場合は、qconf コマンドとそのオプションなどを使用できます。


コマンド行から共有ポリシーを構成するには、適切なオプションを使用して qconf コマンドを使用します。

Procedureプロジェクトに基づく共有ツリースケジューリングの作成方法

この設定の目的は、経時でのすべてのクラスタリソースの配分割り当てを、異なるプロジェクトに保証することです。

  1. スケジューラ構成で、共有ツリーチケットの数 (1000000 など) を指定します。

    QMON を使用したポリシーに基づくリソース管理の構成」、および sched_conf(5) のマニュアルページを参照してください。

  2. (オプション) スケジューリング関連のユーザーごとに、1 人のユーザーを追加します。

    QMON を使用したユーザーオブジェクトの構成」、 および user(5) のマニュアルページを参照してください。

  3. スケジューリング関連のプロジェクトごとに、1 つのプロジェクトを追加します。

    QMON を使用したプロジェクトの定義」、および project (5) のマニュアルページを参照してください。

  4. QMON を使用して、すべてのスケジューリング関連のプロジェクトの構造をノードとして反映する、共有ツリーを設定します。

    QMON を使用した共有ツリーポリシーの構成」を参照してください。

  5. プロジェクトに共有ツリーの配分を割り当てます。

    たとえば、同じプロジェクトのジョブ間で優先順のスケジューリングを行う、プロジェクトに基づく共有ツリースケジューリングを作成する場合、次のようなシンプルな構造になります。

    各ユーザーに等しい配分を設定する、プロジェクトに基づく共有ツリースケジューリングを作成する場合、次のようなシンプルな構造になります。

    各プロジェクト内に個別のユーザー配分がある、プロジェクトに基づく共有ツリースケジューリングを作成する場合、プロジェクトに対するリーフとしてユーザーを追加します。続いて個別の配分を割り当てます。次のようなシンプルな構造になります。

    個別の配分をごく少数のユーザーにのみ割り当てる場合、プロジェクトノードの下に、個別ユーザーと組み合わせて、ユーザー default を指定します。たとえば、上図のツリーを次のように要約することができます。