以前は、sched_userなどのカーネル構成オプションがcgroupsの下にありました。これにより、(私の知る限り)すべてのユーザーがシステムリソースを公平に共有できるようになりました。 2.6.35では使用できません。すべてのユーザー(rootを含む)間でio/cpu/memoryリソースを自動的に共有するようにシステムを構成する方法はありますか?これまでにcgroupを設定したことがありません。そうするための良いチュートリアルはありますか?どうもありがとうございました。
カーネル documentation は、cgroupの一般的なカバレッジと例を提供します。
cgroups-bin
パッケージ(これはlibcgroup1
)ディストリビューションによって既に提供されているので問題ありません。
構成は、次の2つのファイルを編集することによって行われます。
/etc/cgconfig.conf
Libcgroupによって、制御グループ、それらのパラメーター、およびマウントポイントを定義するために使用されます。
/etc/cgrules.conf
プロセスが属するコントロールグループを定義するためにlibcgroupによって使用されます。
これらの構成ファイルにはすでに例が含まれているため、要件に合わせて調整してみてください。マニュアルページはそれらの構成を非常によくカバーしています。
その後、ワークロードマネージャーとルールデーモンを起動します。
service cgconfig restart
service cgred restart
ワークロードマネージャ(cgconfig)は、リソースの割り当てを担当します。
マネージャーに新しいプロセスを追加する:
cgexec [-g <controllers>:<path>] command [args]
すでに実行中のプロセスをマネージャーに追加します。
cgclassify [-g <controllers>:<path>] <pidlist>
または、cgrules.confファイルとCGroup Rules Daemon(cgred)を自動的に上書きします。これにより、新しく生成されたすべてのプロセスが指定されたグループに強制されます。
/etc/cgconfig.confの例:
group group1 {
perm {
task {
uid = alice;
gid = alice;
}
admin {
uid = root;
gid = root;
}
}
cpu {
cpu.shares = 500;
}
}
group group2 {
perm {
task {
uid = bob;
gid = bob;
}
admin {
uid = root;
gid = root;
}
}
cpu {
cpu.shares = 500;
}
}
mount {
cpu = /dev/cgroups/cpu;
cpuacct = /dev/cgroups/cpuacct;
}
/etc/cgrules.confの例:
alice cpu group1/
bob cpu group2/
これにより、ユーザー「alice」と「bob」の間で約50〜50のCPUリソースが共有されます。