今回を合わせると3回に渡ってLinuxカーネルに実装されているcgroupの解説をしてきました。ここまで解説したようにかなり広範囲に渡る機能が実装されている一方で,現時点でもcgroupの改良,実装は続いています。実は,今後cgroupは大きな変更がされる予定で,この連載で説明した機能や特徴が大きく変わることになりそうです。このような時期に,この連載を書くにあたってcgroupの説明をどうすべきか少し悩みました。6もまだまだ現役ですので,現時点のcgroupを説明する意味はあると考えました。一方でcgroupの大きな変更がかなり進んできており,改良が続けられているサブシステムも存在します。筆者から見ると,次にリリースされる3.16カーネルはcgroupにとって一つの大きな変化の節目にも思えますので,ここで今後のcgroupの変化についても簡単に触れておきたいと思います。memoryサブシステム今回説明したmemoryサブシステムの機能はユーザメモリの制限でした。一方でカーネルが内部的に使用するカーネルメモリの制限機能も実装が進んでいます。現時点でもカーネルメモリの制限を行う機能は実装されておりmemory.kmem.で始まるファイルがカーネルメモリを制限するためのファイルです。使うべきではない」機能であるとされるようです。システム全体でメモリ不足に陥った時でも,cgroupに対して最低限確保するメモリ量を保証するLow-limit機能の提案がされており,実装が進んでいます。このようにまだまだ激しく変化している発展途上のサブシステムであり,しばらくは目が離せません。cgroupの再設計と変更これまで説明したようにcgroupの開発が進み多数のサブシステムが実装され,さまざまなリソースの制限ができるように実装が進んできました。一定の機能が実装された所でいろいろな問題点が指摘されるようになってきました。複数階層構造のサポートは一見柔軟性を持っているようにみえます。現在のcgroupの仕様を考えるとあまり役に立つことがないようです。複数の階層構造(=cgroupfs)を持てるといってもサブシステムは同時にはひとつの階層構造にしか所属できません。一度どこかの階層に所属してしまうと移動はできません。freezerのようなグループのタスクに対して同時に何かを行うサブシステムを考えた場合,複数のcgroupfsがあると,ひとつのcgroupfsにしか所属できないため,他のcgroupfsのcgroupに対して処理が行えなくなります。このような場合,まとめて処理を行いたいサブシステムを同じマウントポイントに同時にマウントすれば解決できます。cgroupはディレクトリによって表されますし,あるプロセスは同じcgroupfsの中では同時にはひとつのグループにしか所属できません。複数のサブシステムを同じcgroupfsにマウントしてしまうと,cgroupfsの中の構造は全く同じになってしまいますし,あるプロセスは同じcgroupに属さなければなりません。異なるサブシステムで特定のプロセスに対して違う扱いをしたいと思ってもできません。このように,複数階層構造をサポートするために内部の実装が複雑になるわりには自由度は低く,柔軟にcgroupを構成できなくなっています。cgroupの実際のユースケースでは,複数階層構造で複雑な制御が必要なケースはあまりないため,ある程度の柔軟な設定が可能で,サブシステム間の動きの一貫性が取れるように,単一階層構造へ変更することになったようです。これに伴い,プロセスのcgroupへの登録方法や登録の際の制約が大きく変わります。どのように変わるかは,変更が実装された時点のカーネルの付属文書に記載されますので,そちらをご覧ください。あるバージョンのカーネルからいきなり単一階層構造にがらっと変わることはありません。後方互換性を保ちながら変更が可能なように実装されていきます。この他にもcgroupに現在実装されているeventfdによる通知の仕組みも変わる予定のようです。リリースされている3.15カーネルではcgroupfsの内部構造が変更されています。cgroupの管理ここまで説明したように,cgroupはcgroupfsというディレクトリ構造の中のファイルでいろいろな制御パラメータを簡単に設定できます。これは逆にいうとカーネルの内部の重要なパラメータをアクセス権さえあれば自由に変えたり見たりできるということで,問題がある言われています。これだけcgroupの実装が進んで,現在のcgroupの仕様での利用が広がっているので,cgroupfsという仕組みを変えるわけにはいきません。そこで,将来的にはcgroupを管理するエージェントが単一階層構造になったcgroup全体を管理し,cgroupを使ってリソース制御を行いたい場合は,そのエージェントに依頼するといった流れになるようです。このエージェントへの名乗りをあげているのが,最近いろいろなディストリビューションで採用が進んでいるsystemdです。LTSからはcgmanagerというソフトウェアが存在しており,LXCもcgmanager経由でcgroupを操作するようになっています。まとめ第3回から3回にわけてcgroupの説明を行いました。例で説明したようにcgroupfsを直接触ってcgroupの設定を行うことはあまりないと思いますが,どのような値を設定してどのような制限がされるのかを理解しておくのは,実際にcgroupを使用してリソース制限を行う場合には重要なことだと思います。それぞれのサブシステムが持っている機能の一部しか説明できませんでしたが,これをきっかけにcgroupの理解を深めていってください。LXCの連載なのになかなかLXCの解説に入れませんが,次回もまだカーネルの機能の説明が続きます。次回はLXCで使う事の多いネットワーク関連の機能を説明したいと思います。LXC-JPグループLXCに限らず,日本語でコンテナの話題を扱う場としてLXC-JPを紹介しておきます。最近ではコンテナの話題を扱ったコンテンツも多くなりましたが,そういうところでは解決できない問題や疑問を解決するのに使えるかもしれません。名前はLXC-JPという名前ですが,LXCに限らずコンテナの話題なら何でもOKです。ご覧いただくと分かるのですが,実はそれほど活発に議論がされているわけでもありません(^_^;)。ここに相談したからと言って疑問や問題が解決するとは限りませんが,コンテナの話を扱う場の一つとして参加してみてはいかがでしょうか。筆者も参加しています。サブシステム著者プロフィール加藤泰文(かとうやすふみ)2009年頃にLinuxカーネルのcgroup機能に興味を持って以来,Linuxのコンテナ関連の最新情報を追っかけたり,コンテナの勉強会を開いたりして勉強しています。英語力のない自分用にLXCのmanページを日本語訳していたところ,あっさり本家にマージされてしまい,それ以来日本語訳のパッチを送り続けています。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。