Solaris Resource Manager 1.1 のシステム管理

資源の制御

Solaris Resource Manager ソフトウェアでは、システム資源として CPU 使用量 (プロセッサ使用率)、仮想メモリー、プロセス数、ユーザーまたはスケジューリンググループの現在のログイン回数、および端末の接続時間を制御します。

表 2-1 Solaris Resource Manager の機能

システム 

資源 

割り当て  

ポリシー 

管理 

測定 

使用量データ 

CPU 使用量 

有 

ユーザー ID 単位 

有 

有 

ユーザー ID 単位 

有 

仮想メモリー 

有 

(ユーザー単位、プロセス単位) 

有 

(ユーザー単位、プロセス単位) 

有 

(ユーザー単位、プロセス単位) 

有 

プロセス数 

有 

有 

有 

有 

ユーザー/スケジューリンググループのログイン 

有 

有 

有 

有 

接続時間 

有 

有 

有 

有 

Solaris Resource Manager は各資源の使用量をユーザーごとに追跡管理します。ユーザーには、CPU の使用量以外のすべての資源の使用量に対し、強い制限値を割り当てることができます。使用量がこの強い制限値に達すると、ユーザーはその資源を使用できなくなります。強い制限値は、カーネルか、それぞれの資源を管理するソフトウェアによって直接適用されます。

制限値としてゼロを指定すると、制限がないことを意味します。ルート l ノードのすべての制限値属性はゼロに設定してください。

通常、すべてのシステム資源は、「固定 (または再生不能) 資源」と「再生可能資源」に分けられます。Solaris Resource Manager は、システム資源をその種類に応じて管理します。

固定資源

固定または再生不能資源は、仮想メモリー、プロセス数、ユーザーまたはスケジューリンググループの現在のログイン回数、接続時間などの有限の資源です。固定資源は使用した (割り当てた) 後、解放 (割り当て解除) できますが、所有者がこの割り当てを解除するまでは、他のエンティティがこの資源を使用することはできません。Solaris Resource Manager は、使用量と制限値のモデルを使って、使用される固定資源の量を制御します。「使用量」は、使用されている現在の資源として定義され、「制限値」は Solaris Resource Manager で可能な使用量の最大値です。

再生可能資源

再生可能資源は、CPU 使用時間などの連続している資源です。再生可能資源は消費するだけで、消費したものは再利用できません。再生可能資源を使用できるのはその時点に限られています。したがって、その時点で使用しなければ、それを使用することはできません。これに似たものに太陽光があります。ある時点では太陽から一定量の光しか到達しませんが、この光は次の数百万年に渡って到達します。 そのため、再生可能資源は、無駄にしないために明示的に割り当て直さなくても、他のユーザーに割り当てられます。

Solaris Resource Manager は、使用量、制限値、および減少のモデルを使って、ユーザーが再生資源を使用する量を制限します。使用量は使用された資源の合計として定義され、グループ内の他のユーザーと比較した使用量の割合で設定されます。「減少」とは、過去の使用量を管理から除くために使用する期間を示すものです。次の資源量 (たとえば、クロックチック) は、減少した合計使用量の値が、与えられた割当数に比べて最も少ない動作中の l ノードに割り当てられます。減少使用量の値は、過去の合計使用量から、半減期モデルによって決まる過去の使用量を引いたものです。

CPU 資源の管理

再生可能な CPU 資源の割り当ては、「Solaris Resource Manager SHR スケジューラ」と呼ばれるフェアシェアスケジューラによって制御されます。

スケジューラの処理方式

各 l ノードには、いくつかの CPU 割当数が与えられます。l ノードに対応するプロセスには、動作中の l ノードの割当数の合計に対する比率として CPU 資源が割り当てられます。(動作中とは、その l ノードに動作中のプロセスが接続されていることを意味します。) 資源を割り当てる対象は動作中の l ノードだけです。動作中のプロセスが動作し、CPU 時間を必要とするのは、これらの l ノードだけです。

プロセスが CPU チックを使用すると、この l ノードの CPU 使用量属性が増えます。スケジューラは、すべてのプロセスの優先順位を調整して、相対的な CPU 使用率が、すべての動作中の l ノードの相対的な CPU 割当率にそれぞれのレベルで収束するようにします。このようにして、ユーザーは、他のユーザーの動作と関係なく、長期的には少なくとも CPU サービスの権利に相当する量を受け取ります。

スケジューラは階層的です。つまり、スケジューラは、グループが、メンバーの動作とは関係なく、グループの権利に相当する量を受け取るようにします。Solaris Resource Manager SHR スケジューラは長期的なスケジューラです。Solaris Resource Manager は、すべてのユーザーとアプリケーションがスケジューラ期間の間に公平な量を得られるようにします。つまり、CPU 使用量の少ないユーザーが CPU の要求を開始すると、このユーザーには、CPU 使用量の多いユーザーよりも多くの資源が与えられます。これは、ユーザーの相対的な使用量が相対的に「公平」な割当数になるまで続きます。権利に対し現在使用量が多ければ、将来使用できる量はそれだけ少なくなります。

さらに、Solaris Resource Manager には、過去の使用を考慮に入れないための減少期間があります。これはシステム管理者が設定します。減少モデルには半減期減少モデルが使用され、半減期の間に資源の 50 パーセントが減少します。そのため、使用量が常に一定しているユーザーが短期間に処理を大量に行うユーザーの犠牲になることはありません。半減期減少期間は、半減する期間を設定し、スケジューラの応答性に影響を与えます。デフォルト値は 120 秒です。長い半減期は、長いバッチジョブのような均等使用に適し、短い半減期は、ユーザーとの対話処理に適しています。値が小さいと、応答がシステム全体に渡り均一化する傾向になりますが、システム全体の資源割り当ての計算や保守の正確さが多少失われます。管理者の設定値とは別に、スケジューラは、極端な状況であっても資源の枯渇が起こるのを防ぎ、適正な動作ができるようにします。

スケジューラの長所

Solaris Resource Manager SHR スケジューラが Solaris の標準スケジューラよりも優れている主な点は、SHR スケジューラが個別のプロセスの代わりにユーザーやアプリケーションをスケジュールするということです。l ノードに関連付けられたすべてのプロセスには一連の制限値が適用されます。1 人のユーザーが 1 つの動作中のプロセスを実行するような単純な場合には、対応する l ノードの制限値が各プロセスの制限値です。グループのメンバーがそれぞれ複数のプロセスを実行するときのように、l ノードに複数のプロセスが接続されている場合には、すべてのプロセスに全体として l ノードの制限値が適用されます。したがって、同時にいくつのプロセスを実行していても、ユーザーやアプリケーションが、それぞれに持つ権利の割当率よりも多くの CPU を使用することはできません。権利を割当数として割り当てる方法は単純でわかりやすく、ユーザーの割当数を変更した場合の効果も予測が容易です。

SHR スケジューラが優れているもう 1 つの点は、個々のスレッド (技術的には Solaris では、スケジュールされるエンティティは軽量プロセス (LWP) です) のスケジュールを管理すると同時に、ユーザーに CPU 資源を配分していることです。

この概念は、次の方程式で表現されます。

Graphic

new_SRM_priority は、システムの優先順位に対応付けされます。new_SRM_priority の優先順位が高いほど、システムの優先順位が低くなります。また、この逆も当てはまります。各減少期間では、CPU_usage は半分に削減され、最新の使用量によって増分されます。

さらに各ユーザーには、ログインなどに関するフラグのセットがあります。これは、一種のブール変数で、特定のシステム特権を有効または無効にするときに使用します。フラグはユーザーごとに設定したり、親の l ノードから継承したりできます。

ユーザーの使用量、制限値、およびフラグは、どのユーザーでも読み取れますが、これを変更できるのは、適切な管理特権を持ったユーザーだけです。

CPU の浪費の軽減

Solaris Resource Manager は、使用可能な CPU を無駄にすることはありません。ユーザーの割り当てが少なくても、競合するユーザーがいなければ、使用可能なすべての CPU がこのユーザーに与えられます。その結果、ユーザーは、パフォーマンスが通常よりも一定していないと感じることがあります。非常に少ない実効割当率を持つユーザーが競合なしに対話プロセスを実行すると、ジョブの実行が速いように見えます。しかし、それより高い実効割当率を持つユーザーが CPU 時間を要求すると、最初のユーザーよりも多くの CPU がこのユーザーに与えられるため、最初のジョブは速度が著しく低下します。しかし、Solaris Resource Manager は、ある程度の長期的な観点から、正当なユーザーが孤立化して作業が全くできない状態にならないようにします。最大の nice 値を持つプロセスを除き、Solaris Resource Manager がスケジュールするすべてのプロセスには、スケジューラによって CPU が規則的に割り当てられます。さらに、スケジューラのロジックにより、ログインしたばかりのユーザーに、計算上は「公平」であっても、既存ユーザーを犠牲にして過度の CPU が与えられることはありません。

仮想メモリー (ユーザー別制限値とプロセス別の制限値)

仮想メモリーは固定資源モデルで管理されます。仮想メモリーの制限値は、ある l ノードに接続されているすべてのプロセスの合計メモリーサイズに適用されます。さらに、プロセス別の仮想メモリー制限値が、プロセスの仮想アドレス空間サイズの合計に適用されます。この合計には、すべてのコード、データ、スタック、ファイルマッピング、および共有ライブラリが含まれます。これらの制限値は両方とも階層的に使用されます。仮想メモリーの制限値は、仮想メモリーの枯渇を防止するのに有効です。たとえば、Solaris Resource Manager は、メモリーをリークしているアプリケーションが、すべてのユーザーを犠牲にして不当な量の仮想メモリーを使用するのを防ぎます。そのような場合には、そのプロセス自身の仮想メモリーがなくなるか、場合によってはその資源グループの他のプロセスのメモリーがなくなります。

プロセスの数

同時に実行できるプロセスの数は、階層的な制限値を持つ固定資源モデルで制御されます。

端末とログイン接続時間の制限値

システム管理者とグループヘッダーは、端末のログイン特権、ログイン回数、および接続時間の制限値を設定できます。これらは、Solaris Resource Manager によって階層的に使用されます。ユーザーの接続時間が制限値に近づくと、警告メッセージがユーザーの端末に送信されます。接続時間が制限値に達すると、通知が送信され、ユーザーは短い猶予時間の後にログアウトされます。

Solaris Resource Manager は過去の接続時間の使用量を徐々に減少させるため、最新の使用量だけが考慮されます。減少の早さを制御する半減期パラメータはシステム管理者が設定します。長い半減期は均等使用に適し、短い半減期はユーザーとの対話処理に適しています。