Home > Apacheについて | プログラムについて | 研究について > mruby-cgroupを書いてみたがかなり便利な件

mruby-cgroupを書いてみたがかなり便利な件


Linux KernelのControl Group機能によって、プロセスの様々なリソース管理を行うcgroupをmrubyから呼び出せるようにしました。

それをmruby-cgroupと呼ぶことにします。

これがなかなか素晴らしくて、C言語で書いたプログラムにmrubyを組み込むことで、そのC言語で書かれたホストプログラムをとても簡単にリソース管理できてしまいます。

使い方

mrbgemsとして作っているので、mruby-cgroupのREADMEに従ってbuild_config.rbにgitのURLを書くと簡単にrakeでlibmruby.aに組み込めます。

現状は、CPUとIOリソースの管理の機能のみですが、cgroupのコンテキストのやり取り等、ベースとなる部分の実装はできているので、後はどんどんcgroupの機能を追加していくだけです。

例えば、以下のように書きます。

cpu = Cgroup::CPU.new("test_group")
io = Cgroup::BLKIO.new("test_group")

# cpuリソース制限
cpu.cfs_quota_us  = 30000
cpu.shares  = 2048

# ioリソース制限
io.throttle_read_bps_device "8:0", "200000000"
io.throttle_write_bps_device "8:0", "100000000"
io.throttle_read_iops_device "8:0", "20000"
io.throttle_write_iops_device "8:0", "20000"

# groupを作成
cpu.create;
io.create;

# groupに参加(引数にpidを渡せる、引数無しの場合は自分自身をattach)
cpu.attach
io.attach

#
# この辺でcpu処理やIO負荷の高い処理
#

# group削除
cpu.delete
io.delete

という風にかけます。簡単に自分自身のリソースを制御したり、別のプロセスを制御したりできますね。

例えばmod_mrubyに組み込む

例えばmod_mrubyにmruby-cgroupを組み込むと、リクエストのリソース使用量を簡単に制御できます。

例えば、以下のようなmrubyスクリプトを書いて、コンテンツ処理前にmod_mrubyでフックします。

r = Apache::Request.new

if r.filename == "/var/www/html/while.cgi"
  c = Cgroup::CPU.new("apache/mod_mruby_group")
  c.cfs_quota_us = 10000
  c.create
  c.attach
end

こんな風に書くと、while.cgiにリクエストがあった場合は、while.cgiをCPU10%で処理します。簡単ですね。ngx_mrubyでも同じような事ができるでしょう。というより、mruby-cgroupを組み込めば、cgroupに対応したLinuxのリソース管理は自由自在になるでしょう。

最後に

mruby-cgroupによって、mrubyを組み込んだプログラムを非常に簡単にリソース制御できるようになりました。これで、Linux上で動くCで書かれたホストプログラムやmrubyを組み込んだプログラムを自由自在にリソース制御することが可能になります。

これまで、動いているプロセスのリソース管理というのは機能が貧弱(niceとか)で非常に難しかったのですが、mrubyの組み込みやすさによって、あらゆるプログラムをmrubyで制御可能になり、そこにmruby-cgroupを組み込むことで効率良く、そして簡単にリソース制御できるようになるでしょう。

mruby-cgroupを書いてみたがかなり便利な件、でした。

コメント:0

コメントフォーム
Remember personal info

CAPTCHA


トラックバック:2

このエントリーのトラックバックURL
http://blog.matsumoto-r.jp/wp-trackback.php?p=3219
Listed below are links to weblogs that reference
mruby-cgroupを書いてみたがかなり便利な件 from 人間とウェブの未来
pingback from 人間とウェブの未来 - Raspberry Pi上でmod_mruby動いたよー 13-01-16 (水) 1:35

[…] Older […]

pingback from 人間とウェブの未来 - mruby-cgroupとmod_mrubyでApacheのリソースを制御、そこから得られるcgroupの挙動とは 13-02-11 (月) 19:47

[…] C言語で書かれた任意のホストプログラムにmrubyを組み込み、そのプロセスのリソースを簡単かつ強力に制御するために、mruby-cgroupというmrbgemを作り、以前の記事で紹介しました。 […]

Home > Apacheについて | プログラムについて | 研究について > mruby-cgroupを書いてみたがかなり便利な件

検索
フィード
メタ情報

Return to page top