ユーザーコマンド priocntl(1)
【名前】
priocntl - 指定したプロセスのスケジューリングパラメータの 表
示または設定
【形式】
priocntl -l
priocntl -d [-i idtype] [idlist]
priocntl -s [-c class] [ class-specific options] [-
i idtype] [idlist]
priocntl -e [-c class] [ class-specific options] command
[argument(s)]
【機能説明】
priocntl コマンドは、指定した 1 つまたは複数のプロセスのスケ
ジューリングパラメータを表示または設定します。また、システム
のプロセススケジューラの現在の設定情報を表示したり、指定した
スケジューリングパラメータを使ってコマンドを実行したりする目
的にも使用できます。
プロセスはいくつかのクラスに分けられます。各クラスにはそれぞ
れ異なったスケジューリング方針が適用されます。現在サポートさ
れているクラスは、リアルタイム、タイムシェアリング、対話型、
フェ アシェア、固定優先順位の 5 種類です。各クラスの特徴およ
びクラス固有のオプションについては、後述の「リアルタイムクラ
ス」、「タイムシェアリングクラス」、「対話型クラス」、「フェ
アシェアクラス」、「固定優先順位クラス」の項で説明し ま す。
ユー ザーは、正しいアクセス権を持っていれば、priocntl コマン
ドを使って、稼動中のプロセスのクラスや対応するスケジューリン
グパラメータを変更することができます。
デフォルトの設定では、実行可能状態にあるリアルタイムプロセス
が他のプロセスに先だって実行されます。したがってリアルタイム
プロセスの使い方を誤ると、システムのパフォーマンスが著しく損
なわれてしまう恐れがあります。
priocntl コマンドに idlist 引数を指定する場合は、コマンド 行
の最後に記述してください。また idlist 中の要素は、空白で区切
る必要があります。idlist 引数を省略するときは、idtype 引数と
し て pid、 ppid、pgid、sid、class、uid、gid、projid または
zoneid を使って、プロセス ID、親プロセス ID、プロセスグ ルー
プ ID、セッション ID、クラス ID、ユーザーID、グループ ID ま
たはゾーン ID をそれぞれ指定します。
priocntl -d [-i idtype] [idlist]
上記の priocntl コマンドは、idtype および idlist 引数で指 定
したプロセス群のクラスとクラス固有のスケジューリングパラメー
タを表示します。
priocntl -s [-c class] [class-specific options] \
[-i idtype] [idlist]
上記の priocntl コマンドは、指定したプロセスのクラスおよびク
ラス固有のパラメータを、コマンド行で指定した値に設定します。
-c class オプションが、設定するクラスを表します。現在サ ポー
トされている class 引数値は、リアルタイムクラス用の RT、タイ
ムシェアリングクラス用の TS、対話型クラス用の IA、フェアシェ
ア用の FSS、固定優先順位用の FX のいずれかです。
各クラス固有のパラメータは、対応するクラス固有のオプションを
使って指定します。詳しくは各クラスの項で後述します。-c class
オプションを省略する場合には、idtype と idlist を使って、 同
じクラスに属する一群のプロセスを指定してください。そうしない
とエラーが発生します。クラス固有のオプションをすべて省略する
と、 当該プロセスのクラス固有パラメータの値は、-c class で指
定したクラスのデフォルト値に設定されます。なお、-c class オ
プ ショ ンも省略した場合には、そのプロセスの現在のクラスのデ
フォルト値に設定されます。
priocntl を使ってプロセスのスケジューリングパラメータを変 更
できるのは、priocntl を実行したユーザーの実ユーザーID または
実効ユーザーID ( それぞれのグループ ID ) が当該プロセスの 実
ユーザーID または実効ユーザーID ( それぞれのグループ ID ) と
一致している場合、もしくはユーザーの実効ユーザー ID が スー
パーユーザーを示している場合だけです。アクセス権に関するこの
要件は、全クラスに適用される最低限の必要条件です。クラ ス に
よっては、プロセスを設定する場合やクラス固有のスケジューリン
グパラメータを設定する場合に、他のアクセス権に関する要件が追
加されることもあります。
idtype と idlist の両引数を使っていくつかのプロセスを指定 す
る と、priocntl はそれらのプロセスに対して処理を実行します。
ただし、処理する順序は実装状態により異なります。エラーを検出
した場合、そのエラーの種類により、以降のプロセスの処理を続行
できる場合と続行できない場合とがあります。
検出したエラーがアクセス権に関連するものであれ ば、 priocntl
は エ ラーメッセージを出力しますが、指定されたプロセスのうち
ユーザーが適正なアクセス権を持っているものについては、 パ ラ
メータをリセットして処理を続行します。エラーがアクセス権に関
連したものでなければ、エラーメッセージを表示してただちに実行
を終了します。
特殊なシステムプロセス (たとえばスワッパプロセス) の実行をス
ケジューリングする目的のため、sys という特殊なスケジューリン
グクラスが存在しています。どのプロセスに対しても、クラ ス を
sys に変更することはできません。また idtype や idlist 引数で
sys クラスに属するプロセスを指定した場合、priocntl はそれ ら
を 無視します。たとえば idtype として uid を指定し idlist に
0 (ゼロ) を指定すると、UID の値が 0 の全プロセスのう ち sys
クラスに属するものを除いたプロセス、および ( -s オプションを
使ってパラメータを変更する場合には) init プロセスが処理の 対
象となります。
init プロセス (プロセス ID は 1) は 特 殊 な ケー ス で す。
priocntl コマンドを使って init プロセスのクラスやその他のス
ケジューリングパラメータを変更するためには、idtype と し て
pid を 指定し、idlist として 1 だけを指定してください。init
プロセスは、システム上に存在するどのクラスに割り当てても構い
ませんが、ほとんどの場合タイムシェアリングクラスを選択するの
が適切です。他のクラスに割り当てると、システムに悪影響を及ぼ
す ことがあります。詳細は『Solaris のシステム管理 (基本編)』
を参照してください。
priocntl -e [-c class] [class-specific options] command \
[argument...]
この priocntl コマンドは、command で示すコマンドを、指定した
ク ラスとスケジューリングパラメータを使って実行します。argu-
ments は、command に対する引数です。-c class オプションを 省
略 す ると、指定したコマンドはユーザーの現クラスで実行されま
す。
【オプション】
次のオプションを指定できます。
-c class 設定するクラスを指定します。class 引数 に は
RT ( リ アルタイムクラスの場合)、TS (タイム
シェアリングクラスの場合)、IA (対話型クラ ス
の 場合)、FSS (フェアシェアの場合)、FX (固定
優先順位の場合) のいずれかを指定できます。指
定したクラスが構成されていない場合には、自動
的に構成されます。
-d 指定したプロセスに対応したスケジューリングパ
ラメータを表示します。
-e 指定したコマンドを、指定したプロセスに対応し
たスケジューリングパラメータを使って実行しま
す。
-i idtype このオプションは、idlist 引数 (もし存在し て
い れば) とともに、priocntl コマンドの処理対
象となるプロセス群を指定します。idlist が ど
の ように解釈されるかは、idtype の値により異
なります。-d オプションまたは -s オプショ ン
を指定するときに、-i idtype オプションを指定
しない場合、デフォルトの idtype とし て pid
が想定されます。
idtype として指定可能な値、およびそれぞれ の
値 に 対応した idlist の解釈は以下のとおりで
す。
-i pid idlist はプロセス ID で す。
priocntl コマンドの処理対象
は、指定された全プロセ ス で
す。
-i ppid idlist は親プロセ ス ID で
す。 priocntl コマンドの処理
対象は、指定された親プロセス
ID を持つすべてのプロセスで
す。
-i pgid idlist はプロセスグループ ID
で す。priocntl コマンドの処
理対象は、指定されたグループ
に 属 するすべてのプロセスで
す。
-i sid idlist はセッショ ン ID で
す。 priocntl コマンドの処理
対象は、指定されたセッション
中のすべてのプロセスです。
-i taskid idlist はタスク ID です。 コ
マンドの処理対象は、指定され
たタスクのすべてのプロセスで
す。
-i class idlist は単一のクラス名で す
( リ アルタイムクラスなら RT
、タイムシェアリングクラスな
ら TS 、 対 話型クラスなら
IA、フェアシェアクラス な ら
FSS、 固定優先順位クラスなら
FX)。コマンドの処理対象 は、
指定されたクラスに属するすべ
てのプロセスです。
-i uid idlist はユーザーID で す。
priocntl コマンドの処理対象
は、指定された ID と同一の実
効 ユーザーID を持つすべての
プロセスです。
-i gid idlist はグループ ID で す。
priocntl コマンドの処理対象
は、指定された ID と同一の実
効グループ ID を持つすべての
プロセスです。
-i pgid idlist はプロセスグループ ID
で す。priocntl コマンドは、
指定されたプロセスグループ内
のすべてのプロセスに適用され
ます。
-i projid idlist はプロジェクト ID で
す。コマンドの処理対象は、指
定された ID と同一の実効プロ
ジェクト ID を持つすべてのプ
ロセスです。
-i all priocntl コマンドの処理対 象
は、存在しているすべてのプロ
セスです。この場 合、 idlist
引数は指定できません。指定し
ても無視されます。また以下に
述べるアクセス権上の制限事項
は、この all 指定の場合で も
有効です。
-i zoneid idlist はゾーン ID で す。
priocntl コマンドは、リスト
内の ID と同じ有効な ゾー ン
ID を持つすべてのプロセスに
適用されます。
-d または -s オプションを指定して -i idtype
オ プションを省略すると、デフォルトの idtype
である pid を指定したものとみなされます。
-l 現在システム上に定義されているクラスの 一 覧
を、各クラス固有の情報とともに表示します。ク
ラス固有情報の出力形式は「使用法」の項で説明
します。
-s 指定したプロセスに対応したスケジューリングパ
ラメータを設定します。
リアルタイムクラスのパラメータを設定する場合には、以下のクラ
ス固有のオプションを指定できます。
-p rtpri 指定したプロセスのリアルタイム優先順
位を、rtpri に設定します。
-t tqntm [-r res] 指定したプロセスのタイムクアン タ ム
を、tqntm に設定します。タイムクアン
タムの単位を指定することも可能です (
詳しくは後述)。
-q tqsig 指定したプロセスのリアルタイムのタイ
ム クアンタムシグナルを tqsig に設定
します。
タイムシェアリングクラスのパラメータを設定する場合には、以下
のクラス固有のオプションを指定できます。
-m tsuprilim 指定したプロセスのユーザー優先順位の上 限 値
を、tsuprilim に設定します。
-p tsupri 指定したプロセスのユーザー優先順位を、tsupri
に設定します。
対話型クラスのパラメータを設定する場合には、以下のクラス固有
のオプションを指定できます。
-m iauprilim 指定したプロセスのユーザー優先順位の制限を、
iauprilim に設定します。
-p iaupri 指定したプロセスのユーザー優先順位を、iaupri
に設定します。
フェアシェアクラスのパラメータを設定する場合には、以下のクラ
ス固有のオプションを指定できます。
-m fssuprilim 指定したプロセスのユーザー優先順位の上 限 値
を、tsuprilim に設定します。
-p fssupri 指定したプロセスのユー ザー 優 先 順 位 を、
fssupri に設定します。
固定優先順位クラスのパラメータを設定する場合には、以下のクラ
ス固有のオプションを指定できます。
-m fxuprilim 指定したプロセスのユーザー優先順位の上 限 値
を、fxuprilim に設定します。
-p fxupri 指定したプロセスのユーザー優先順位を、fxupri
に設定します。
-t tqntm [-r res指定したプロセスのタイムクアンタムを、 tqntm
に設定します。タイムクアンタムの単位を指定す
ることも可能です (詳しくは後述)。
【使用法】
[リアルタイムクラス]
リアルタイムクラスは、高速でかつ決定力のある応答を必要とし、
スケジューリング方針に関してユーザーやアプリケーションに対す
る絶対的な制御権を必要とするようなプロセスに対して、固定され
た高い優先順位を持つスケジューリング方針を与えるものです。シ
ステム中にリアルタイムクラスが定義されている場合には、システ
ム上の最上位のスケジューリング優先順位群を制御できる唯一のク
ラスである必要があります。これにより、実行可能状態にあるリア
ルタイムプロセスは、他のクラスに属するあらゆるプロセスよりも
先に CPU のサービスを受けられることが保証できます。
リアルタイムクラスには、一連のリアルタイム優先順位値 (rtpri)
が与えられていて、そのクラスに属するプロセスに割り当てること
ができます。リアルタイム優先順位値の範囲は 0 から x までで、
こ の x の値はリアルタイムクラスのスケジューラを構成済みのシ
ステムごとに設定可能であり、以下のコマンドを使って表示するこ
とができます。
priocntl -l
リアルタイムクラスのスケジューリング方針とは、固定優先順位を
割り当てることです。つまり、ユーザーやアプリケーション側から
のプロセスの rtpri 値を変更する明示的な要求を実行し な い 限
り、リアルタイムプロセスのスケジューリング優先順位は変わりま
せん。
リアルタイムクラスのプロセスに関して、rtpri の値はプロセスの
スケジューリング優先順位と実用上同じです。リアルタイムクラス
のあるプロセスの、同じクラス内の他のプロセスに対する相対的な
ス ケ ジューリング優先順位値は、rtpri 値により決定されます。
rtpri 値は数値で示され、大きい数が高い優先順位を表します。リ
アルタイムクラスはシステム中で最も高いスケジューリング優先順
位群を制御しているので、実行可能状態にあるリアルタイムプロセ
ス のうち最高の rtpri 値を持つプロセスがシステム中の他のあら
ゆるプロセスに先だって選ばれる、ということが保証されて い ま
す。
priocntl は、優先順位に関する制御権だけでなく、リアルタイ ム
クラス中のプロセスに割り当てられるタイムクアンタムを制御する
権利も提供しています。このタイムクアンタム値は、プロセスがリ
ソー ス やイベントの待ち状態 (休眠状態) に陥らないという前提
で、プロセスの実行時間の最大値を指定するものです。なお、ある
プロセスの稼動中に、より高い優先順位を持つ他のプロセスが実行
可能状態になった場合、現在稼動中のプロセスは割り当てられたタ
イムクアンタム値に達していなくても取り上げられてしまうことが
あります。
priocntl -d [-i idtype] [idlist]
このコマンドは、idtype と idlist で指定した一群のリアルタ イ
ム プ ロセスの個々のリアルタイム優先順位、時間 (単位はミリ秒
)、およびタイムクアンタムシグナル値を表示します。
リアルタイムクラス用の priocntl -s または priocntl -e コマン
ド には、-p、-t [-r]、および -q を任意の組み合わせで指定でき
ます。どれかを省略した場合、当該プロセスが現在リアルタイムで
あれば、省略されたオプションに対応したパラメータには影響あり
ません。あるプロセスを他のクラスからリアルタイムクラスに変更
するような priocntl コマンド中でいずれかのオプションを省略す
ると、そのオプションに対応したパラメータはデフォルト値に設定
さ れます。rtpri のデフォルト値は 0 です。タイムクアンタムの
デフォルトは、rtpri の値およびシステムの構成により異なります
( rt_dptbl(4) 参照)。
-t tqntm オプションを使用する際、タイムクアンタムの単位を -r
res オプションを使って指定することもできます。単位のデフォル
トはミリ秒です。res には、1 から 1,000,000,000 までの正の 整
数 を指定してください。この場合、使用される単位は res 分の 1
秒となります。たとえば、-t 10 -r 100 と指定すると、 単 位 は
100 分の 1 秒となり、タイムクアンタム長として指定されている
10 は、10/100 つまり 10 分の 1 秒を意味することになりま す。
ナ ノ 秒などの細かい単位も指定可能ですが、実際にはシステムク
ロックの精度に合うようにタイムクアンタム長は丸められてしまい
ま す。タイムクアンタムとして 0 を指定した場合、およびシステ
ムに固有の最大クアンタムを超える大きな値を指定した場合には、
エラーとなります。
リアルタイム時間シグナルを使用すると、実行中のリアルタイムプ
ロセスに自身の時間消費量を知らせることができます。リアルタイ
ム時間シグナルはリアルタイムプロセスを監視し、その実行時間が
上限に達した時点で、設定されているシグナルをリアルタイムプロ
セスに送信します。時間シグナル tqsig のデフォルト値 (0) は、
シグナルを送信しないことを示します。tqsig に正の値を指定する
と、その値ごとに設定されているシグナルが 送 信 さ れ ま す。
kill(1) などのシグナルを扱うコマンドの場合と同様に、-q tqsig
オプションを指定して XCPU や KILL のようなシンボルを使用した
シグナル名も扱うことができます。
プロセスのクラスを他のものからリアルタイムクラスに変更するに
は、 priocntl コマンドを実行するユーザーがスーパーユーザー特
権を持つ必要があります。また、リアルタイムプロセス の rtpri
値 やタイムクアンタムを変更するには、priocntl コマンドを実行
するユーザーはスーパーユーザーであるか、あるいは現在リアルタ
イ ムクラスにいて (リアルタイムプロセスとして稼動中のシェル)
その実ユーザーID または実効ユーザー ID が処理対象のプロセ ス
の実ユーザーID または実効ユーザーID と一致している必要があり
ます。
fork(2) や exec(2) などのシステムコールを使った場合、リア ル
タイム優先順位、タイムクアンタム、およびタイムクアンタムシグ
ナルは、これらのシステムコールに受け継がれます。exec(2) シス
テムコールで、ユーザー定義のシグナルハンドラを持つ時間シグナ
ルが使用された場合、指定された時間の上限に達する前に、新しい
イメージの中にユーザーが定義のシグナルハンドラがインストール
されている必要があります。時間内にインストールできない 場 合
は、予測できない動作が発生します。
[タイムシェアリングクラス]
タイムシェアリングのスケジューリング方針とは、CPU の消費に関
し て異なった性質を持つプロセスに対して、公平で有効な CPU リ
ソースの割り付けを行うことです。タイムシェアリング方針の目的
は、 対 話型プロセスには速いレスポンスを提供し、CPU 消費型の
ジョブには高いスループットを提供し、さらにスケジューリングの
制御権をユーザーやアプリケーションにもある程度与えることにあ
ります。
タイムシェアリングクラスには、一連のタイムシェアリン グ ユー
ザー 優先順位値 (rtpri) が与えられていて、そのクラスに属する
プロセスに割り当てることができます。ユーザー優先順位値の範囲
は -x から +x までで、この x の値はシステムごとに設定可能で
あり、以下のコマンドを使って表示することができます。
priocntl -l
ユーザー優先順位の目的は、タイムシェアリングクラスのプロセス
のスケジューリングを、ユーザーやアプリケーションがある程度制
御できるようにすることです。タイムシェアリングクラスのプロセ
スの tsupri 値を増減させれば、そのプロセスのスケジューリング
優先順位が上下します。ただし、高い tsupri 値を持つタイムシェ
アリングプロセスが、低い tsupri 値を持つプロセスよりも先に実
行されるとは限りません。なぜなら tsupri 値は、タイムシェアリ
ングプロセスのスケジューリング優先順位を決定する際の要素の 1
つにしかすぎないからです。システムは最近のシステム利用率など
他 の 要 素 を考慮の上、タイムシェアリングプロセスの内部スケ
ジューリング優先順位を動的に調整します。
システム内でのユーザー優先順位の上限値 (priocntl -l で表示で
き る) に加え、プロセスごとにユーザー優先順位上限値 (tsupri-
limf1) があります。これは各プロセスに指定できるtsupri の最大
値を表します。
priocntl -d [-i idtype] [idlist]
このコマンドは、idtype と idlist で指定した一群のタイム シェ
アリングプロセスの個々のユーザー優先順位と優先順位上限値を表
示します。
タイムシェアリングプロセスは、自身の (および同じユー ザー ID
を 持 つ他のプロセスの) tsuprilim 値を下げることができます。
tsuprilim 値を上げることができるのは、スーパーユーザー特権を
持つプロセスだけです。あるプロセスのクラスをタイムシェアリン
グから他のクラスに変更する場合、tsuprilim の初期値を 0 よ り
大 き い値に設定するには、スーパーユーザー特権が必要となりま
す。
どのタイムシェアリングプロセスも、自身の (および同じユーザー
ID を持つ他のプロセスの) tsupri 値を設定できますが、そのプロ
セスの tsuprilim 値を超えることはできません。tsuprilim を 超
える値に tsupri を設定しようとした場合、または tsupri 未満の
値に tsuprilim を設定しようとした場合には、結果として tsupri
が tsuprilim と等しい値に設定されます。
タイムシェアリングクラス用の priocntl -s または priocntl -e
コ マンド中に、-m と -p の両オプションを任意の組み合せで指定
できます。どちらかを省略した場合、当該プロセスが現在タ イ ム
シェアリングであれば、省略されたオプションに対応したパラメー
タには通常影響ありません。ただし、-p オプションを省略し、 -m
を 使って tsuprilim の値を tsupri 未満に設定しようとした場合
は例外です。このような設定を試み る と、 tsupri は 現 在 の
tsuprilim の値に設定されます。あるプロセスを他のクラスからタ
イムシェアリングクラスに変更する際にいずれかのオプションを省
略すると、そのオプションに対応したパラメータはデフォルト値に
設定されます。tsuprilim のデフォルト値は 0 です。tsupri のデ
フォルト値は、現在設定されている tsuprilim の値です。
fork(2) や exec(2) などのシステムコールを使った場合、タイ ム
シェアリングユーザー優先順位およびユーザー優先順位の上限値は
受け継がれます。
[対話型クラス]
対話型のスケジューリング方針とは、CPU の消費に関して異なった
性 質を持つプロセスに対して、公平で有効な CPU リソースの割り
付けを行い、さらに対話用に速いレスポンスを提供することです。
対 話 型方針の目的は、対話型プロセスには速いレスポンスを提供
し、CPU 消費型のジョブには高いスループットを提供することにあ
ります。対話型クラスにある処理の優先順位は、タイムシェアリン
グクラスにある処理と同じように変更できます。ただし、修正され
た優先順位はユーザーとの対話の速い応答性を提供するために継続
します。
対話型クラスのユーザー優先順位の上限値 iauprilim は tsupri-
lim と同等です。対話型クラスの、プロセスごとのユーザー優先順
位 iaupri は tsupri と同等です。
iamode (対話型モード) のビットが設定されている対話型クラスの
プロセスには、最優先順位を示す値 10 が割り当てられます。この
値を持つプロセスは、優先順位の計算が行われるとき、つまり、プ
ロセスの優先順位が再調整されるたびに、そのプロセスのユーザー
モード優先順位に組み込まれます。この機能は、X ウィンドウシス
テムで使用されています。X ウィンドウシステムでは、このビット
を現在アクティブなウィンドウ内で実行中のプロセスに割り 当 て
て、そのプロセスにより高い優先順位を与えています。
[フェアシェアクラス]
フェアシェアのスケジューリング方針とは、所有するプロセスの数
に 関係なく、各プロジェクト間に公平に CPU リソースを割り付け
ることです。プロジェクトには、CPU リソースの使用権を制御する
た め の 「割り当て数」が与えられます。一定時間ごとに CPU リ
ソースの使用量が通知されるため、他のプロジェクトより使用量の
多いプロジェクトの使用権は縮小され、使用量の少ないプロジェク
トの使用権は拡大されます。CPU 時間は、各プロジェクトが所有す
るプロセスの数とは無関係に、プロジェクトごとの使用権に応じて
スケジュールされます。
FSS スケジューリングクラスは、タイムシェアリングスケジューラ
との互換性を保持するために、プロセス単位のユーザー優先順位お
よびユーザー優先順位上限という概念を取り入れています。フェア
シェ アスケジューラTは、ユーザープロパティの全領域について、
均等な効果を提供することを目的としています。正の fssupri 値
を持つプロセスには、通常より短いタイムスライスが配分され、負
の fssupri 値を持つプロセスには、通常より長いタイムスライ ス
が配分されます。ユーザープロパティが割り当て数に影響すること
はありません。つまり、プロセスの fssupri 値を変更しても。 そ
の プロセスの属するプロジェクト全体の CPU 使用量は変更されま
せん。CPU 使用量に影響するものは、他のプロジェクトとの比較に
よって割り付けられる割り当て数の配分のみです。
フェアシェアクラス内のプロセスのプロパティは、タイムシェアリ
ングクラスのプロセスのプロパティと同じ方法で変更できます。
[固定優先順位クラス]
固定優先順位クラスは、システムによってプロセスのスケジューリ
ン グ 優先順位が調整されることなく、ユーザーまたはアプリケー
ションがプロセスのスケジューリング優先順位を制御できる、優先
順位が固定された事前定義のスケジューリング方針を提供します。
固定優先順位クラスは、デフォルトではタイムシェアリングクラス
とスケジューリング優先順位の同じ範囲を共有しています。固定優
先順位クラスには、ユーザー優先順位値 (fxupri) の範囲が与えら
れ、 そ のクラスに属するプロセスに割り当てることができます。
ユーザー優先順位値の範囲は 0 から x までで、この x の値は リ
アルタイムクラスのスケジューラを構成済みのシステムごとに設定
可能であり、以下のコマンドを使って表示することができます。
priocntl -l
ユーザー優先順位の目的は、固定優先順位クラスのプロセスのスケ
ジューリングを、ユーザーやアプリケーションが制御できるように
することにあります。固定優先順位クラスのプロセスに関 し て、
fxupri の値はプロセスのスケジューリング優先順位と実用上同じ
です。固定優先順位のあるプロセスの、同じクラス内の他のプロセ
ス に対する相対的なスケジューリング優先順位値は、fxupri 値に
より決定されます。fxupri 値は数値で示され、大きい数が高い 優
先順位を表します。
priocntl -l で表示される、システム全体でのユーザー優先順 位
上 限 のほかに、プロセスごとにユーザー優先順位上限 (fxupri-
lim) があります。この値は、プロセスの fxupri として設定で き
る最大の値を示します。
固定優先順位プロセスは、自身の (および同じユーザーID を持 つ
他 のプロセスの) fxuprilim 値を下げることができます。fxupri-
lim 値を上げることができるのは、スーパーユーザー特権を持つプ
ロセスだけです。あるプロセスのクラスを固定優先順位から他のク
ラスに変更する場合、fxuprilim の初期値を 0 より大きい値に 設
定するには、スーパーユーザー特権が必要となります。
どの固定優先順位プロセスも、自身の (および同じユーザーID を
持 つ他のプロセスの) fxupri 値を設定できますが、そのプロセス
の fxuprilim 値を超えることはできません。fxuprilim を超え る
値に fxupri を設定しようとした場合、または fxupri 未満の値に
fxuprilim を設定しようとした場合には、結果として fxupri が
fxuprilim と等しい値に設定されます。
priocntl は、優先順位に関する制御権だけでなく、固定優先順 位
クラス中のプロセスに割り当てられるタイムクアンタムを制御する
権利も提供しています。このタイムクアンタム値は、プロセスがリ
ソー ス やイベントの待ち状態 (休眠状態) に陥らないという前提
で、プロセスの実行時間の最大値を指定するものです。なお、ある
プロセスの稼動中に、より高い優先順位を持つ他のプロセスが実行
可能状態になった場合、現在稼動中のプロセスは割り当てられたタ
イムクアンタムに達していなくても取り上げられてしまうことがあ
ります。
固定優先順位クラス用の priocntl -s または priocntl -e コマン
ドには、-m、-p、よび -t を任意の組み合わせで指定できます。ど
れかを省略した場合、当該プロセスが現在固定優先順位であれば、
省略されたオプションに対応したパラメータには影響ありません。
ただし、-p を省略して、-m オプションで fxuprilim の値を現 在
の fxupri の値より小さな値に設定した場合は例外です。この場
合、fxupri は、設定された fxuprilim の値と同じ値になります。
あるプロセスを他のクラスから固定優先順位クラスに変更するとき
にオプションを省略すると、そのオプションに対応したパラメータ
は デ フォルト値に設定されます。fxuprilim のデフォルト値は 0
です。fxupri の値は、設定されている fxuprilim の値とデフォル
トで同じになります。タイムクアンタムのデフォルトは、設定され
ている fxupri の値およびシステムの構成により異な り ま す (
fx_dptbl( 4) 参照)。
固定優先順位クラス内のプロセスのプロパティは、リアルタイムク
ラスのプロセスのプロパティと同じ方法で変更できます。
fork(2) や exec(2) などのシステムコールを使った場合、固定 優
先順位のユーザー優先順位、ユーザー優先順位上限、およびタイム
クアンタムは、これらのシステムコールに受け継がれます。
【使用例】
リアルタイムクラスの例を示します。
例 1: クラスを設定する
idtype と idlist で指定された非リアルタイムのプロセスのクラ
スをリアルタイムに変更し、リアルタイム優先順位値をデフォルト
の 0 に設定します。現在リアルタイムクラスに属しているプロ セ
スのリアルタイム優先順位値は変わりません。指定されたプロセス
のタイムクアンタムは、すべて 1/10 秒に設定されます。
example% priocntl -s -c RT -t 1 -r 10 -i idtype idlist
例 2: リアルタイムでコマンドを実行する
command で指定したコマンドをリアルタイムクラスで実行します。
リ アルタイム優先順位値は 5 で、タイムクアンタムは 20 ミリ秒
となります。
example% priocntl -e -c RT -p 15 -t 20 command
例 3: 時間シグナルを指定して、リアルタイムでコマンドを実行す
る
command で指定したコマンドをリアルタイムクラスで実行します。
リ アルタイム優先順位値は 11 、タイムクアンタムは 250 ミリ秒
で、リアルタイム時間シグナルは SIGXCPU となります。
example% priocntl -e -c RT -p 11 -t 250 -q XCPU command
タイムシェアリングクラスの例を示します。
例 4: 非タイムシェアリングプロセスのクラスを設定する
idtype と idlist で指定した非タイムシェアリングのプロセス の
クラスをタイムシェアリングに変更し、ユーザー優先順位値と優先
順位上限値を 0 に設定します。現在タイムシェアリングクラス に
属しているプロセスには影響を与えません。
example% priocntl -s -c TS -i idtype idlist
例 5: タイムシェアリングクラスでコマンドを実行する
command で指定したコマンドを、arguments で指定した 引 数 を
使ってタイムシェアリングクラスで実行します。ユーザー優先順位
の上限値は 0 で、ユーザー優先順位は -15 となります。
example% priocntl -e -c TS -m 0 -p -15 command [arguments]
例 6: 固定優先順位クラスでコマンドを実行する
command で指定したコマンドを固定優先順位クラスで実行します。
ユー ザー優先順位値上限は 20、ユーザー優先順位は 10 で、タイ
ムクアンタムは 250 ミリ秒となります。
example% priocntl -e -c FX -m 20 -p 10 -t 250 command
【終了ステータス】
以下の終了ステータスが返されます。
-d 、-l 、-s オプションの場合:
0 正常終了
1 エラーが発生した
-e オプションの場合:
実行されたコマンドの終了ステータ正常終了れた
1 コマンドは指定された優先順位
で実行できなかった
【属性】
次の属性については attributes(5) のマニュアルページを参照 し
てください。
____________________________________________________________
| 属性タイプ | 属性値 |
|_____________________________|_____________________________|
| 使用条件 | SUNWcsu |
|_____________________________|_____________________________|
| CSI | 対応済み |
|_____________________________|_____________________________|
【関連項目】
kill(1), nice(1), ps(1), exec(2), fork(2), priocntl(2),
fx_dptbl( 4), process(4), rt_dptbl( 4), attributes(5),
zones(5), FSS(7)
『Solaris のシステム管理 (基本編)』
【診断】
priocntl は次に示すエラーメッセージを出力します。
Process(es) not found
指定されたプロセスが 1 つも存在しません。
Specified processes from different classes
-s オプションを使ってパラメータを設定しようとしたが、 -c
class オプションが省略されていて、複数のクラスのプロセス
が指定されていました。
Invalid option or argument
指定されたオプションまたは引数の中に、認識できないものま
たは不正なものがあります。
|
|