Solaris Resource Manager は、中央のシステム管理者 (たとえば、root ユーザー) にとって、構成を行う上で非常に柔軟性があります。この章では、構成について次の項目を説明します。
カーネルの起動パラメータ。これはカーネルを最初に起動するときに使用します (「カーネルのブートパラメータ」を参照)。
srmadm(1MSRAM) コマンドで指定する Solaris Resource Manager の大域パラメータ (「srmadm による Solaris Resource Manager の大域パラメータ」を参照)。
limdaemon(1MSRM) プログラムに指定するパラメータ (「limdaemon の使い方」を参照)。
PAM サブシステムとアカウントおよびセッション管理 (「PAM サブシステム」を参照)。
中央のシステム管理者がカーネルをブートするときに設定できるパラメータが Solaris Resource Manager にはいくつかあります。Solaris システムでは、起動時に /etc/system ファイルを読み込み、これを使ってカーネルモジュールを構成します (詳細は、system(4) を参照)。SHR モジュールに設定できるパラメータ (すべて 32 ビットの整数) には、次のものがあります。これによって、Solaris Resource Manager のデフォルトの動作を無効にできます。
カーネルにキャッシュする l ノードの数。Solaris システムでは、カーネルの l ノードごとに約 3K バイトが必要です。値ゼロ (デフォルト) を指定すると、カーネルが値を決めます。その場合には、次の方法が使用されます。
(nproc / SRMProcsPerUid ) + SRMLnodesExtra |
ここで、nproc はシステムで同時に動作できるプロセスの最大数です。計算の結果が 6 より小さいと、最小値として 6 が使われます。さらに、計算の結果が SRMMemoryMax に指定されている最大値より大きいと、この最大値が使用されます。
各ユーザーによって使用されることが予想される平均のプロセス数。デフォルトは 4 です。
メモリー内の l ノードの配列のサイズを決めるための方法で使用する偏り。デフォルトは 20 です。
カーネルの中でユーザー ID の値を l ノードにマップするときに使用するハッシュテーブルのエントリ数。Solaris システムでは、エントリの長さは 4 バイトです。デフォルトはゼロです。この場合には、l ノードの数と同じ数が使用されます。
この値の逆数が、Solaris Resource Manager の l ノードとハッシュテーブルの合計に使用する実メモリーの最大パーセントを指定する値です。デフォルトは 20 です。この場合には、Solaris Resource Manager のデータ構造に対し、実メモリーの最大 5 パーセントが使用されます。
1 つの l ノードに対し「memory exceeded (メモリーを超過しました)」の警告を通知する最小間隔を秒数で示したもの。デフォルト値は 4 です。
たとえば、/etc/system ファイルに次の行があるとします。
set srmlim:SRMMemWarnFreq=10 |
この場合、メモリー超過のメッセージが 1 人のユーザーに対し 10 秒に 2 回以上出されることはありません。
さらに、Solaris Resource Manager のパラメータではありませんが、動作に影響するパラメータがあります。
スケジューリングクラス名です。init(1M) プロセスはこのクラスで起動されます。Solaris Resource Manager の場合、この値は文字列 "SHR" (二重引用符を含む) にします。Solaris のデフォルト値は "TS" です。Solaris Resource Manager を使って CPU 資源を制御する場合は、次の行で /etc/system ファイルに指定し、デフォルト値より優先させます。
set initclass="SHR" |
ロードするスケジューリングクラスモジュール名です。ただし、これがデフォルトのスケジューリングクラスとして使用されるとは限りません。Solaris Resource Manager で CPU 資源以外のものだけを制御する場合は、次の行を /etc/system ファイルに指定します。
set extraclass="SHR" |
Solaris Resource Manager をロードしていないシステムをブートするには、/etc/system ファイルの代わりに /etc/system.noshrload を使用します。この処理については、「Solaris Resource Manager を使用しない場合の起動」を参照してください。
通常のシステムブートで、システムがシングルユーザーモードからマルチユーザーモードに変わると、Solaris Resource Manager の初期化スクリプトが実行され (付録 A 「Solaris Resource Manager スクリプトの例」 を参照)、Solaris Resource Manager のパラメータが設定されます。このスクリプトの詳細は、第 4 章「ブート手順」で説明します。
初期化スクリプト自体 (/etc/init.d/init.srm) を変更する場合は、元のコピーと変更後のコピーを別々に保存する必要があります。Solaris Resource Manager の更新を適用する場合、現在の初期化スクリプトが保存されるとは限りません。
管理者は、srmadm コマンドを使って Solaris Resource Manager 大域パラメータの設定、変更、および表示を行うことができます。各パラメータの詳細は、srmadm(1MSRM) のマニュアルページを参照してください。
さまざまなパラメータを設定する場合には、srmadm コマンドを何回でも呼び出すことができます。1 回の呼び出しですべての設定を指定する必要はありません。したがって、srmadm(1MSRM) を使用すれば、動作している Solaris Resource Manager システムの操作パラメータを動作中に変更できます。ただし、この場合には、注意が必要です。
次の srmadm のオプションは、管理者にとって特に重要です。このオプションでは、Solaris Resource Manager の主要機能を有効または無効にできます。
fileopen[={y|n}]
デフォルトデータベースは /var/srm/srmDB です。これは -f オプションで上書きできます。Solaris Resource Manager のデータベースファイルを操作中に閉じるのは、緊急のときだけにしてください。この場合、いくつかの望ましくない結果が生じます。すべてのプロセスが代理の root l ノードで動作を続けるため、プロセスは通常よりも多くの特権を与えられることがあります。SHR スケジューラが無効になり、Solaris Resource Manager の制限値の適用が停止されます。無効にした場合、Solaris Resource Manager のリミットデータベースは開かれず、キャッシュには代理の root l ノードだけが含まれ、そこにすべてのプロセスが接続されています。
share[={y|n}]
有効にすると、Solaris Resource Manager の SHR スケジューラが使用され、Solaris Resource Manager の動的な使用と減少のアルゴリズムに従って CPU スケジューリングが行われます。このモードを設定するためには、fileopen モードが有効になっていなければなりません。これを無効にすると、SHR スケジューラの使用量計算が停止され、プロセスは、固定の同一優先順位を使った「ラウンドロビン方式」でスケジューリングされます。
limits[={y|n}]
有効にすると、Solaris Resource Manager は仮想メモリーとプロセスの制限値を適用します。このモードを設定するためには、fileopen モードが有効になっていなければなりません。無効にすると、Solaris Resource Manager は最新の使用量属性を保持しますが、制限値は適用しません。
adjgroups[={y|n}]
有効にすると、Solaris Resource Manager の SHR スケジューラで大域グループの実効割当率が調整されます。ほとんどの状況では、できるだけ有効にしてください。実行間隔ごとに、すべてのリミットエントリの使用量が再計算されます。adjgroups スケジューリングモードを有効にすると、使用量の計算がさらに次のように行われます。スケジューラはスケジューリングツリーを調べ、各グループが新しく受け取った実効割当率をその権利分と比較します。権利分より少ない割当率を割り当てられたグループには、次の実行間隔でより多くの実効割当率を受け取れるようにします。この結果、そのグループは、メンバーのアクションとは関係なしに、可能な限り権利に相当する CPU サービスを受け取ります。
limshare[={y|n}]
有効にすると、SHR スケジューラは、優先順位上限機能を適用してすべてのユーザーの実効割当率を制限し、使用量が極端に少ないユーザーが短い間 CPU のほとんどすべてを獲得してしまうのを防ぎます。できるだけ有効にしてください。
ユーザーの CPU サービス率は、おおよそユーザーの使用量に反比例します。ユーザーが長い間動作していなければ、使用量の減少はほとんどありません。このユーザーがログインすると、次の実行間隔では、このユーザーのプロセスの優先順位が、CPU を占有するほど高くなることがあります。
limshare スケジューリングフラグを有効にすると、スケジューラは、次の実行間隔までに l ノードが受け取る実効割当率を推定します。この結果がユーザーに割り当てられた権利分よりもある係数 (maxushare を参照) だけ多いと、ユーザーの使用量は再調整されます。
srmadm には、管理者にとって便利なパラメータが 2 つあります。
-v パラメータでは、現在のすべてのパラメータ設定値を、書式化したレポートとして標準出力に出力します。-V パラメータ (-V1、-V2、-V3) にさらに数値を指定すると、より詳細なレポートとなります。srmadm に引数を指定しないと、-V オプションに 1 を指定したのと同じことになります。
-d パラメータでは、現在のカーネルの設定値を読み込まずに、デフォルト値を使って Solaris Resource Manager のシステム構造を初期化します。デフォルト値は主にスケジューリング動作を制御するもので、srmadm に組み込まれています。デフォルト値は、Solaris Resource Manager をカスタマイズするベースとして適しています。カーネルは同じ値があらかじめ設定された状態で始まります。
一般的な srmadm コマンドの例を次に示します。
Solaris Resource Manager を有効にして SHR スケジューラと資源制限値を有効にするには、次のようにします。
# srmadm set -f /var/srm/srmDB fileopen=y:share=y:limits=y |
CPU 使用量の減少速度の半減期を 5 分にするには、次のようにします。
# srmadm set usagedecay=300s |
現在のフラグの設定値と負担を表示するには、次のようにします。
% srmadm |
すべてのデフォルトの設定値を表示するには、次のようにします。
% srmadm show -dv |
srmadm(1MSRM) コマンドで fileopen フラグをクリアすることによって Solaris Resource Manager を無効にできます。すべてのプロセスが代理の root l ノードに移され、キャッシュにある変更された l ノードがディスクにフラッシュされ、l ノードデータベースが閉じられます。これによって、share フラグと limits フラグが自動的に無効になり、その結果、SHR スケジューラと制限値の適用がそれぞれ無効になります。share フラグとlimits フラグは、必要なら、limits データベースが開いた状態のままで個別に無効にできます。この場合には、プロセスが適切な l ノードに接続されたままになるので、ファイルを閉じるよりも望ましい方法です。
操作中に Solaris Resource Manager のスケジューラだけを無効にしても、使用量と減少のアルゴリズムが中断されるだけです。スケジューラは、SHR スケジューリングクラスでプロセスの処理を続けます。しかし、各プロセスには更新された優先順位が割り当てられるので同じ値が使用されることになり、単純な「ラウンドロビン」スケジューリングが行われます。
ファイルが閉じられている状態でそのファイルを開いて、share フラグと limits フラグを設定して Solaris Resource Manager を再び有効にしても、既存のプロセスは root l ノードに接続されたままです。通常の操作で Solaris Resource Manager のデータベースを閉じることは避けてください。閉じた場合には、システムを再起動して、プロセスを適切な l ノードに接続する必要があります。
デフォルトでは、limdaemon は syslog(3) を使用してメッセージを記録します。時刻はメッセージに含まれます。
limdaemon には、起動時に構成できるオプションがいくつかあります。
-m tag と -p priority オプションは、-l オプションとともに使用します。syslogd(1M) 構成に従って、メッセージにタグを付け、メッセージのルーティングを制御します。
-c オプションを指定すると、limdaemon が端末接続時間使用量の更新を抑止します。
-d オプションを指定すると、limdaemon が、ログイン済みユーザーのすべての端末の接続時間使用量に対し減少処理をします。減少処理を行う間隔は、-t オプションの引数で指定します (デフォルトは 1 分)。
-Dn オプションを指定すると、limdaemon がすべてのユーザーのすべての端末の接続時間使用量に対し n 分ごとに減少処理をします。
-k オプションを指定すると、動作中の limdaemon を停止します。
-t オプションでは、端末デバイスカテゴリにある接続時間使用量属性の更新間隔を分で設定します。デフォルトは 1 分です。
-e オプションでは、接続時間の制限値に達したユーザーのログアウトを抑止します。-c オプションを指定すると、このオプションを指定したのと同じになります。
-w オプションでは、接続時間が超過する何分前に警告メッセージを出すかを設定します。デフォルトの警告間隔は 5 分です。
-g オプションでは、猶予時間を秒単位で設定します。デフォルトの猶予時間は 30 秒です。
次はこの limdaemon コマンドの例です。
% limdaemon -g300 |
このコマンドでは、デーモンを起動し、猶予時間を 5 分に設定します。コマンドの後にシェル & 文字を続ける必要はありません。limdaemon を起動すると、それ自身がデーモンになります。つまり、子プロセスがフォークされ、その子プロセスがそれ自身を制御端末から切り離し、独自のプロセスグループに入ります。
管理者は、接続時間使用量属性を頻繁に更新することによるオーバーヘッドの増加と、更新の頻度が少なくなることによるばらつきの増加のバランスをどうするかを判断する必要があります。上述オプションやその他のオプションの詳細は、limdaemon(1MSRM) のマニュアルページを参照してください。
Solaris 2.6 システムは Pluggable Authentication Module (PAM) をサポートします。ユーザー識別情報の変更や設定が必要になる操作 (システムへのログイン、rcp や rsh などの r コマンドの呼び出し、ftp の使用、su の使用など) をユーザーが要求すると、一連の構成可能モジュールを使って、認証、アカウント管理、資格管理、およびセッション管理が行われます。Solaris Resource Manager には、ログインのアカウント処理を行い、su の動作を変更するモジュールがあります。
この操作を要求するときに使用するプログラムをサービスといいます。
PAM システム全体の説明は、pam(3)、pam.conf(4)、 pam_unix(5)、pam_srm(5SRM) のマニュアルページを参照してください。
Solaris Resource Manager の PAM モジュールには、アカウント管理とセッション管理の機能があります。PAM の動作を制御するには /etc/pam.conf ファイルを編集します。通常の Solaris Resource Manager の動作の場合は、Solaris Resource Manager の PAM モジュールを、セッション管理に対するすべてのログイン系サービスの requisite として、およびすべての PAM サービスに対するアカウント管理の requisite として構成する必要があります。通常、Solaris Resource Manager のモジュールは、他のすべての required および requisite モジュールの後、他の sufficient または optional モジュールの前に置きます。
Solaris Resource Manager は、インストール時に /etc/pam.conf を編集して、適切な動作を行えるようにします。Solaris Resource Manager は、セッション管理またはアカウント管理がすでに構成されているサービス (other を含む) ごとに次のような行を追加します。
login account requisite pam_srm.so.1 nolnode=/etc/srm/nolnode login session requisite pam_srm.so.1 other account requisite pam_srm.so.1 nolnode=/etc/srm/nolnode |
最初の行では、サービスログインの場合、モジュール pam_srm.so.1 を使ってアカウント管理を行い、ログインが成功するためにはログインを許可する必要があることを指定します。さらに、引数 nolnode=/etc/srm/nolnode を渡します。制御フラグ (required、requisite、optional、および sufficient) の詳細は、pam.conf(4) のマニュアルページを参照してください。
2 行目では、ログインサービスがセッション管理に pam_srm.so.1 モジュールを使用することを指定します。
Solaris Resource Manager のアカウント管理とセッション管理のモジュールに対してサポートされる引数については、pam_srm(5SRM) のマニュアルページを参照してください。
Solaris Resource Manager のアカウント管理 PAM モジュールは、制御されると次のことをします。
Solaris Resource Manager がインストールされ、有効になっているかどうかを判定します。Solaris Resource Manager がインストールされていなかったり、有効でない場合は、このモジュールを無視するように PAM システムに通知します。
ユーザーに l ノードがあるかどうかを判定し、ない場合は管理者による構成が可能な nolnode スクリプトを呼び出します。
ユーザーが要求するサービスとデバイスのアクセス権がユーザーにあるかどうかを判定します。
ユーザーが警告限度を超過しているかどうかを判定し、超過している場合は、ログインを許可しません。
管理者による構成が可能な every login スクリプトを呼び出します。
いずれかの手順が失敗すると、残りの手順は行われません。Solaris Resource Manager のアカウント管理 PAM モジュールはサービスの使用を拒否します。可能であれば、メッセージがこのサービスを経由してユーザーに渡されます。
デフォルトの missing lnode スクリプトでは、ユーザーの l ノードを作成し、そのことを知らせるメールをシステム管理者に送ります。このデフォルトスクリプトは /etc/srm/nolnode です。このスクリプトを変更するには、ファイル /etc/pam.conf を編集して、Solaris Resource Manager アカウント管理モジュールの行で nolnode オプションの値を変更します。every login スクリプトは通常構成されていません。これを変更する場合は、/etc/pam.conf のいずれかの Solaris Resource Manager アカウント管理モジュールに [everylogin=pathname] オプションを追加します。スクリプトは root ユーザーで呼び出されます。標準の入力、出力、およびエラー処理はクローズされます。スクリプトがゼロ以外で終了すると、アクセスは拒否されます。すべての情報は環境変数として渡されますが、これらの環境変数は、サービスから PAM に渡される情報から直接抽出されます。
プログラムに渡されるログイン名。この名前は、パスワードマップの検索によってすでに認証されています。この名前がない場合は、アカウント管理モジュールがすでにエラーコードを PAM に返しています。
認証されているユーザーのユーザー ID。ユーザー ID を変更するサービス (su など) の場合、これはサービスを呼び出すユーザーのユーザー ID です。ユーザー ID を設定するサービス (login など) の場合、これはターゲットユーザー ID (USER のユーザー ID) です。
ネットワークを介するアクセスの場合は、アクセスを要求しているホスト名です。それ以外の場合、この値は実装によって異なります。
アクセスサービスの名前 (rsh、login、ftp など)。
サービスを呼び出す TTY の名前。厳密な意味で制御端末がないサービス (ftp など) のうち、一部のものはこの変数にプロセス情報を入れます (たとえば、ftp12345 など。12345 は ftpd のプロセス識別子 (PID))。制御端末がないサービスのうち、それ以外のものは、この変数に何も入れないか、サービス名を入れます。
pam.conf ファイルでデバッグを指定すると、DEBUG が真に設定されます。この指定をしなければ、偽に設定されます。他の環境変数は設定されないので、必要な場合は、どのスクリプトも独自の PATH 変数を指定する必要があります。
デフォルトの「no lnode」スクリプトは、l ノードをデフォルトのスケジューリンググループ (そのようなユーザーがパスワードマップに存在する場合は other、存在しない場合は root) に作成します。そして、システム管理者にメッセージをメールして、新しい l ノードをスケジューリング階層の適切な場所に移す必要があることを知らせます。スクリプトの例については、「デフォルトの「no lnode」スクリプト」を参照してください。
Solaris Resource Manager の PAM モジュールは、デバイス階層の端末名とサービス名を検索し、制限値を超過しているか、デバイスフラグが set に評価されると、呼び出し側に「permission denied (アクセス権がありません)」というメッセージを返します。
調べるデバイスカテゴリは、端末名に対しては terminal、要求された種類のサービスに対しては services です。たとえば、rlogin を行うときにネットワークデバイスグループのファイルを使用することがあります。このユーザーに対しては次のフラグがこの順に検査されます (すべてのフラグが group として設定されているとします)。
terminal.flag.network
terminal.flag.all
services.flag.rlogin
services.flag.netservices
これらがすべて set と評価されたときだけアクセスが許可されます。さらに、対応するカテゴリ (terminal と services) の制限値が検査されます。
ログインのようなサービス (utmp ファイルにエントリを作成したもの) では、PAM のセッション管理機能とアカウント管理機能が両方とも /etc/pam.conf に構成されていれば、これらが呼び出されます。
Solaris Resource Manager 製品のセッション管理では、デバイスに対する課金処理をします。接続時間の制限値を超えたかどうかや、onelogin フラグが設定されていて、ユーザーがすでにログインしているかどうかを調べ、該当する場合には、ログインを拒否します。
ログイン可能な場合には、セッション管理機能により、limdaemon プロセスへのメッセージが生成され、ログイン可能であることと、ログインに使用する端末の構成コストがこのプロセスに知らされます。次に、現在のプロセスが login header process (ログインヘッダープロセス) であることと、セッション管理が終了した場合には limdaemon プロセスに知らせる必要があることがカーネルに通知されます。
limdaemon プロセスは接続時間の制限値を監視し、超過しそうになると、警告を出します。