DNA Cafe | Download | FreeSoftware | Java | Links

DNA - フリーソフトウエア - ccache

ccache はコンパイラキャッシュである。 C や C++ コードをコンパイルした結果を保存しておき、同じコンパイルが行なわれるのを検知し再利用することで、再コンパイルするときの速度を上げる。


典型的な使用手順

ccache を単独で使うことはほとんどなく、通常 make と組み合わせて使用する。 開発中など、何度も利用するソースコードに使用すると特に効果的である。 逆に一度しかコンパイルしないときには使う意味がない。

使うときにはコンパイルコマンドの前に ccache をつける。

$ make CC="ccache cc"

使用するコンパイラを指定したい場合には cc の部分を適当に変える。 一度コンパイルした後、再び同じコードをコンパイルするときにはキャッシュされた結果が使用される。 例えば、以下の場合、二回目の make ではキャッシュされた結果が使用される。

$ make CC="ccache cc" # 1st time
$ make CC="ccache cc" clean
$ make CC="ccache cc" # 2nd time

ccache を distcc と共に使う

CCACHE_PREFIX で distcc を指定する。 コンパイラは distcc の後に指定できる。

$ make CCACHE_PREFIX="distcc" CC=ccache


キャッシュの操作

これらのオプションは ccache を単独で起動したときにのみ適用される。 たまにキャッシュの操作が必要かもしれないが、普段は特に使う必要がない。

キャッシュの統計や大きさを見る

$ ccache -s

キャッシュ内にたまっているゴミを消す

$ ccache -c

キャッシュされたファイルをすべて消す

$ ccache -C

キャッシュの大きさを制御する

$ ccache -F size -M number_of_files_limits

初期設定はキャッシュの大きさ (size) が 1 GiB まで、 ファイルの数 (number_of_files_limits) は制限がない。


キャッシュをグループで共有する

開発者グループで ccache のキャッシュを共有できる。 この場合、共有することによってキャッシュのヒット率が上がる。 ただしファイルの時刻に関連する副作用を起こさないように注意する必要がある。 この詳細についてはマニュアルを読むこと。

一つのホストでキャッシュを共有する

まず、共有用のリソースを準備する。これは以下の手順になる。

  1. キャッシュ共有用グループを作成し、各ユーザーをグループに登録する
  2. キャッシュ共有用ディレクトリを作成してグループで読み書き可能にする。そのディレクトリ以下に setgid ビットを設定しておく

例えば ccache というグループを作って共有用ディレクトリを用意するなら、こうなる。

$ groupadd -g 1234 ccache
$ vigr

/etc/group
ccache:*:1234:user

$ mkdir common_directory
$ chgrp ccache common_directory
$ chmod g+s common_directory

リソースの準備ができたら ccache の環境変数を設定して make する。 このとき、キャッシュ共有用ディレクトリを CCACHE_DIR で、 グループで読み書きできるマスクを CCACHE_UNMASK で設定する。 また、ログを指定すると問題が起こった時に判別しやすい。

$ CCACHE_DIR=common_directory
$ CCACHE_UNMASK=002
$ CCACHE_LOGFILE=logfile
$ export CCACHE_DIR CCACHE_UNMASK CCACHE_LOGFILE
$ make CC="ccache cc"

複数のホストでキャッシュを共有する

複数のホストで分散コンパイルを行ない、さらにキャッシュを共有する場合には distcc と ccache を組み合わせる。使うための準備は以下の手順になる。

  1. make を実行するホストに共有用キャッシュを準備する(一つのホストでキャッシュを共有する場合と同様なので、そちらを参照すること)
  2. distcc にて呼び出されるホストで distccd が使えるようにする(やり方は distccd の説明を参照すること)

これらの準備ができたら ccache と distcc の環境変数を両方設定して make する。 CCACHE_PREFIX には distcc を指定する。

$ export DISTCC_HOSTS="host_to_use_for_compilation ..."
$ export CCACHE_DIR=common_directory
$ export CCACHE_UMASK=002
$ export CCACHE_PREFIX=distcc
$ export CCACHE_LOGFILE=logfile
$ make -j4 CC="ccache cc"

make に指定する -j の値については distcc のメモを参照すること。


参考ページ

http://ccache.samba.org/
ccache Home page
distcc_ja.html
distcc のメモ

Vector Valid XHTML 1.1! Valid CSS!