cgroups
1つのプロセスあるいは複数個のプロセスから成るグループに対して、さまざまなリソース使用量の制限をかける「cgroup」という機能があります。cgroupは「cgroupfs」というファイルシステムを介して操作します。cgroupを操作できるのはrootだけです。cgroupsfsは通常/sys/cgroup以下にマウントされます。 cgroupによって制限をかけられるリソースには、さまざまなものがあります。
CPU:グループがCPUの全リソースのうち50%など、所定の割合しか使えないようにする、など。/sys/fs/cgroup/cpu以下のファイルの読み書きによって制御。
メモリ:グループが物理メモリのうちの特定量、たとえば1Gバイトしか使えないようにする、など。/sys/fs/cgroup/memory以下のファイルの読み書きによって制御。
cgroupは、たとえばdockerなどのコンテナ管理ソフトウェアや、virt-managerなどの仮想マシン管理ソフトウェアによって、ここのコンテナや仮想マシンのリソースを制御するために使われます。特に1つのシステム上に複数の顧客のコンテナや仮想マシンが共存するマルチテナント構成のシステムにおいて使われています。 cgroups (control groups) とは、プロセスグループのリソース(CPU、メモリ、ディスクI/Oなど)の利用を制限・隔離するLinuxカーネルの機能。"process containers" という名称で Rohit Seth が2006年9月から開発を開始し、2007年に cgroups と名称変更され、2008年1月に Linux カーネル 2.6.24 にマージされた。それ以来、多くの機能とコントローラが追加された。 cgroups は以下の機能を提供している。
優先順位: いくつかのグループに、より大きな CPU やディスクI/Oスループットを割り振ったりできる。
計上: あるシステムがどれだけのリソースを使用しているか計測する。課金用など。
隔離: グループを他と切り離して異なる名前空間に置き、他のグループのプロセス・ネットワーク接続・ファイルが不可視になるようにする。
コントロール: グループをフリーズしたり、チェックポイントしたり、再開したりできる。
cgroups とは、同じ基準で集められたプロセスの集合である。グループは階層構造を持ち、それぞれのグループは親グループの制限を引き継ぐ。カーネルは複数のコントローラ(サブシステム)に cgroup のインターフェイスを通じてアクセスできる。例えば、メモリコントローラはメモリの使用を制限し、ns コントローラはプロセスを個別の名前空間に分離し、cpuacct はCPUの利用量を説明するなど。 cgroups は複数の方法で利用可能である。
libcgroup で提供されている cgcreate, cgexec, cgclassify などのツールを使用し、作成・管理する ルールエンジンデーモンを使い、自動的に特定のユーザー・グループを移動させたり、設定に記述したとおりに cgroups に命令を出したりする。
cgroups を利用する他のソフトウェア(例えば LXCや libvirt など)を通じて間接的に利用する。 sngm45.iconcgroup? cgroups?