| « 更新履歴 2006/03/23 | Fedora Core Linux 3.0に置き換えてみた » |
ccacheを使ったbuildworld
devel/ccacheのportで、buildworld(とbuildkernel)をサポートするようになった。
以下、ちょっとしたパフォーマンスの検証(※ あまりクリーンな環境下とも言えないので、あくまでも大雑把な目安としてみて下さい)。
標準での実行(ccacheなし)
ccacheの設定等は、ccacheのportsをインストールすると同時にインストールされる
/usr/local/share/doc/ccache/ccache-howto-freebsd.txt
のドキュメントに詳細が書いてあると思うけど、まずはccacheを使わずにbuildworldを行って、時間をはかってみる。
ちなみに、/etc/make.confには、
CPUTYPE?=pentium4CFLAGS= -O -pipeCOPTFLAGS= -O -pipeNO_I4B=NO_PROFILE=
の変更追記をしてるぐらい。
# uname -rp 6.0-RELEASE-p5 i386
# cd /usr/src
# ( date && make buildworld; date ) |& tee buildworld.log
# ( head -1 && tail -1 ) < buildworld.log Wed Mar 22 04:41:22 JST 2006 Wed Mar 22 05:50:33 JST 2006
大体、こちらの環境(Pentium4 1.8GHz)では、69分11秒であった。
ccacheを使ってのbuildworld(1回目)
続いて、ccacheを使ってbuildworldを行うため、ドキュメント通り、/etc/make.confに
.if (!empty(.CURDIR:M/usr/src*) || !empty(.CURDIR:M/usr/obj*)) && !defined(NOCCACHE) CC=/usr/local/libexec/ccache/world-cc CXX=/usr/local/libexec/ccache/world-c++ .endif
を追加し、/etc/csh.cshrcの方には、
setenv PATH /usr/local/libexec/ccache:$PATH setenv CCACHE_PATH /usr/bin:/usr/local/bin
を追加。
source /etc/csh.cshrcで設定を反映させ、上記の3.および4.の処理を実行(当然ではあるが、同じ条件で行うため、先程ビルドしたものはクリアしてある)。
結果は、
Wed Mar 22 12:54:23 JST 2006 Wed Mar 22 14:13:57 JST 2006
で、79分34秒。先程のccacheを使わなかった場合より、15%程時間を要した。
この時(処理終了後)のccacheの統計情報は、以下の通り。
# ccache -s cache directory /root/.ccache cache hit 545 cache miss 11492 called for link 555 multiple source files 1 not a C/C++ file 1209 no input file 1 files in cache 22984 cache size 90.4 Mbytes max cache size 976.6 Mbytes
(cache directoryの項目で表示されているディレクトリの実体はsymlinkで、別ディレクトリを参照する設定にしてある)
ccacheを使ってのbuildworld(2回目)
ccacheを使ってのコンパイルが本領を発揮するのは、溜め込んだキャッシュを使っての2回目以降のビルド作業になると思うけど、確認のため先程と同様に、前述の3.および4.の処理を実行(なお、処理開始前、ccache -zとして、統計情報を便宜上、クリアしている)。
結果は、
Wed Mar 22 14:28:45 JST 2006 Wed Mar 22 15:05:46 JST 2006
で、37分1秒。これはccacheを使用しなかった場合の所要時間のおよそ53%。
buildworldの様に同じコードベースで、何回もビルド作業を行う可能性があるものの場合、やっぱり便利かと思われる。
ちなみに、この時のccacheの統計情報は、
cache directory /root/.ccache cache hit 12029 cache miss 8 called for link 555 multiple source files 1 not a C/C++ file 1209 no input file 1 files in cache 23000 cache size 90.4 Mbytes max cache size 976.6 Mbytes
でした。
Trackback address for this post
Trackback URL (right click and copy shortcut/link location)
2 comments, 1 trackback
ついでに、テーブルにまとめてみました。
| ccache使用時 | ccacheなし | ||
|---|---|---|---|
| 一回目 | 二回目*1 | ||
| cache hit | 545 | 12029 | N/A |
| cache miss | 11492 | 8 | |
| called for link | 555 | 555 | |
| multiple source files | 1 | 1 | |
| not a C/C++ file | 1209 | 1209 | |
| no input file | 1 | 1 | |
| files in cache | 22984 | 23000 | |
| cache size | 90.4 Mbytes | 90.4 Mbytes | |
| max cache size | 976.6 Mbytes | 976.6 Mbytes | |
| (所要時間) | 79分34秒 | 37分01秒 | 69分11秒 |
- *1 二回目のbuildworldを行うのに先立って、
ccache -zと統計情報をゼロクリアしてあるので注意(※ ちなみに一回目は全くゼロのキャッシュの状態からスタート)。
一回目は、該当するキャッシュ自体が存在しないので、当然、Hitする余地がないけど、二回目は、一回目で得られたキャッシュのHitが多いので、ビルド時間が短縮される。
ただし、キャッシュが存在しない場合(一回目)は、ccacheを使わなかった時よりも、ビルド時間は長かった(ccacheを介しての処理はある程度、負荷になるのだと思う)。
つまり、buildworld等のように何度も同じソースをベースにして、ビルド作業を行う可能性のあるものは、ccacheは効果を発するけど、一回きりのビルドで済まされるものに関しては、あまり意味がないともいえる(却って負担になる)。
ちなみに、FreeBSD 6.0のデフォルトのCFLAGSは、-O2 -fno-strict-aliasing -pipeがデフォルトですよ。
This post has 303 feedbacks awaiting moderation...