realforce

Gamer Book

月曜日, 7月 11, 2005

FreeBSD5.4/amd64 と Athlon64X2 その2

前回FreeBSD5.4/amd64でSMPを有効にしたので、その効果を簡単に計ってみた。 FreeBSDの中でも時間のかかる処理と言えば、buildworldかと思い、makeのjオプションを変えて計測してみることにした。

makeのjオプションは、依存関係がないソースの場合に、指定した数まで並列してコンパイルするようになる。「make -j1」とすれば、常に1つずつ順番にコンパイルすることになり、「make -j2」とすれば、aaa.cとbbb.cのようなソースに依存関係がないと判別した場合、2つのプロセス(cc)を起動し、同時にコンパイルする事になる。つまり、マルチコアやマルチプロセッサが有効な環境下で「make -j1」とすれば、常に片方のCPUしか使われないことになる。このオプションは、CMT(Intel風に言うとHTT)の場合でも、上記ほどでは無いだろうが、効果はあるはずである。

また、この数値は、世間一般で「プロセッサ数 x 2」が最適値と言われているようである。 これはmakeが次の処理に移る際に、一時的に負荷が下がるので、その間のCPUが遊んでいる時間を最小にするためと思われる。上記に従えば、Athlon64X2の場合だと「make -j4」が最適値という事になるかもしれない。

※「make -j○○」の注意点としては、Makefileの書き方が悪いと、依存関係があるにも関わらず、依存関係がないと判断してしまい、コンパイル時にエラーになったりする場合があったりする。

で、肝心の計測方法は単純にtimeの結果のみ。 最適化オプションは明示的に指定しない(FreeBSD5.4の初期状態で、「/etc/make.conf」はナシ)。この条件だと「-O -pipe」というオプションになるはずである。

何はともあれ、計測の為に、キャッシュによる差が最小になるように(この場合は特にディスクキャッシュか?)、一度「make world」。

「/usr/obj」に出来る一時ファイルは、毎回終了後に消しておく。 そして、jオプションの数値を変えて繰り返すだけ。


# cd /usr/src
# rm -fr /usr/obj
# time make -j1 buildworld

結果は下記の通り


# time make -j1 buildworld
2230.302u 628.392s 45:52.90 103.8% 4318+2831k 1857+4805io 773pf+0w

# time make -j2 buildworld
2315.711u 751.442s 27:01.78 189.1% 4372+2846k 1874+4890io 773pf+0w

# time make -j4 buildworld
2362.010u 806.298s 27:34.90 191.4% 4373+2836k 1840+4913io 773pf+0w

# time make -j8 buildworld
2360.973u 811.914s 27:53.67 189.5% 4361+2825k 1865+4916io 773pf+0w

「j1」以外は、ほぼ1.7倍の数値となっているが、「j2」以上では、これといって差が出なかった。 一応は論理値どおり「j4」の時に「191.4%」と一番CPUパワーを使っているが、誤差と言い切れるかもしれない。 なお「j2」「j4」「j8」の結果では、数十秒の差が出ているが、timeを使った簡易測定なので、これはほぼ誤差だろう。

だが、もしかすると「j8」の時に、若干だが遅くなっているのは、「SMP使用時のマルチプロセスで発生するカーネルロック(排他処理)の割合が増加し、割り込みが頻発した」のが原因かもしれない。これが正しい見解だとすると、Athlon64X2などのマルチコアでも、無闇やたらに「j8」や「j16」、「j32」などは避けるべきだと言える。

また、FreeBSD5.x系列は、その開発当初から、マルチコア時代の到来を予期して、大がかりなマルチプロセッサ対応政策が進行中であり、今は実装の完成度を追求している段階で、「最適化」という段階では無いようである。 この点は、よりスケールするよう、今後のバージョンアップに期待したい。

しかしながら、「make buildworld」が30分もかからずに完了する様は、画面を流れる文字速度も凄まじく、圧巻であった。 今までの経験で「make buildworldは寝る前に実行」という通例が嘘のようである。

posted by Xune @ 00:27   links to this post 0 comments

0コメント:

コメントを投稿

この記事へのリンク一覧:

リンクを作成 | バックリンクについて | バックリンク一覧

Previous Posts