読者です 読者をやめる 読者になる 読者になる

解き放たれしソフトウェア

GNU/LinuxなどFLOSSについて書いてみるつもり

Gentoo で ccache を導入する意義

Gentoo Linux

Gentoo では、原則としてソースコードからビルドします。 バージョンアップの際のみならず、 USE フラグを変更した際にもおおよそは再ビルドになります。

バージョンアップの際にも、バージョンアップするソフトウェア自体だけではなく、dependent なソフトウェアも再ビルドになることが少なくありません。 例えば共用ライブラリ(shared object)のバージョンアップの際に、バージョンアップするとバイナリコンパチブル(ABI compatible)でなくなるならば、そのライブラリを利用しているソフトウェアも再ビルドしなければなりません。

このように、ソースコードが変わらないにもかかわらず再ビルドを要することがしばしばあります。 そのときに効果があるのが、 ccache です。 コンパイルした結果を保存しておいて、同じものを再コンパイルする際にはそのデータを活用することで実際のコンパイル演算を省きます。

これがもしもソフトウェアの製作者なのであれば、ソースコードの一部を書き換える度に再ビルドして動作試験をするようなこともあるでしょうから、こうした状況では ccache は効果的です。 変更していない箇所を再コンパイルする必要はありません。 そのソフトウェアが巨大であればあるほど、差が歴然になります。

つまり他方で、ソースコードが変わると ccache の効果は無くなります。

バージョンアップをしたソフトウェア自体はソースコードが変わっているはずですから、変更箇所が多ければ多いほど、ccache の効果は少なくなります。

Gentoo の、ビルド時間と負荷が大きいというデメリットについて、「ccache で解決する」と言う人もいます。 ただ、効果は限定的です。

ccache を導入した方が効率的なのか、それとも無い方がむしろ良いのか、それは個別具体的な状況によります。 「無い方が良い」と言う人も少なくありません。 キャッシュを保存するためにGB単位でディスクスペースを消費して書換えを生ずるコストが、効果に見合うのか、検討する必要もあります。