Solaris Resource Manager のスケジューラに関連する属性が l ノードごとに 4 つあります。cpu.shares、cpu.myshares、cpu.usage、および cpu.accrue です。liminfo(1SRM) を実行すると、これらの属性が他の情報とともに表示されます。
Solaris Resource Manager のスケジューリングは、SHR スケジューリングクラスによって行われます。SHR スケジューリングクラスには、nice(1)、priocntl(1)、renice(1)、dispadmin(1M) の各コマンドのサポートも含まれます。システムコールのレベルでは、SHR は TS スケジューリングクラスと互換性があります。
ユーザーの cpu.shares 属性は、親と動作中のピアの間で CPU の使用権利を配分するときに使用します。ユーザーの cpu.myshares 属性は、そのユーザーに動作中の子ユーザーがあるときだけ意味があります。この属性は、これらの子ユーザーとの関係において CPU 使用権利の割合を決めるときに使用します。
たとえば、親 P に子 A と B があり、グループ P の中で P、A、B がそれぞれ割当を 1 ずつ持っているとします。つまり、A と B の cpu.shares に 1 を、P の cpu.myshares に 1 をそれぞれ設定します。この場合、P、A、B は、それぞれ CPU の使用権利としてグループの合計権利分の 3 分の 1 を持ちます。
したがって、ユーザーの実際の CPU の使用権利は、親の相対的な権利によって変わります。すなわち、親の権利は、親のピアの cpu.shares と親の親の cpu.myshares に対する親の cpu.shares の相対的な値によって変わります。このような関係は、スケジューリングツリーの上部方向に対しても同じです。
システム管理上の理由により、root l ノードに接続されたプロセスは shares 属性の影響を受けません。root l ノードに接続されたプロセスは、要求する CPU 資源をほとんど得ることができます。
CPU をかなり占有するプロセスを root l ノードに接続すると他のプロセスに顕著な影響が出るため避けてください。そのために、次の予防措置をとる必要があります。
中央のシステム管理者アカウントに、スーパーユーザーアカウントとは別の独自のユーザーID を設定します。管理目的以外の目的でログインする時には、このアカウントを使用します。管理機能を行うためにスーパーユーザーのユーザー ID が必要な場合には、中央のシステム管理者は、自分の l ノードに接続したまま su(1) コマンドを使ってユーザー ID を変更できます。
init.d(4) スクリプトで srmuser(1SRM) コマンドを使えば、デーモンプロセスを root 以外の l ノードに接続できます。起動スクリプトで起動したプロセスは、デフォルトで、実効ユーザー ID として root を持ち、root l ノードに接続されます。このユーザーコマンドでは、実効ユーザー ID が root のままデーモンを独自の l ノードに接続できます。このため、デーモンのどれかが CPU をかなり占有しても問題ありません。
スケジューリングツリーの必ずしもすべてのグループヘッダーが、プロセスを実行する実際のユーザーである必要はありません。このような場合には、CPU の割当数を与える必要がないので、この l ノードの cpu.myshares 属性をゼロにします。このようなグループヘッダーの CPU.accrue 属性にも、グループのすべてのメンバーに対する負担が加算されます。
動作中の l ノードの CPU 割当率は cpu.shares と cpu.myshares 属性で決まります。非動作中のユーザーの割当数はこの割合に影響しません。動作中のユーザーが 1 人だけの場合は、そのユーザーに使用可能な CPU 資源のすべてが割り当てられます。同じ割当数を持つ動作中のユーザーが同じグループに 2 人いる場合は、それぞれに 50 パーセントの割当率が与えられます。割当率の詳しい計算方法については、割当率の計算を参照してください。
l ノードに接続されているプロセスが CPU チックを負担するたびに、cpu.usage 属性が増加します。使用量属性の値は、Solaris Resource Manager の大域パラメータである使用量減少に指定された速度で指数的に減少します。使用量減少の速度 (半減期を秒数で指定したもの) は、srmadm(1MSRM) コマンドで設定します。
現在のスケジューリングクラスに関係なく、すべてのプロセスには l ノードがありますが、SHR スケジューリングクラス以外のプロセスには負担させません。
accrued usage 属性は usage 属性の場合と同じ量ずつ増加しますが、減少しません。したがって、accrued usage 属性は、この属性が最後にリセットされてから、この l ノードとそのメンバーに接続されたすべてのプロセスの使用量の合計を表わします。
l ノードの現在の実効割当率は、その l ノードに割り当てられた割当率と cpu.usage 属性で決まります。Solaris Resource Manager のスケジューラは、l ノードに接続されているすべてのプロセスの優先順位を調整して、作業速度がその l ノードの実効割当率に比例するようにします。あるいは、この l ノードに接続されている実行可能プロセスの数に反比例するようにします。
l ノードに接続された各プロセスには、Solaris Resource Manager 固有の内部データがオペレーティングシステムのカーネルによって維持されます。このような値のうち、スケジューリングのために最も重要なものは sharepri 値です。どの時点でも、sharepri 値が最も小さいプロセスが、CPU を使用する最も高い優先順位を獲得します。