公開用 Web server (ettcweb0) の構成で、kernel を作るときに、makeの-jオプションの値がどの程度が適切か試してみました。-j8 位になるかと思いましたが結果としては -j5 あたりが良さそうです。
また、ettcweb0 の構成では、SMPカーネルのメリットが出るようです。カーネル構築時に SMP のオプションを付ける事をおすすめします。
なお、この測定では 2007/05/19 Sat の時点での最新の FreeBSD 6.2 Stable を用いて、cpufreq や powerd は使用していません。
| -j | UNI kernel (SSH) | SMP kernel (SSH) | SMP kernel (Console) |
|---|---|---|---|
| 無し | 08:14 | 07:53 | 07:54 |
| -j2 | 06:09 | ||
| -j3 | 06:15 | ||
| -j4 | 08:05 | 05:38 | 05:34 |
| -j5 | 05:36 | 05:36 | |
| -j6 | 05:44 | 06:04 | |
| -j7 | 05:52 | ||
| -j8 | 08:14 | 06:06 | 05:50 |
FreeBSD のカーネルの再構築のさい、make -j4 buildkernel KERNCONF=ETTCWEB0 など -j オプションを使ってジョブの並列化すると短い時間で完了します。
この -j オプションの推薦値、私が FreeBSD と出会った、Intel 486DX4 の時代から -j4 のまま変わっていないように思います。
CPUの処理能力も入出力能力もおおきく様変わりした今も未だに -j4 なのか調べてみることにしました。結果は、上記の表のように、未だ -j4 付近が良い値のようです。
CPUのコア数も、キャッシュの規模も、HDDとCPUの処理能力の比もおおきく変わっているのに、結果に大きな変化がないのは不思議な感じです。これは、各ソースファイル間の依存関係の制約が、並列化による時間の短縮を制限しているのではないかと考えます。
SMPは有効に働いているようです。2個のCPUで倍の性能を期待すると期待はずれになるのは昔も今も変わりませんが、メモリもHDDも共通な状態で、CPUコアが2つになっただけで30%ほど早くなっています。十分な効果だと思います。特に、-j オプションなしでジョブの並列化が行われていない状態でも少しながらはっきりと高速化されています。これは、システム側処理と並列作業の効果が現れていて、アプリケーション側の対応がない状態でも高速化しているのだと思います。
ただ、-j オプションなしであまりにもはっきり現れているので、SSH の処理の負荷が重いのかも知れないと疑いました。そこで、システムコンソールから操作を行った物も測定しました。この結果を見ると、SSH の処理は、画面に文字を直接描画する処理に比べて特段に重い処理であるとは言えないと思います。
しかし、非常に小型のパソコンで、5分台で処理が終わるとは。隔世の感があります。FreeBSD を使いはじめた頃は一晩かかるのは当たり前のように思っていました。今は、make -j5 bildworld と実行しても、わずか20分程度で完了してしまいます。この強力な計算力を何に使っているのだろうか、有効に使っているのだろうかと考えてしまいます。
今回のシステムで使っている Core シリーズは、Pentume 以降、上位の CPU に移行して、能力の向上が期待を上回った初めての CPU です。Core シリーズのチップの機械は、T シリーズなどの小型の物から Xeon まで、実によく働くように思います。特にPentume4 系 の Xeon(Prestonia) がどうも空回りして発熱の割に能力が出ない感じがするのに比べると格段の差が感じられます。