linux:kernel:cgroup:cgroup_s_redesign翻訳

All About the Linux Kernel: Cgroup’s Redesign

ここ数ヶ月に渡って,Linux カーネルのサブシステムである cgroup と,関係するが独立しているシステムとサービスのマネージャである Systemd で大きな変更が進行中である.目立つような新機能が実装されているわけではないが,カーネルの領域で問題となる構造を強制している cgroup のほぼオーバーホールに近いことを行なっている.

cgroup により,同じマシン上で動いている競合するプロセス間のキメの細かいリソースのパーティショニングが可能になっている.cgroup は技術的にはカーネルサブシステムであるが,実際は典型的なものとは全く異なるように動作し,ドライバや PCI や USB のようなアーキテクチャ特有のようなシステムとは分離している.cgroup は他のサブシステムに対し,CPU 時間やメモリ量,プロセスのグループのようなカーネルリソースに関して問い合わせたり,管理を行ったりするための手段を提供している.

問題は,cgroup に協調して動作するカーネルサブシステムに最も精通している開発者と無関係に構築されてきたことが多いという事である.「cgroup は既存のサブシステムに複雑さとオーバーヘッドをもたらす傾向があるので,他とは離れた所で何かをビルドしたり構築したりすることが少ない抵抗への道筋となることが多かったのが理由の一つである」と Linux カーネルの cgroup サブシステムのメンテなである Tejun Heo が言う.「cgroup は,従うべき例がない所で新しい領域を切り開いてきたという事実もあり,問題となるデザインが選ばれたり,比較的高いレベルの矛盾につながった」

この矛盾が創りだした大きな問題は,Heo が「標準的なカーネル API の手法に対する大きな違反」と呼ぶものであった.cgroup のインターフェースはファイルシステムであるので,他のカーネル API よりは精査の度合いが低いままきた.cgroup の階層構造の性質は,ユーザがサブディレクトリのパーミッションを変更したり,非特権のセキュリティドメイン (ie. root でないユーザ) へのアクセスを与えたりすることが可能であることを意味する,と Heo は言う.これは,個々のアプリケーションが直接 cgroup ファイルシステムを扱い,カーネルをコントロールするものにアクセスすることが可能で,事実上必要とされる検査なしにフルのカーネル API に対する直接的な操作をむき出しにしているということにつながる.

他の問題も含んでいる: 「直交する複数の階層構造,階層構造のハンドリングにおける広範囲に渡る矛盾,不必要に高いレベルの複雑さが原因で,cgroup に対してリソースを指定する事の不能」なども Heo が言っている.

cgroup は2つのパートからできている: cgroup core はシステム上で動いているプロセスの階層構造的な分類を作成する.一方で 13 のコントローラの組がコアとカーネルサブシステムをリンクしている.例えば,プロセスグループのメモリ使用量を制限するメモリコントローラは,システムからメモリ割り当てを受けることができる.また,ブロックコントローラはディスクの入出力の帯域を制限できる.などなど…

カーネル開発者は現在,cgroup core 内の単一の階層構造の実装と,コントローラ間の整合性の改良によりこれらの問題を解決しようとしている.しかし,サブシステムのつぎはぎの性質と下位互換性を保証する必要があるので,完全に abuse を止めることができない.そこで systemd やこれから現れるかもしれない他のコントロールエージェントである.

systemd は,Linux のシステム管理者のためのリソースをコントロールするための共通のツールである.systemd はサービスの状態,ログインユーザ,仮想マシンのトラッキングを cgroup に頼っており,管理者に対してカーネルリソースのコントロール用の手段を与えることによりコントロールを行なっている,と systemd 開発者の Kay Sievers は言っている.

systemd と cgroup の開発者は systemd を,高レベルなコントロール手段を作成し,カーネルへの直接アクセスを防ぐグローバルな cgroup マネージャーにしようと共同作業している.cgroup の変更が upstream カーネルにマージされる事になっている間に,既に多数の変更が行われた systemd がリリースされている.しかし,多数の作業がまだ残っている.

分離したコントローラの階層構造から,単一の統一した階層構造への変換は,カーネルとユーザランドに対する「巨大な作業」であると Sievers は言っている.

「これが完了したとき,前述の取り組みは我々に cgroup について考え,扱うはるかに構造化された方法を与えてくれるだろう.これは長い目で見れば cgroup を多くの利用者により役立つものにし,現時点では不可能な事を行う能力を与えてくれるだろう,と Heo は言っている.

  • linux/kernel/cgroup/cgroup_s_redesign翻訳.txt
  • 最終更新: 2013/08/16 12:35
  • by tenforward