ワークロード・マネージャー でのリソース制限の指定
相対的なリソース権を定義するための Share の使用に加え、WLM には個々のクラスに対してリソース制限を指定するための機能が用意されています。 リソース制限を使用すると、管理者がリソース割り当てをより細かく制御できるようになります。 これらの制限は、パーセントとして指定され、そのクラスが入っている Tier で使用可能なリソースを基準とした量を指定します。
- 最小
- これは、クラスに対して使用可能にしなければならない最小リソース量です。 実際のクラス使用量がこの値を下回る場合は、 そのクラスにはそのリソースに対する最高優先順位のアクセス権が与えられます。 使用できる値は 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 内のクラスがその最小値を下回っているときに、 クラスからページをスチールしてはなりません。 したがって、対話式ジョブのクラスにメモリーの最小値を設定すれば、連続したアクティブ化の間にページがすべてスチールされることがないようにする (メモリーが不足している場合でも) ことができ、それによって応答時間が改善されます。
制限合計をしきい値ファイルで指定できます。このファイルでの値と単位の要約を以下の表に示します。
| リソース | 許可される単位 | デフォルトの単位 | 最大値 | 最小値 |
|---|---|---|---|---|
| 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 |
BadUserClass:
totalCPU = 1m
totalConnectTime = 1h- 指定する場合、totalThreads の値は最小でも totalProcesses の値でなければならない。
- totalThreads を指定して totalProcesses を指定しないと、totalProcesses に対する制限は totalThreads の値に設定されます。
制限合計は、スーパークラス・レベルおよびサブクラス・レベルで指定できます。 制限の検査時には、サブクラスの制限の方がスーパークラスの制限より前に検査されます。 この 2 つの制限が両方とも指定されている場合は、どちらか値の小さい方が適用されます。 指定されているサブクラスの制限が、関連付けられているスーパークラスの制限より大きい場合は、構成のロード時に警告が発行されますが、ロードは行われます。 このことは、クラス制限合計に関して重大な意味を持ちます。なぜなら、この制限は 絶対値である (スーパークラスを基準としたものではない) ため、あるスーパークラスで使用可能なリソースを 1 つのサブクラスがすべて使用してしまう可能性があるからです。 指定されないと、すべての制限合計のデフォルト値は「-」(制限なしの意味) です。 デフォルトでは、 クラスおよびプロセスのアカウンティングと規定は、WLM の実行中は使用可能にされます。 wlmcntrl コマンドの -T [class|proc] オプションを使用して、合計アカウンティングと規制を無効にすることができます。