CentOS6.5 の libcgroup-0.40.rc1-5.el6_5.1.x86_64 で、 /etc/cgconfig.conf と /etc/cgrules.conf に template 記法 を使ってみたところ意図しない挙動になりました。どうもバグがあるようです
template についての詳細は man cgconfig.conf もしくは man cgrules.conf でご確認ください :)
/etc/cgconfig.conf
下記のように設定しています
- template 記法を使用
- /cgroup/{cpu,cpuset,memory}/vagrant/ に制限を入れる
mount { cpuset = /cgroup/cpuset; cpu = /cgroup/cpu; cpuacct = /cgroup/cpuacct; memory = /cgroup/memory; devices = /cgroup/devices; freezer = /cgroup/freezer; net_cls = /cgroup/net_cls; blkio = /cgroup/blkio; } template %u { cpu { cpu.cfs_quota_us = 50000; } cpuset { cpuset.mems = 0; cpuset.cpus = 0; } memory { memory.limit_in_bytes = 104857600; memory.memsw.limit_in_bytes = 104857600; } }
/etc/cgrules.conf
下記のように設定しています
# /etc/cgrules.conf #The format of this file is described in cgrules.conf(5) #manual page. # # Example: #<user> <controllers> <destination> vagrant cpuset,cpu,memory %u * * default
yum install した libcgroup-0.40.rc1-5.el6_5.1.x86_64 で動作させた場合
うーん 設定ファイルに指定した値と違いますね
[vagrant@vagrant-centos65 ~]$ cat /cgroup/cpu/vagrant/cpu.cfs_quota_us -1 [vagrant@vagrant-centos65 ~]$ cat /cgroup/memory/vagrant/memory.limit_in_bytes 9223372036854775807 [vagrant@vagrant-centos65 ~]$ cat /cgroup/memory/vagrant/memory.memsw.limit_in_bytes 9223372036854775807
libcgroup-0.41 で動作させた場合
libcgroupの現時点の最新バージョンは 0.41 なので、設定ファイルは変えずに libcgroup だけアップグレードしてみます (方法は後述)
[vagrant@vagrant-centos65 ~]$ cat /cgroup/cpu/vagrant/cpu.cfs_quota_us 50000 [vagrant@vagrant-centos65 ~]$ cat /cgroup/memory/vagrant/memory.limit_in_bytes 104857600 [vagrant@vagrant-centos65 ~]$ cat /cgroup/memory/vagrant/mmemory.memsw.limit_in_bytes 104857600
おお 変わった!あんれー それじゃ libcgroup のバグなのかな ...
バグの検証方法
Vagrantfile と serverspec を用意していますので、下記の手順に従うと再現できます
また spec 以下に serverspec を用意していて、cgroup が設定ファイルに記述した値になっているかどうかをテストします
- vagrant のセットアップ
git clone https://github.com/hiboma/vagrant-inspect-libcgroup.git cd vagrant-inspect-libcgroup bundle install vagrant up
- libcgroup-0.40.rc1-5.el6_5.1.x86_64 での動作確認
# yum install した libcgroup でセットアップ + serverspec する vagrant provision && bundle exec rake spec
sererspec のテストがコケるはずです
- libcgroup-0.41 での動作確認
# libcgroup-0.41 でセットアップ + serverspec する LIBCGROUP_VERSION=0.41 vagrant provision && bundle rake spec
0.41 をインストールして使います。serverspec のテストが通るはずです。
イマココ
ということで、どこで挙動が変わったのかコミットログを追っています
このエントリに記述した結果とは違う結果になった、もしくはお前の設定の記述に不備があるんじゃね!?等ありましたらコメントお待ちしています
感想
rc 付きのバージョンをパッケージとして出しちゃまずいのかなと思いました。ディストリビューションに詳しい方のご意見をうかがってみたい!