TenForward

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

Namespace Cgroup

全く役に立たないエントリ。こんな Cgroup 使わないように。とりあえず折角調べたので忘れないようメモ。

昔々、ns cgroup なるものがありました。正式名称は "Namespace Cgroup" どうやら namespace と cgroup を連携させるものだったようで。

しかし、2.6.37(?) で

The ns_cgroup will be removed very soon. Let's warn, for this version, ns_cgroup is deprecated.

https://lists.linux-foundation.org/pipermail/containers/2010-September/025531.html

作るたびに警告がログに出るようになり (コミット])、ついに 3.0 で

The ns_cgroup is an annoying cgroup at the namespace / cgroup frontier and leads to some problems

http://lists.linuxfoundation.org/pipermail/containers/2011-January/026343.html

削除されました(コミット])。

しかし、CentOS 6 では生き残ってます (RHEL 6 でも)。

[root@centos6 cgroup]# cat /proc/cgroups 
#subsys_name	hierarchy	num_cgroups	enabled
cpuset	1	1	1
ns	1	1	1
cpu	1	1	1
cpuacct	1	1	1
memory	1	1	1
devices	1	1	1
freezer	1	1	1
net_cls	1	1	1
blkio	1	1	1
perf_event	1	1	1
net_prio	1	1	1

使ったことなかったので試してみました。libcgroup とかインストールしないで /cgroup に cgroupfs をマウント。なんとこの時点では /sys/fs/cgroup はありません (作れませんし)。/etc/fstab にこんな風に記述します。

cgroup			/cgroup			cgroup	defaults	0 0

unshare コマンドはあるので、とりあえず mount, uts, ipc namespace を作成して bash を実行。

[root@centos6 ~]# unshare -m -u -i /bin/bash
[root@centos6 ~]# echo $$
1136

PID は 1136 番です。ここで /cgroup を見てみると

[root@centos6 ~]# ls -F /cgroup/
1136/                             cpuset.memory_pressure_enabled
blkio.io_merged                   cpuset.memory_spread_page
blkio.io_queued                   cpuset.memory_spread_slab
    : (snip)
[root@centos6 ~]# cat /cgroup/1136/tasks
1136
1144

おぉ、PID で cgroup が作られています。そりゃ PID 一巡したらマズいわな。:p tasks にも登録されてますね。

ちなみに CentOS6 で lxc-0.9.0 をインストールしてみましたが、ns cgroup サブシステムがマウントされていると「cgroupが作れへん」と言われてエラーでコンテナ起動しませんでした。

libcgroup インストールしてもきっと使ってないんですよね (未確認)。