SSブログ

200行パッチで脚光を浴びたcgroupとは? [Linux]

ITMedia風に煽ったタイトルをつけておいて自分はよくわかっていない。
しかも、手元にLinuxが無いので調査だけなので嘘が含まれている可能性は高いので要注意。

最近スケジューラに起因するパフォーマンスチューニングに詰まっていたので時間ができたら試してみたいと思ってまとめてみた。

http://www.atmarkit.co.jp/flinux/rensai/watch2008/watch05a.html
2008年に入った機能なので最近のカーネルなら問題なさそう。

CPU/メモリなどの「資源」の割り当て方をコントロールするためのインターフェイス。いまだと拡張が進んでいてbioとかでも使える?かもしれない。

使い方はイカの手順

・cgroup ファイルシステムをマウント
・適当な名前のディレクトリ (cgroup) を作成
・cgroup ディレクトリの中の 'task' ファイルに PID を書き込むことによりタスクを追加

LKMLでの例のTTYパッチに対する反論

The patch involved a simple edit of a users ~/.bashrc file with four new lines of code.

if [ "$PS1" ] ; then
mkdir -m 0700 /sys/fs/cgroup/cpu/user/$$
echo $$ > /sys/fs/cgroup/cpu/user/$$/tasks
fi

Then, as the superuser do this:

mount -t cgroup cgroup /sys/fs/cgroup/cpu -o cpu
mkdir -m 0777 /sys/fs/cgroup/cpu/user


Linuxの一般的なルールとして
・/dev/または/sys/fs/インターフェイスを用意してあってechoやcatなどの標準入出力で機能を制御できるようにしている。
・sysfsインターフェイスのいくつかは自前でマウントをする必要がある。
・sysfsインターフェイスは便利な半面、最新カーネルでないと実装されていないことも多い
 Debianなんかは古いカーネルを使っていることが多いので無いことが多い。

昔はWindowsだとMSが用意したABIを使うことに慣れていたのでLinuxのこういうとこはいいなぁと素直に思う。

使い方と順番が逆になっているのでわかりにくいが、実際に実行される順番は逆になるはず。
下のSuperuserでやれという部分

・cgroupタイプ(-t)、cpuオプションでマウントする。(オプションの有効化)
・cpuグループに適当なグループ(user)を作成。このとき、スーパーユーザーでなくても作業できるように-m 777をつけておくことがミソ。

これで普通のユーザーが自分のプロセス(PID)を追加することができるようになった。
あと、Debianの場合、/etc/fstabに書いておかないと再起動しても有効にならない気がするんだがどうだろうか。他のディストリだとマウントオプションを覚えておいてくれるのかな?

で、次がifの部分

・bash が「対話的に動作」している場合には、 PS1 が設定されるので、ユーザーがログインしていたらという意味。ユーザーがログインしていないのに.bashrcが参照される場合があるのかは謎。
・$$は各種プロセスID。これにはバックグラウンドジョブや $$ の値、 $PPID の値が含まれます。とのことなので、自分の属するPIDだと思う。これはあとで確認。
・echoで書きだして、自分が動かしているリソースは全部まとめてしまう。

こうすることで、ユーザーが起動しているプロセス1つ1つにCPUリソースを割り当てるわけではなく、そのユーザーが動かしているプロセスは全部まとめられるので、バックグラウンドプロセスの動作(ディスクの読み書きやフラッシュ、ACPIの割り込みや、デーモン)の動きを阻害しなく鳴る?

Xをまったく使わないので、Xを動かしているときのプロセス状態がよくわからん。

なので予想だが、
ユーザーがアプリを動かしまくる。
プロセスが増えるごとにそのプロセスにCPU資源が割り当てられる。
ヘビーなプロセスの数が増えるごとにバックグラウンド動作が阻害されてシステムのパフォーマンスが落ちる。

例えばこのパッチは、自分でXを起動するような奇特な人には効果がないと思う。というのもログインした時点のPIDをechoで突っ込んでいるので、.bashrcが動いた時点ではXが動いていないのでPIDも無い。

200行ttyパッチは、ユーザーごとであろうttyに起因する部分を内部的にcgroupに追加することで、スケジューラーが適切に動くようにするもの?


うぶんつの場合、
http://www.webupd8.org/2010/11/alternative-to-200-lines-kernel-patch.html

・/sys/fsが/devになっている。
・mount覚えてないのでrc.localでやる。
・ログインするたびにPIDが変わるので、全開放&再登録をやるようにする。

というような変更のようだ。Debianでも似たようなことができるだろうが、カーネルが古いので無かったりして。

なんかコメントでうぶんつで動かなかったみたいなのを見たが、マウントかバージョンあたりの問題だろう。

nice!(1)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 1

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。