今年の初めころから、すでに、FreeBSD 7.0-CURRENTな環境でお仕事をしています。
さすがに万が一のトラブルに備えて、お仕事用マシンとは別に、動作テスト用マシンがあって、そっちのほうは、月1くらいの割合で、cvsup(最近はcsupというコマンドもある)して、最新版の7-CURRENTを追いかけていくようにしています。
テストマシンで問題がないようなら、お仕事用マシンも、アップデートする、ということを続けてきました。
ところで、すでに、7.0-RELEASEに向けて、RELENG_7ブランチが切られていて、headブランチは、8-CURRENTになっているみたいです。
詳しくは、このあたりを参考に:
http://www.freebsd.org/releng/index.html
最近、お仕事用マシンで、ちょっと重い処理を裏で実行するようになったのですが、そうしたら、ユーザーインターフェイス周りのレスポンスがものすごく悪くなり、「もっさり感」が急上昇!! かなりイライラがつのってました。なにしろ、X Window System(xorg 7.3)上で、マウスを動かすだけでも、ポインタがひっかかるような動きになるほどで。
もうこうなったらダメもとで、ってことで、HyperThreadingを有効にし(←たいてい効果ないのでいつも切っておくのが私の流儀)、かつ、プロセス・スケジューラを、従来のSCHED_4BSDから、SCHED_ULEに変更してみました。
そ う し た ら ・ ・ ・
劇的な効果あり! すごく快適になりました。マシンの処理速度が、2~3ランク上になったくらいの、レスポンスのよさ。Firefoxなどが、するする動くようになってしまいました。
実際のところ、処理速度が向上したのではなく、その時々で、適材適所に、うまいことCPUパワーを振り分けられるようになったのだと思います。
とくに、ユーザーインターフェイスまわりなど、即、反応して欲しい部分について、優先的に処理が行われるようになったんじゃないですかね・・・プロセスごとに、そんな属性はないと思うんですけが(priorityだけで、こうもうまくいくのか疑問)、いったい、どういう仕組みで実現されているのか、てんでわかりませんけど(笑)。
(ちゃんと目を通してないですけど)currentのメーリングリストでは、FreeBSD 7.1-RELEASEから、SCHED_ULEをデフォルトにしよう、とか提案されていました。7.0-RELEASEじゃないところが、保守的な感じでほほえましいですね。
SCHED_ULEは、マルチプロセッサ構成のときに特に効果が出るらしいですが、ユニプロセッサ(CPUコアが1個だけ)の場合でも、ユーザーインターフェイス周りの反応がよくなるらしいです。
☆
SCHED_ULEにするには、カーネルコンフィギュレーションファイルで
options SCHED_4BSD
と書いてあるところを、
options SCHED_ULE
に変更して、カーネルを再構築します。
■ 過去記事
SCHED_ULE、そのものについては触れてませんが、参考までに。
☆
SCHED_ULEは、FreeBSD7だけのものではなくて、6.2-STABLEでも使えるみたいなのですが、これまでの経験上、動いたことが1度もないです。必ず、ブート途中でカーネルがフリーズしてしまうのです。
フリーズするときの条件は
- 6.2-STABLE (今年の春ごろ以降~今の最新)
- CPUは、Xeonなどが2個の、SMP構成
- SCHED_ULE
のときで、これらが必要十分条件ではないです。
フリーズするのは、たいてい、/etc/rcがはじまった後で、ログインプロンプトが出るまでの間に、フリーズしてしまいます(pingにも反応しない)。ひどいときは、シングルユーザーモードでも起動しないこともありました。
HyperThreadingを有効にしたときは、よりフリーズしやすくなるような、そんな感触。
たしかSCHED_4BSDのままでも、HyperThreadingを有効にしただけでフリーズしたこともあったような・・・ だからHTTを切ったんだったかな?
しかも、まったく異なるハードウェアのマシンで、2~3台ほど試して、どれもみなフリーズする・・・
今回、SCHED_ULEの非常によい効果に感激し、もう一度、最新の6.2-STABLEなマシンで、SCHED_ULEを試したのですが、やっぱりフリーズ。
あ~もういいや、ってことで、そのマシン、7-CURRENTにアップデートしてしまいました。今は、FreeBSD 7-CURRENT+HyperThreading+SCHED_ULEで、順調に動いてます(・・・実は1つ変なところがあるけど、見なかったことにしている)。
あとで気づいたのですが、もしかしてフリーズする原因は、cpufreqモジュールや、powerdが関係しているかもしれません。
そういえば、フリーズしたマシンは、どれもpowerdを動かしていました。
もうOSをアップデートしてしまったので、簡単には確認できなくなってしまいましたが。
ちなみに、FreeBSD 7-CURRENT+HyperThreading+SCHED_ULEなマシンでは、powerdも動かしています。
0 件のコメント:
コメントを投稿