Cgroups

cgroups (control groups) とは、プロセスグループのリソース(CPU、メモリ、ディスクI/Oなど)の利用を制限・隔離するLinuxカーネルの機能。"process containers" という名称で Rohit Seth が2006年9月から開発を開始し、2007年に cgroups と名称変更され、2008年1月に Linux カーネル 2.6.24 にマージされた。それ以来、多くの機能とコントローラが追加された。
機能.
設計目標の一つは、niceのように一つのプロセスをコントロールすることから OpenVZ や Linux-VServer のようにOSレベルで仮想化することまで、様々なユースケースを統一されたインターフェイスで提供することにある。
cgroups は以下の機能を提供している。
利用法.
cgroups とは、同じ基準で集められたプロセスの集合である。グループは階層構造を持ち、それぞれのグループは親グループの制限を引き継ぐ。カーネルは複数のコントローラ（サブシステム）に cgroup のインターフェイスを通じてアクセスできる。例えば、メモリコントローラはメモリの使用を制限し、ns コントローラはプロセスを個別の名前空間に分離し、cpuacct はCPUの利用量を計算するなど。
cgroups は複数の方法で利用可能である。
名前空間の隔離.
技術的には cgroups の一部ではないが、関連する機能として、名前空間の隔離があり、グループ内のプロセスから他のグループのリソースを見えないようにすることができる。例えば、PID 名前空間を使うとそれぞれの名前空間ごとに重複したプロセス番号を割り振ることが可能になる。マウント、UTS、ネットワーク、SysV IPC などの名前空間が利用可能。もし、"ns" cgroup がマウントされている場合、それぞれの名前空間は cgroup 階層構造内で新しいグループを作る。
名前空間は、unshare() や、clone() でフラグを設定することにより作ることができる。