Help us understand the problem. What is going on with this article?

ccache でビルド高速化。と設定のポイント

More than 1 year has passed since last update.

ccache (compiler cache)とは?

Wikipedia より

ccacheとは、CまたはC++コンパイラが出力するデータをキャッシュするソフトウェア開発ツールである。その目的は、2回目以降のソフトウェアビルドにおいてはコンパイルを避け、出力結果を再利用することにある。これは再コンパイル速度を劇的に改善する。このツールはコンパイラがソースコードをコンパイルする際の処理に割り込み、コンパイル時に固有であるべき各種データのハッシュ値を生成する。この付加的な処理により、概ね1度目のコンパイルはキャッシュを実行しない場合に比べ、コンパイルに時間がかかる。2度目以降のコンパイルでは再度ハッシュを生成し、その値がキャッシュデータのものと一致するかチェックする。一致すればccacheはコンパイラにコンパイルを指示する代わりにキャッシュされたデータを書き出す。一致しなければ、コンパイル処理はコンパイラに渡される。

つまり ccache とは、

  • C, C++ のビルド高速化ツール
  • 初回ビルドはそのまま。結果をキャッシュに持っておく。
  • 2回目以降のビルドは再利用できるならコンパイルせず、キャッシュからコピーするのみ
  • 再利用できないときは普通にコンパイル。結果はキャッシュへ。

という仕組み。

使い方

インストール

Ubuntu14.04 の場合。

$ sudo apt-get install ccache

設定

使用宣言

$ vi ~/.bashrc

# --- 追記ここから ---
export USE_CCACHE=1
export CCACHE_DIR=/root/.ccache
# --- 追記ここまで ---
$ export set CC='ccache gcc'

設定確認

$ ccache -s
cache directory                     /home/<user>/.ccache
cache hit (direct)                     0
cache hit (preprocessed)               0
cache miss                             0
files in cache                         0
cache size                           468 Kbytes
max cache size                       1.0 Gbytes

キャッシュサイズ設定

$ ccache -M 10G

$ ccache -M 100M

お好みで。

キャッシュ削除

$ ccache -C

実行

有効になっているので、そのまま make してください。

高速化状況

ccache 公式サイトの情報

https://ccache.samba.org/performance.html
にパフォーマンス結果が載っています。

Elapsed time Percent
Without ccache 367.11 s 100.00 %
ccache first time 385.67 s 105.06 %
ccache second time 9.70 s 2.64 %

自らの ccache.c のビルド時間と高速化率とのことです。

ccache 未使用のデフォルトを100%としたとき、
初回のビルドはビルド時間が105%になりますが、
2回目以降は3%になるとのことです。

# direct mode と preprocessor mode の結果の違いは端折ります。
# direct mode = ヘッダとソースファイルからハッシュを作りリビルドするか判断。デフォルト。
# preprocessor mode = プリプロセッサも通してからリビルドするか判断。 direct mode より時間がかかる。

私の手元の情報

私もビルド時間を計測してみました。
某 OSS ビルド時、初回は約2時間、 ccache 適用後は約5分になりました。

1回目

$ time make

real    115m17.953s
user    752m1.909s
sys    72m50.983s

2回目

$ time make

real    4m56.688s
user    14m37.291s
sys    4m38.293s

Tips

  • cache directory は読み書き早めの SSD にする
  • キャッシュサイズは十分に。一回ビルドして限界値に達しているなら足らないので増やしましょう

まとめ

  • ccache とは C, C++ のビルド高速化ツール
  • 初回は多少ビルド時間が長くなるが、2回目以降は劇的に早くなる

参考

ccache 公式サイト: https://ccache.samba.org/
ccache 公式マニュアル: https://ccache.samba.org/manual.html

access
SDNからセンサ、家電、電子書籍まで。ACCESSはあらゆるレイヤのデバイス、サービスを「繋げて」いきます。
http://jp.access-company.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away