CPU 配分の構成は project データベースのプロパティーとして、ネームサービスによって管理されます。
プロジェクトに関連付けられている最初のタスクまたはプロセスが setproject(3PROJECT) ライブラリ関数を使って作成されると、project データベース内で資源制御 project.cpu-shares として定義されている CPU 配分がカーネルに渡されます。資源制御 project.cpu-shares が定義されていないプロジェクトには、1 配分が割り当てられます。
次の例では、/etc/project ファイル内のこのエントリでプロジェクト x-files の配分に 5 が設定されています。
x-files:100::::project.cpu-shares=(privileged,5,none) |
プロジェクトに割り当てられている CPU 配分を、プロセスの実行中にデータベースで変更しても、プロジェクトの配分は、その時点では変更されません。変更内容を有効にするには、プロジェクトを再起動する必要があります。
project データベース内のプロジェクトの属性を変更することなくプロジェクトに割り当てられている配分を一時的に変更するには、prctl コマンドを使用します。たとえば、x-files プロジェクトに関連付けられているプロセスの実行中に、そのプロジェクトの資源制御 project.cpu-shares の値を 3 に変更するには、次のように入力します。
# prctl -r -n project.cpu-shares -v 3 -i project x-files |
詳細は、prctl(1) のマニュアルページを参照してください。
指定された資源制御の現在の値を置き換えます。
資源制御の名前を指定します。
資源制御の値を指定します。
ID タイプを指定します。
変更対象を指定します。この例では、プロジェクト x-files が変更対象です。
プロジェクト ID 0 のプロジェクト system には、起動時の初期化スクリプトで起動されるすべてのシステムデーモンが含まれます。system は、無制限の配分を持つプロジェクトとしてみなされます。したがって、プロジェクト system は、ほかのプロジェクトに与えられている配分とは関係なく、常に最初にスケジュールされます。プロジェクト system に無制限の配分を割り当てない場合は、project データベースでこのプロジェクトの配分を変更します。
前述のように、配分がゼロのプロジェクトに属するプロセスには、常にシステム優先順位 0 が与えられます。配分が 1 以上のプロジェクトは、優先順位 1 以上で実行されます。したがって、配分がゼロのプロジェクトは、ゼロ以外の配分を持つプロジェクトが CPU 資源を要求していないときにだけスケジュールされます。
1 つのプロジェクトに割り当てられる配分の最大数は 65535 です。