分12Ubuntuの次の長期サポート版のリリースが近づいています。それに合わせて,LXC関連のプロダクトもメジャーバージョンアップし,新しい長期サポート版をリリースしました。筆者はlinuxcontainers.orgやLXC/LXD関連の翻訳をやっていますので,一気に翻訳対象が増えて大変です。一度には出来ないので毎日少しずつ進めています。v2で使うファイルや,基本操作,親cgroupから子cgroupで使うコントローラを指定する方法を紹介しました。v2が持つ基本的な機能を紹介していきましょう。v2の特徴のひとつである,プロセスが末端のcgroupにしか所属できないことを紹介します。そのあと,cgroupが持つ状態通知機能について紹介します。この機能については,これまで連載で紹介していなかったv1の機能を含めて紹介します。この連載ではこれまでcgroupで各種のリソース制限を行う仕組みを「サブシステム」と呼んでいました。使われており,最近は「コントローラ」と呼ばれることが多いので,今回から「コントローラ」に統一しました。6.2(カーネル4.11.12)上で実行しています。v1が持つ問題点のひとつであった「子cgroupのタスクと親cgroupの内部タスクの競合」問題を解決するために,リソース分配を行う場合は末端のcgroupにしかプロセスが所属できなくなりました。この動きを紹介しましょう。cgroupで,子cgroupで使うコントローラを登録します(図1⁠)⁠。/sys/fs/cgroup/cgroup.subtree_control(子cgroupで使えるコントローラの登録)上のようにio,memory,pidsコントローラを登録しました。続いてcgroupを作成します。cgroupを作成すると,先ほど登録したio,memory,pidsコントローラが使えるようになっています。子cgroupを作成しプロセスを追加このtest01にプロセスを登録してみましょう(図2⁠)⁠。/sys/fs/cgroup/test01/cgroup.procs(追加したプロセスの確認)31293139無事に登録できましたね。v2で行う操作と同じです。この状態で,test01の子cgroupで使うコントローラをcgroup.subtree_controlファイルに登録してみましょう。busyエラーになりました(図3⁠)⁠。プロセスが登録されているcgroupに子で使うコントローラは登録できないこのように,自身にプロセスが所属している状態で,子cgroupでコントローラが使えるように設定しようとしてもエラーになります。それでは,test01にプロセスが所属しない状態にして,再度コントローラを登録してみます。cgroupに移動させました(図4⁠)⁠。この状態で先ほどと同様にtest01に,子cgroupで使うコントローラを登録してみましょう。pids無事,cgroup.subtree_controlファイルにコントローラが登録できました(図5⁠)⁠。プロセスを削除したので子で使うコントローラが登録できたここまでで,cgroupにプロセスが登録された状態では,子cgroupで使うコントローラを登録できないことが確認できました。子cgroupで使えるコントローラを登録した状態でプロセスを登録しようとした場合の動き次は,子cgroupでコントローラが使える状態では,そのcgroupにプロセスを登録できないことを確認してみましょう。先ほどの例で作成したtest01に子cgroupを作ってみましょう。test01のcgroup.subtree_controlファイルには,子cgroupで使えるコントローラが登録された状態のままです。pidstest02という名前のcgroupを作りました。test02で使えるコントローラを確認すると,test01のcgroup.subtree_controlで設定したコントローラが表示されています(図6⁠)⁠。cgroupは子孫にリソースを分配している状態です。この状態で,test01にプロセスを登録してみます。busyプロセスを登録しようとすると,上のようにエラーとなります(図7⁠)⁠。test01は子孫にリソースを分配しているからです。リソースを分配しているcgroupにはプロセスを登録できないここまでの実行例で,次のような制約があることがわかりました。自身にプロセスが登録された状態で,子cgroupに対してコントローラが使えるように設定しようとするとエラーになる子cgroupに対してコントローラが使えるように設定した状態で,自身にプロセスを登録しようとするとエラーになる第37回で紹介したとおり,コントローラを使ってリソース制限をする場合は,ツリー末端のcgroupにしかプロセスが登録できないようになっていることが確認できました。子cgroupで使えるコントローラを登録していない場合の動きそれでは,子孫でリソース制限ができるように設定していない状態(cgroup.subtree_controlにコントローラが登録されていない状態)で,ツリー末端以外のcgroupにプロセスを所属させようとしたらどうなるでしょう?確認してみましょう。/sys/fs/cgroup/test01/cgroup.subtree_control(test01では子孫用にコントローラ登録なし)このように,test01ではcgroup.subtree_controlは空で,子孫ではリソース制限はできない状態になっています。test02にプロセスを登録します。/sys/fs/cgroup/test01/test02/cgroup.procs(test02に登録されている)3129子cgroupであるtest02にプロセスが登録された状態で,その親であるtest01にプロセスを登録してみましょう。/sys/fs/cgroup/test01/cgroup.procs(エラーなく登録されている)3108上の実行例のように,特に制約を受けることなく,プロセスが登録できました(図8⁠)⁠。子孫でコントローラが使えるように設定していない状態では,ツリー末端以外のcgroupにもプロセスが所属できます。cgroupにはデフォルトですべてのプロセスが所属しますし,rootでリソース制限をすることはありませんので制約はありません。cgroupには以上の制約はないとなります。cgroup著者プロフィール加藤泰文(かとうやすふみ)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.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。