名前 | 形式 | 機能説明 | オプション | 使用法 | 使用例 | 終了ステータス | 属性 | 関連項目 | 診断
priocntl コマンドは、指定した 1 つまたは複数のプロセスの スケジューリングパラメータを表示または設定します。 また、システムのプロセススケジューラの 現在の設定情報を表示したり、 指定したスケジューリングパラメータを使って コマンドを実行したりする目的にも使用できます。
プロセスはいくつかのクラスに分けられます。 各クラスにはそれぞれ異なった スケジューリング方針が適用されます。 現在サポートされているクラスは、 リアルタイム、タイムシェアリング、対話型の 3 種類です。 各クラスの特徴およびクラス固有のオプションについては、 後述の「使用法」の「リアルタイムクラス」、「タイムシェアリングクラス」、 「対話型クラス」の項で説明します。 ユーザーは、正しいアクセス権を持っていれば、 priocntl コマンドを使って、稼動中のプロセスのクラスや 対応するスケジューリングパラメータを 変更することができます。
デフォルトの設定では、 実行可能状態にあるリアルタイムプロセスが 他のプロセスに先だって実行されます。 したがってリアルタイムプロセスの使い方を誤ると、 システムのパフォーマンスが 著しく損なわれてしまう恐れがあります。
priocntl コマンドに idlist 引数を指定する場合は、 コマンド行の最後に記述してください。 また idlist 中の要素は、空白で区切る必要があります。 idlist 引数を省略するときは、 idtype 引数として pid、 ppid、 pgid、 sid、 class、 uid、 gid を使って、 priocntl コマンド自身のプロセス 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 です。
各クラス固有のパラメータは、 対応するクラス固有のオプションを使って指定します。 詳しくは各クラスの項で後述します。 -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 のシステム管理 (第 1 巻) 』を参照してください。
priocntl -e [-c class] [class-specific options] command [argument . . .] |
この priocntl コマンドは、 command で示すコマンドを、指定したクラスと スケジューリングパラメータを使って実行します。 arguments は、 command に対する引数です。 -c class オプションを省略すると、指定したコマンドは ユーザーの現クラスで実行されます。
次のオプションを指定できます。
設定するクラスを指定します。 class 引数には RT (リアルタイムクラスの場合)、 TS (タイムシェアリングクラスの場合)、または IA (対話型クラスの場合) を指定できます。 指定したクラスが構成されていない場合には、 自動的に構成されます。
指定したプロセスに対応したスケジューリングパラメータを表示します。
指定したコマンドを、指定したプロセスに 対応したスケジューリングパラメータを使って実行します。
このオプションは、 idlist 引数 (もし存在していれば) とともに、 priocntl コマンドの処理対象となるプロセス群を指定します。 idlist がどのように解釈されるかは、 idtype の値により異なります。 idtype として指定可能な値、およびそれぞれの値に対応した idlist の解釈は以下のとおりです。
idlist はプロセス ID です。 priocntl コマンドの処理対象は、指定された全プロセスです。
idlist は親プロセス ID です。 priocntl コマンドの処理対象は、 指定された親プロセス ID を持つすべてのプロセスです。
idlist はプロセスグループ ID です。 priocntl コマンドの処理対象は、 指定されたグループに属するすべてのプロセスです。
idlist はセッション ID です。 priocntl コマンドの処理対象は、 指定されたセッション中のすべてのプロセスです。
idlist はタスク ID です。コマンドの処理対象は、指定されたタスクのすべてのプロセスです。
idlist は単一のクラス名です (リアルタイム クラスなら RT 、タイムシェアリングクラスなら TS 、対話型クラスなら IA )。コマンドの処理対象は、 指定されたクラスに属するすべてのプロセスです。
idlist はユーザー ID です。 priocntl コマンドの処理対象は、指定された ID と 同一の実効ユーザー ID を持つすべてのプロセスです。
idlist はグループ ID です。 priocntl コマンドの処理対象は、指定された ID と 同一の実効グループ ID を持つすべてのプロセスです。
idlist はプロジェクト ID です。コマンドの処理対象は、指定された ID と同一の実効プロジェクト ID を持つすべてのプロセスです。
priocntl コマンドの処理対象は、存在しているすべてのプロセスです。 この場合、 idlist 引数は指定できません。指定しても無視されます。 また以下に述べるアクセス権上の制限事項は、 この all 指定の場合でも有効です。
-d または -s オプションを指定して -i idtype オプションを省略すると、デフォルトの idtype である pid を指定したものとみなされます。
現在システム上に定義されているクラスの一覧を、 各クラス固有の情報とともに表示します。 クラス固有情報の出力形式は「使用法」の項で説明します。
指定したプロセスに対応したスケジューリングパラメータを設定します。
リアルタイムクラスのパラメータを設定する場合には、 以下のクラス固有のオプションを指定できます。
指定したプロセスのリアルタイム優先順位を、 rtpri に設定します。
指定したプロセスの時間を、 tqntm に設定します。 時間の単位を指定することも可能です (詳しくは後述)。
タイムシェアリングクラスのパラメータを設定する場合には、 以下のクラス固有のオプションを指定できます。
指定したプロセスのユーザー優先順位の上限値を、 tsuprilim に設定します。
指定したプロセスのユーザー優先順位を、 tsupri に設定します。
対話型クラスのパラメータを設定する場合には、 以下のクラス固有のオプションを指定できます。
指定したプロセスのユーザー優先順位の制限を、 iauprilim に設定します。
指定したプロセスのユーザー優先順位を、 iaupri に設定します。
リアルタイムクラスは、 高速でかつ決定力のある応答を必要とし、 スケジューリング方針に関して ユーザーやアプリケーションに対する 絶対的な制御権を必要とするようなプロセスに対して、 固定された高い優先順位を持つ スケジューリング方針を与えるものです。 システム中にリアルタイムクラスが定義されている場合には、 システム上の最上位のスケジューリング優先順位群を 制御できる唯一のクラスである必要があります。 これにより、実行可能状態にあるリアルタイムプロセスは、 他のクラスに属するあらゆるプロセスよりも先に 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 の両オプションを任意の組み合わせで指定できます。 どちらかを省略した場合、 当該プロセスが現在リアルタイムであれば、 省略されたオプションに対応したパラメータには影響ありません。 あるプロセスを他のクラスからリアルタイムクラスに変更するような 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 を指定した場合、 およびシステムに固有の最大時間値を超える 大きな値を指定した場合には、エラーとなります。
プロセスのクラスを他のものからリアルタイムクラスに変更するには、 priocntl コマンドを実行するユーザーがスーパーユーザー特権を 持つ必要があります。 また、リアルタイムプロセスの rtpri 値や時間値を変更するには、 priocntl コマンドを実行するユーザーはスーパーユーザーであるか、 あるいは現在リアルタイムクラスにいて (リアルタイムプロセスとして稼動中のシェル) その実ユーザー ID または実効ユーザー ID が 処理対象のプロセスの実ユーザー ID または実効ユーザー ID と 一致している必要があります。
fork(2) や exec(2) などのシステムコールを使った場合、 リアルタイム優先順位および時間値は 受け継がれます。
タイムシェアリングのスケジューリング方針とは、 CPU の消費に関して異なった性質を持つプロセスに対して、 公平で有効な CPU リソースの割り付けを行うことです。 タイムシェアリング方針の目的は、 対話型プロセスには速いレスポンスを提供し、 CPU 消費型のジョブには高いスループットを提供し、 さらにスケジューリングの制御権を ユーザーやアプリケーションにもある程度与えることにあります。
タイムシェアリングクラスには、 一連のタイムシェアリングユーザー優先順位値 (rtpri) が与えられていて、 そのクラスに属するプロセスに割り当てることができます。 ユーザー優先順位値の範囲は -x から +x までで、この x の値はシステムごとに設定可能であり、 以下のコマンドを使って表示することができます。
priocntl -l |
ユーザー優先順位の目的は、 タイムシェアリングクラスのプロセスのスケジューリングを、 ユーザーやアプリケーションがある程度制御できるようにすることです。 タイムシェアリングクラスのプロセスの tsupri 値を増減させれば、 そのプロセスのスケジューリング優先順位が上下します。 ただし、高い tsupri 値を持つタイムシェアリングプロセスが、低い tsupri 値を持つプロセスよりも先に実行されるとは限りません。 なぜなら tsupri 値は、タイムシェアリングプロセスの スケジューリング優先順位を決定する際の 要素の 1 つにしかすぎないからです。 システムは最近のシステム利用率など他の要素を考慮の上、 タイムシェアリングプロセスの 内部スケジューリング優先順位を動的に調整します。
システム内でのユーザー優先順位の上限値 (priocntl -l で表示できる) に加え、プロセスごとのユーザー優先順位上限値 (tsuprilimf1) が設定されています。 これは各プロセスに指定できる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 消費型のジョブには高いスループットを提供することにあります。 対話型クラスにある処理の優先順位は、 タイムシェアリングクラスにある処理と同じように変更できます。 ただし、修正された優先順位はユーザーとの対話の速い応答性を 提供するために継続します。
リアルタイムクラスの例を示します。
idtype と idlist で指定された非リアルタイムのプロセスのクラスを リアルタイムに変更し、 リアルタイム優先順位値をデフォルトの 0 に設定します。 現在リアルタイムクラスに属しているプロセスの リアルタイム優先順位値は変わりません。 指定されたプロセスの時間値は、すべて 1/10 秒に設定されます。
example% priocntl -s -c RT -t 1 -r 10 -i idtype idlist |
command で指定したコマンドをリアルタイムクラスで実行します。 リアルタイム優先順位値は 5 で、 時間値は 20 ミリ秒となります。
example% priocntl -e -c RT -p 15 -t 20 command |
タイムシェアリングクラスの例を示します。
idtype と idlist で指定した非タイムシェアリングのプロセスのクラスを タイムシェアリングに変更し、 ユーザー優先順位値と優先順位上限値を 0 に設定します。 現在タイムシェアリングクラスに属しているプロセスには 影響を与えません。
example% priocntl -s -c TS -i idtype idlist |
command で指定したコマンドを、 arguments で指定した引数を使って タイムシェアリングクラスで実行します。 ユーザー優先順位の上限値は 0 で、ユーザー優先順位は –15 となります。
example% priocntl -e -c TS -m 0 -p -15 command [arguments] |
以下の終了ステータスが返されます。
-d 、 -l 、-s オプションの場合:
正常終了
エラーが発生した
-e オプションの場合:
正常終了
コマンドは指定された優先順位で実行できなかった
次の属性については attributes(5) のマニュアルページを参照してください。
属性タイプ | 属性値 |
使用条件 | SUNWcsu |
CSI | 対応済み |
priocntl は次に示すエラーメッセージを出力します。
指定されたプロセスが 1 つも存在しません。
-s オプションを使ってパラメータを設定しようとしたが、 -c class オプションが省略されていて、 複数のクラスのプロセスが指定されていました。
指定されたオプションまたは引数の中に、 認識できないものまたは不正なものがあります。
名前 | 形式 | 機能説明 | オプション | 使用法 | 使用例 | 終了ステータス | 属性 | 関連項目 | 診断