ワークロード・マネージャー でのリソース制限の指定

相対的なリソース権を定義するための Share の使用に加え、WLM には個々のクラスに対してリソース制限を指定するための機能が用意されています。 リソース制限を使用すると、管理者がリソース割り当てをより細かく制御できるようになります。 これらの制限は、パーセントとして指定され、そのクラスが入っている Tier で使用可能なリソースを基準とした量を指定します。

パーセント・ベースの規定には、次の 3 つのタイプの制限があります。
最小
これは、クラスに対して使用可能にしなければならない最小リソース量です。 実際のクラス使用量がこの値を下回る場合は、 そのクラスにはそのリソースに対する最高優先順位のアクセス権が与えられます。 使用できる値は 0 から 100 で、0 がデフォルトです (未指定の場合)。
ソフト最大
これは、リソースに対する競合がある場合にクラスが使用できる最大リソース量です。 クラス使用量がこの値を超えた場合は、そのクラスには Tier 内での最低の優先順位が与えられます。 同じ Tier 内の他のクラスとの間にリソースに対する競合がない場合は、 そのクラスには必要なだけ使用することが許されます。 使用できる値は 1 から 100 で、100 がデフォルトです (未指定の場合)。
ハード最大
これは、競合がまったくない場合にクラスが使用できる、最大リソース量です。 クラスがこの制限に達した場合は、それ以降、 その使用量のパーセントがこの制限を下回るまで、 このクラスはそのリソースを使用できなくなります。 使用できる値は 1 から 100 で、100 がデフォルトです (未指定の場合)。

リソース制限値は、それぞれのクラスのスタンザ内のリソース・タイプ別に、 リソース制限値ファイルの中に指定されます。 これらの制限値は、最小値からソフト最大値の範囲として指定します。 この場合、ハイフンで区切り、ホワイト・スペースは無視します。 ハード最大値は、ソフト最大値の後に指定され、セミコロン (;) で区切られています。それぞれの限界値の後にパーセント記号 (%) が続きます。

以下に、ルール・ファイルの使用例を示してあります。

  • グループ acct3 のユーザー joe が /bin/vi を実行すると、プロセスはスーパークラス acctg に入れられます。
  • グループ dev のユーザー sue が /bin/emacs を実行すると、そのプロセスはスーパークラス devlt (グループ ID が一致します) に入れられますが、editors サブクラスには分類されません。ユーザー sue はそのクラスから除外されているからです。 このプロセスは devlt に入れられます。 デフォルト。
  • データベース管理者が、 oracle というユーザー ID と dbmというグループ ID を使用して /usr/sbin/oracle を開始すると、データベース DB1にサービスを提供するために、プロセスはデフォルトのスーパークラスに分類されます。 そのプロセスは、そのタグを _DB1 に設定してはじめて、スーパークラス db1 に割り当てられます。

制限値は、すべてのリソース・タイプについて、クラス別に limits ファイルのスタンザ内に指定します。 次に例を示します。

shares
classname:
   CPU     =   0%-50%;80%
   memory  =   10%-30%;50%

この例では、ディスク入出力に制限は設定されていません。 システム・デフォルトを使用して、以下のものに変換されます。

diskIO   =   0%-100%;100%

上記の例ではすべて、記載されているスーパークラスおよびサブクラスでは継承属性は yes に設定されていないと仮定しています。 そうでない場合、新規のプロセスは単にその親からスーパークラスまたはサブクラスを継承します。

WLM では、リソース制限値に関して次の制約だけが設けられます。

  • 下限値は、ソフト最大値より小か等しくなければなりません。
  • ソフト最大値は、ハード最大値より小か等しくなければなりません。
  • Tier 内のすべてのスーパークラスの最小の合計は 100 を超えてはなりません。
  • Tier 内のある特定のスーパークラスのすべてのサブクラスの最小の合計は 100 を超えてはなりません。

ハード・メモリー制限を設定されたクラスがその制限値に達し、さらにページを要求するときは、VMM ページ置換アルゴリズム (LRU) が開始され、制限値に達したクラスからページを「スチールする」ので、 そのページ数は、新しいページが提供される前にハード最大値よりも少なくなります。 これは正しい動作ですが、多くの空きページが使用可能な状態であっても行われることがある余分なページング・アクティビティーによって、 システムの一般パフォーマンスが影響を受けます。 どのクラスに対しても、ハード・メモリーの最大値を強制する前に、他のクラスのメモリー最小値を使用することをお勧めします。

最小値を下回っているクラスは Tier 内での最高の優先順位を持つため、最小値の合計は、同じ Tier 内のそれ以外のクラスのリソース所要量に基づいて、妥当なレベルに保つ必要があります。

Tier 内の下限値の合計は 100 以下でなければならないという制約は、最高優先順位の Tier 内のクラスは、その下限値以内のリソースをいつでも獲得できることを意味します。 WLM では、クラスが実際に下限値に達するとは限りません。 これは、クラス内のプロセスがそれぞれのリソースを使用する方法、ならびに、そのとき有効なその他の制限に応じて異なります。 例えば、クラスは、十分なメモリーを取得することができないために、その最小の CPU 使用権を得られない場合があります。

物理メモリーで、メモリーの制限を設定すると、クラス内のプロセスのメモリー・ページに対して何らかの保護が設けられます (少なくとも、最高優先順位の Tier 内のクラスの場合は)。 アクティブなすべてのクラスがそれぞれの最小値を下回っていて、しかもそのクラスのうちの 1 つがさらにページを要求しない限り、その最小値を下回っているクラスからページをスチールしてはなりません。 最高位の Tier 内のクラスがその最小値を下回っているときに、 クラスからページをスチールしてはなりません。 したがって、対話式ジョブのクラスにメモリーの最小値を設定すれば、連続したアクティブ化の間にページがすべてスチールされることがないようにする (メモリーが不足している場合でも) ことができ、それによって応答時間が改善されます。

重要: ハード最大限度を使用すると、適切に使用しない場合、システムまたはアプリケーションのパフォーマンスに重大な影響を与える可能性があります。 ハード制限を課すと、結果的にシステム・リソースが使用されない場合があるため、 ほとんどの場合ではソフト最大値の方がより適切です。 ハード最大値の 1 つの用途として、上位 Tier の使用量を制限してリソースの一部を下位の Tier が使用できるようにすることが考えられますが、 リソースを必要とするアプリケーションを上位の Tier に入れる方がよりよい解決策です。

制限合計をしきい値ファイルで指定できます。このファイルでの値と単位の要約を以下の表に示します。

表 1. ワークロード・マネージャーのリソース制限
リソース 許可される単位 デフォルトの単位 最大値 最小値
totalCPU s、m、h、d、w s 230 - 1s 10 s
totalDiskIO KB、MB、TB、PB、 EB KB (263 - 1) * 512/1024 KB 1 MB
totalConnectTime s、m、h、d、w s 263 - 1 s 5 m
totalProcesses 263 - 1 2
totalThreads 263 - 1 2
totalLogins 263 - 1 1
注: 単位指定子には大/小文字の区別はありません。 s = 秒、m = 分、h = 時間、d = 日、w = 週、KB = キロバイト、MK = メガバイト、... etc.
制限スタンザの例は、以下のとおりです。
BadUserClass:
     totalCPU = 1m
     totalConnectTime = 1h
制限合計は、上の表の任意の値を使用して指定できますが、次の制限があります。
  • 指定する場合、totalThreads の値は最小でも totalProcesses の値でなければならない。
  • totalThreads を指定して totalProcesses を指定しないと、totalProcesses に対する制限は totalThreads の値に設定されます。

制限合計は、スーパークラス・レベルおよびサブクラス・レベルで指定できます。 制限の検査時には、サブクラスの制限の方がスーパークラスの制限より前に検査されます。 この 2 つの制限が両方とも指定されている場合は、どちらか値の小さい方が適用されます。 指定されているサブクラスの制限が、関連付けられているスーパークラスの制限より大きい場合は、構成のロード時に警告が発行されますが、ロードは行われます。 このことは、クラス制限合計に関して重大な意味を持ちます。なぜなら、この制限は 絶対値である (スーパークラスを基準としたものではない) ため、あるスーパークラスで使用可能なリソースを 1 つのサブクラスがすべて使用してしまう可能性があるからです。 指定されないと、すべての制限合計のデフォルト値は「-」(制限なしの意味) です。 デフォルトでは、 クラスおよびプロセスのアカウンティングと規定は、WLM の実行中は使用可能にされます。 wlmcntrl コマンドの -T [class|proc] オプションを使用して、合計アカウンティングと規制を無効にすることができます。