cgroup には複数のサブシステム(controller)があるが、その中の cpu.shares について検証してみた。

cpu.shares とは

cpu.shares を設定すると、タスクが使用できる CPU 時間の割合を変更することができる。

具体的に言うと、A B2つのグループを作り、cpu.shares をそれぞれ1024 2048とした場合、B のグループにいるプロセスが、A のグループにいるプロセスより 2倍 CPU を使えるようになる。以下、実行例。

続きを読む

cgroup の通知API

cgroup の memory サブシテムを利用すると、登録したプロセスがメモリを使いすぎた際、oom-killer が動作し、対象プロセスを kill することができる(デフォルト動作)。

kill されたことは syslog など見ればわかるが、cgroup には通知APIといった機能があり、アプリ側で oom-killer が動作した際のイベントを受け取ることが可能なので、この機能を試してみる。

続きを読む

mruby-cgroup は、mruby から cgroup を利用するためのモジュールで、いわゆる libcgroup のバインディング。現在、mruby-cgroup 9cad17343 で対応しているサブシテムは以下のとおり。

  • cpu
  • cpu_set
  • cpu_acct
  • blkio

他に、cgroup のサブシステムには以下のようなものがある(CentOS 6.4)

# cat /proc/cgroups
#subsys_name    hierarchy   num_cgroups enabled
cpuset  10  1   1
ns  0   1   1
cpu 11  1   1
cpuacct 12  1   1
memory  13  1   1
devices 14  1   1
freezer 15  1   1
net_cls 16  1   1
blkio   17  1   1
perf_event  0   1   1
net_prio    0   1   1

この中から、簡単に使えそうな memory サブシステムを追加してみた。

続きを読む

mruby-cgroup とは

mruby-cgroup は、@matsumotory が開発している mruby から cgroup を利用するためのライブラリ。

https://github.com/matsumoto-r/mruby-cgroup

cgroup は linux カーネルの機能で、タスク(プロセス)のリソース(CPU, メモリ, IO, etc)を制御するための仕組み。 これを利用すると「特定のプロセスが CPU100% 使うような処理を行っても 50% しか利用させない」といった制御ができるようになる。

続きを読む

プロフィール画像

harasou

めくじらを立てない

Infra Engineer

Fukuoka Japan