TenForward

技術ブログ。はてなダイアリーから移転しました

Linux

Linux 4.10 で入った Overlayfs の redirect_dir 機能の動きを軽く追ってみた

ちょっと前にリリースされたカーネルですが、4.10 で overlayfs に変更が入っていましたのでちょっと調べてみました。 Overlayfs についてはこちらをどうぞ (ちょっと古い記事なのでカーネルにマージされる前の仕様も説明しています)。 Linuxで学ぶコンテナ…

pivot_root できる条件

ふとしたきっかけで man 2 pivot_root の制限に疑問を持ったので、雑にカーネルのコードを読んでみたエントリです。かなり雑にみただけなので間違いの指摘を歓迎します。というか指摘を受けるために書いたようなもの pivot_root の使われ方 コンテナを起動し…

Linux 4.11 での cgroup 関連の話題

Linux 4.11 で cgroup に動きがありました。と言ってもしばらく新機能追えてないので、これまでも色々変更されているかも? 追加された事自体を忘れてしまいそうなのでメモしておくだけで、詳しく調べるわけではありません。 rdma controller rdma コントロー…

cgroup 初期化時の v1 の処理だけ抜き出して追ってみる

cgroup 初期化のメモ。間違っている可能性大なので信用しないでください。何度も同じところを繰り返し見てるので忘れないようにメモです。 サブシステム (cgroup_subsys) と各グループのサブシステムの状態 (cgroup_subsys_state) とそれらのセット (css_set…

cgroup の SUBSYS マクロ

Linux カーネルの cgroup 関連のコードのお話。 cgroup_subsys.h というヘッダがあって、cpuset の部分だけ抜き出すと #if IS_ENABLED(CONFIG_CPUSETS) SUBSYS(cpuset) #endif という風に SUBSYS マクロの中に cpuset のようなサブシステム名を与えているだ…

cgroup のデフォルトルート cgrp_dfl_root

このエントリはほぼ個人的なメモで、色々唐突です。cgroupのコアは kernel/cgroup.c に色々処理があります。その中に「デフォルトヒエラルキ(のルート)」という変数があります。4.1 kernel のコードです。 /* * The default hierarchy, reserved for the s…

ip netns コマンドが意外にきめ細やかにコンテナを作ってくれる

(2016-07-26: 誤記修正しました "setns -> nsenter")お手軽にシェルスクリプトなんかでコンテナを作る場合の強い味方といえば util-linux の unshare/nsenter コマンド iproute2 の ip netns コマンド が代表的でしょう。"ip netns" は Network Namespace 作…

cgroup なのか cgroups なのか

割とどーでもいい話(でも気になってた人多いはずw)以前、第4回のコンテナ勉強会でも質問が出たのですが、cgroup/cgroups という機能の正式な名称は cgroup なのか cgroups なのか、というのはよくわかりませんでした。私は、英語って単数・複数をきちんと…

4.5 カーネルで stable となった cgroup の単一階層構造 cgroup v2 の io コントローラ

Control Group v2 以前も少し紹介していましたし、連載でも少し触れましたが、今広く (?) 使われている cgroup は色々問題があって、単一階層構造の cgroup が開発されていました。この辺りは Linux 3.16 から試せる cgroup の単一階層構造 (1) - TenForward…

cgroup namespace (2)

前回は /proc/$PID/cgroup ファイルが Namespace を反映した形で記載されているのを見ました。 とりあえずここまで。これだけだとすでにマウントされている cgroupfs はそのままの元のディレクトリ階層で見えるので、/proc/$PID/cgroup だけ見え方が変わって…

cgroup namespace (1)

以前、RHEL6 のころに ns cgroup ってサブシステムが cgroup にありましたが、それとは別のお話。4.6 カーネルに入る cgroup namespace のお話です (Ubuntu 16.04 のカーネルには入るようです) 。namespace ごとに別の cgroup ツリーが見えるようにするもの…

Linux 4.3 の Process Number Controller (1)

連載書いたり、勉強会で発表したりしているとなかなかブログが更新できませんね。久々の更新です。これを書いている時点では Linux カーネルの 4.3-rc1 がリリースされていますが、久々に cgroup に新しいコントローラが追加されそうですね。 pids.txt 説明…

4.0.2 kernel と非特権コンテナ

(2015-06-11 追記) 以下の問題は 4.0.5 カーネルで解決しています。手元 (Plamo 5.3) では 4.0.2 カーネルで LXC の非特権コンテナを起動するとカーネルが固まります。その時のログは以下です (netconsole 経由で取ったので見にくい)。 https://gist.github.…

Google Chrome の Namespace 利用のメモ

(2016-05-16 Chromium の参考ページが移動していたので更新)過去に勉強会なんかで「Linux 版の Chrome は Namespace を使ってる」という話をしたことあるけど、そういえば確認したことはなかったので確認したメモ。参考はこの辺り。 Linux Sandboxing pidns …

docker の CPU 隔離性

某所で話題になってたので。3.17.1 kernel で試してます (Plamo Linux 5.2)docker でも何でもなくて単に Linux kernel の cgroup がちゃんと動いてるかって話なんですが。:-)(2014-10-29 追記) なんか docker ってキーワード入ってるからかわかりませんが、…

lxc-checkpoint で CRIU を使って LXC コンテナの checkpoint/restore 処理

CRIUを最後に試したのは昨年11月でした。 CRIU (3) - TenForwardの日記 CRIU (2) - TenForwardの日記 CRIU (1) - TenForwardの日記 いつの間にやらバージョンも 1.3 とかで進化しています。でも LXC できちんと動かないよという話だったので動向だけ見守って…

cgroup の devices サブシステムのどうでも良いトリヴィア

lxc-checkpoint が動かないのでデバッグしたり、パッチ書いたり、リジェクトされたりしてる時に気づいたどうでも良い知識。cgroup の devices サブシステムは デバイスタイプ デバイスノード番号 アクセス権 をスペース区切りした文字列を devices.allow, de…

Linux 3.16 から試せる cgroup の単一階層構造 (2)

前回の続きです。 グループで使えるサブシステム "cgroup.subtree_control" ファイルにサブシステムを指定することで子グループで使えるサブシステムが指定できることを前回説明しました。これに対して、あるグループで使えるコントローラを一覧できる "cgro…

Linux 3.16 から試せる cgroup の単一階層構造 (1)

Linux 3.16 からカーネルソースツリーの Documentation/cgroups の下に一つ文書が増えているのに気づいた方もいらっしゃるのではないでしょうか。cgroupの使い方が大幅に変わる変更がマージされています。増えた文書は以下。 Documentation/cgroups/unified-…

setns を UTS Namespace をネタにおっかける

Linux:実行中プロセスの名前空間切り替え - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ masami256 さんのコンテナシリーズ、勉強になりますね。Linux カーネルの Namespace (名前空間) を扱うシステムコールのうち、既存のプロセスの Namespace を制御する …

UTS Namespace (名前空間) を追っかける

コンテナが盛り上がってるので、エラい人たちが結構色々な情報を色々な所に書いてくれるので、簡単に知識が手に入るようになってきましたね。というわけで、私のようななんちゃってな人でも気軽に処理を追っかけることができるようになってきましたから、久…

Namespace Cgroup

全く役に立たないエントリ。こんな Cgroup 使わないように。とりあえず折角調べたので忘れないようメモ。昔々、ns cgroup なるものがありました。正式名称は "Namespace Cgroup" どうやら namespace と cgroup を連携させるものだったようで。しかし、2.6.37…

linux 3.14.8, 3.15.1 での非特権コンテナ

(追記: 2014-07-01) この問題に関するパッチがマージされました。 Fix to work lxc-start with unprivileged containers on recent kernel · lxc/lxc@1bd3214 · GitHub Fix to work lxc-destroy with unprivileged containers on recent kernel · lxc/lxc@30…

overlayfs と LXC 非特権コンテナの snapshot によるクローン

kernel に入るぞ、と言われつつ入ってない overlayfs。いつですかね?なかなか凝ったことを試す時間が取れない今日このごろ、非常に薄い内容のエントリです。(2014-05-15 追記) LXC では、ファイルシステムの機能を利用した snapshot による clone をサポート…

cgmanager を試す (2)

cgmanager を試す (1) - TenForwardの日記 の続編.Ubuntu 14.04 LTS で LXC をインストールしたときに一緒に入る cgmanager を使ってみます.前回試してからだいぶ変わっている感じがしますね.cgmanager を試すというより,cgmanager サポートでコンパイル…

Linux 3.14 で net_cls cgroup に追加された netfilter 対応

久々に cgroup 大物新機能に沸いてます! (久々じゃないかw) kernelnewbies の 3.14 ページ に書いてない気がするので危うく見逃す所でした.早速試してみました (カーネル付属文書なぞっただけ :p)対応するコミットはこちら. netfilter: x_tables: lightwei…

(改訂版) docker 0.9 で導入された libcontainer の Namespace 関連の処理

先に書いたエントリ はそれなりにアクセスがあるようですが,実は結構デタラメで間違いがあることに気づいたので,改めて調べて書きなおしてみました.相変わらず Go シロートですので,このエントリも間違ってる可能性はありますので,興味のある方はご自分…

(内容おかしいので書き直し中) docker 0.9 で導入された libcontainer の Namespace 関連の処理

(2014-03-25) 書き直しました.このエントリも参考になる部分はあるので置いときます ^^; → (改訂版) docker 0.9 で導入された libcontainer の Namespace 関連の処理 - TenForwardの日記 (2014-03-25) このエントリは色々おかしいので書きなおし中です (201…

lxc コンテナの config から libvirt 用の定義を生成

libvirt 1.2.2 の新機能に bhyve: add a basic driver (Roman Bogorodskiy), add LXC from native conversion tool (Cédric Bosdonnat), vbox: add support for v4.2.20+ and v4.3.4+ (Jean-Baptiste Rouault), Introduce Libvirt Wireshark dissector (Yuto…

cgmanager を試す (1)

cgmanager についてはドキュメントがほぼないため,以下には間違いが含まれている可能性があります.見つけたら指摘してくださいね.Linux Containers - CGManager - Introduction は名前通り cgroup を管理するソフトウェアです.cgroup の管理を D-Bus 経…

LXC 1.0 までのマイルストーン

(2014-01-16 追記) 以下の予定が発表されてから,あまりにも多くの変更 (仕様レベルの変更,機能追加) がされたため,Version 表記は rc1 でなく beta2 になっています.download テンプレート,cgmanager 対応のコードもマージされています.今年もよろしく…

一般ユーザでの lxc コンテナの実行

(2014-04-19 追記) このエントリは古い情報ですので,Ubuntu 14.04 LTS での非特権コンテナ - TenForwardの日記 をご覧ください.カーネル/VM Advent Calendar 2013 - Qiita のために書いたエントリです.2 回も書く気はなかったけど,折角コンテナ関係のこ…

Linux 3.12 と lxc

以下は 3.13, 3.12.9以降で動くようになっています!! (最後に追記してます)Linux 3.12 がリリースされていますね.今回で xfs への User Namespace の実装が完了して,xfs を有効にしたまま User Namespace が使えるようになっていますので,とりあえずコン…

CRIU (3)

(ちょっと雑なのであとで書き直すかも?)前回,CRIU を試してから丁度 1 年.前回はカーネルは 3.7 ベースで専用のもの,CRIU は 0.2 の頃でした.実はこの時も LXC コンテナで dump/restore するのを試したのですが,やり方が悪かったのか,まだ機能的に無理…

lxc 的 Plamo Linux のススメ

連休中なので技術的要素のあまりないお話を :)私が Linux を使い始めた頃といえば,Distribution は Slackware Linux で,そこに JE という日本語環境を整えるパッケージを集めたものを追加でインストールするのが主流でした.そこに現れたのが? Plamo Linux…

『第2回 コンテナ型仮想化の情報交換会@東京』を開催し『Linux コンテナ入門』というお題で発表してきました

(2013/10/13 追記) アンケートの結果を公開しました!! → アンケート結果]10/5 に東京でコンテナ型仮想化の勉強会を開催し,『Linux コンテナ入門』というお題で発表してきました.きちんと数えてませんが,100 名前後の参加だったでしょうか (もっと多い?)@m…

Linux 3.10 で memory cgroup に追加された Memory Pressure 通知機能

3.8 リリース後は,コンテナに関連する Namespace, cgroup について,大きな変更はありませんが,それぞれ細かい改良が加えられて進化はしています.3.10 では memory サブシステムに Memory Pressure 通知の機能が追加されました.従来からある eventfd を…

Plamo Linux 5.1 で docker

Plamo Linux は aufs をサポートしていますし,lxc パッケージもありますので,docker を動かすベースとしての必要条件は満たしています.そこで動かしてみましたよ. lxc パッケージをインストールしていない場合はインストールします.(lxc が動作するよう…

Plamo Linux 5.1 で vagrant-lxc を使う

(2013-10-30追記) lxc 1.0 の開発が進み,Plamo の lxc パッケージも 0.9.0 から 1.0 開発版になったのに伴い,vagrant-lxc は動かなくなっていましたが,vagrant-lxc のバージョンアップでまた動くようになっています.とりあえず手元では vagrant-lxc 0.6.…

PID Namespace 内の reboot システムコール

lxc-devel ML をなんとなく眺めていたら "On any recent kernel, reboot syscall from inside a non-init pid-ns will not reboot the host." なんて書いてありました.ほほぅ.というわけで調べてみると kernel/sys.c にありました. SYSCALL_DEFINE4(reboo…

Plamo Linux 5.1 で vagrant は vagrant-kvm の方が楽だった

(2014-01-15 追記) Vagrant 1.4 系だとまだ vagrant-kvm はちゃんと動かないようです.ご参考さっき『Plamo Linux 5.1 で vagrant を Libvirt Provider 経由で使う - TenForwardの日記』って書いたばっかりなのに,次は vagrant-kvm っての試してみようかと…

Plamo Linux 5.1 で vagrant を Libvirt Provider 経由で使う

(追記)こちらのエントリの方法の方が断然オススメです!!久々の更新なのに,今回も公式文書にある通りにやったら出来た,程度なので相変わらず情報が少ないです... (長いわりにねえ) :p最近何か色々な所で何かやろうとすると「vagrant を使います」みたいな記…

libvirt の lxc ドライバを久々に試す

本当に試しただけ.ほぼ自分用のメモです.まあ,結論としては,まだ libvirt でコンテナを起動する意味はあまりないなあ,というところです. Ubuntu 13.04 on Ubuntu 13.04 Ubuntu の文書 だといくつか注意点が挙がってますね.主に Linux Containers との…

第1回コンテナ情報交換会で『Linuxコンテナ最新情報』というお題で発表してきました

6/1 に 第1回コンテナ情報交換会 をまったりと神戸で開いてきました.そこでの資料です. https://speakerdeck.com/tenforward/linux-kontenazui-xin-qing-bao-2013-06-01 (Speakers Deck) https://guinan.ten-forward.ws/lxc-20130601/ (オリジナルの html …

Linux 3.8 の User Namespace 機能 (4)

前回で 3.9 kernel での準備が出来たので,今回は少しだけユーザ名前空間を体験してみました.なお,今回の評価はもうすぐ新しいバージョン 5.1 がリリース予定の Plamo Linux 5.1beta1 相当の環境上で行っています(宣伝).ここに自前でビルドした 3.9 カー…

Linux 3.8 の User Namespace 機能 (3)

3.8 で実装が完了した! ということで楽しみにしていたユーザ名前空間 (User Namespace) ですが,3.8 の時点ではカーネルのかなりの機能を無効にしないと有効に出来ない状態でした.これでは手元のカーネルをユーザ名前空間を有効にして make できないなあと…

util-linux の nsenter コマンド

util-linuxの 2.23 (現在 2.23-rc1) で nsenter なるコマンドが追加されてるみたいですね.lxc-attach と同様の事ができそうです,と思って試してみました. lxc-start でコンテナ起動# lxc-start -n test01 -d lxc-info で init の PID を調査# lxc-info -n…

Linux 3.8 で改良された memory cgroup (2)

ここに書いてあるのはカーネル付属のドキュメントに書かれてある事ですので,正確な情報はそちらをご参照ください. ;)前回 (Linux 3.8 で改良された memory cgroup (1) - TenForwardの日記) 試したように,Linux 3.8 からカーネルメモリに対して制限をかけ…

Linux 3.8 で改良された Namespace 機能と lxc-attach コマンド

以前から lxc には lxc-attach というコマンドが含まれていました.このコマンドは OpenVZ やその商用版の Virtuozzo にある vzctl exec というコマンドと同じ目的のもので,コンテナ外のホスト OS 上から直接コンテナ内のコマンドを実行するためのものです…

Linux 3.8 で改良された memory cgroup (1)

Linux 3.8 で User Namespace 機能が入った!と浮かれていて,cgroup のメモリコントローラに入った改良に全く気づいていませんでした (^_^;) 他に freezer サブシステムにも改良加わってますよ (階層化かな).この辺りでしょうか. KS2012: memcg/mm: Improv…