再生可能な 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 資源を配分していることです。
この概念は、次の方程式で表現されます。
new_SRM_priority は、システムの優先順位に対応付けされます。new_SRM_priority の優先順位が高いほど、システムの優先順位が低くなります。また、この逆も当てはまります。各減少期間では、CPU_usage は半分に削減され、最新の使用量によって増分されます。
さらに各ユーザーには、ログインなどに関するフラグのセットがあります。これは、一種のブール変数で、特定のシステム特権を有効または無効にするときに使用します。フラグはユーザーごとに設定したり、親の l ノードから継承したりできます。
ユーザーの使用量、制限値、およびフラグは、どのユーザーでも読み取れますが、これを変更できるのは、適切な管理特権を持ったユーザーだけです。
Solaris Resource Manager は、使用可能な CPU を無駄にすることはありません。ユーザーの割り当てが少なくても、競合するユーザーがいなければ、使用可能なすべての CPU がこのユーザーに与えられます。その結果、ユーザーは、パフォーマンスが通常よりも一定していないと感じることがあります。非常に少ない実効割当率を持つユーザーが競合なしに対話プロセスを実行すると、ジョブの実行が速いように見えます。しかし、それより高い実効割当率を持つユーザーが CPU 時間を要求すると、最初のユーザーよりも多くの CPU がこのユーザーに与えられるため、最初のジョブは速度が著しく低下します。しかし、Solaris Resource Manager は、ある程度の長期的な観点から、正当なユーザーが孤立化して作業が全くできない状態にならないようにします。最大の nice 値を持つプロセスを除き、Solaris Resource Manager がスケジュールするすべてのプロセスには、スケジューラによって CPU が規則的に割り当てられます。さらに、スケジューラのロジックにより、ログインしたばかりのユーザーに、計算上は「公平」であっても、既存ユーザーを犠牲にして過度の CPU が与えられることはありません。