Nachdem ich seit ein paar Kernel-Versionen Debian Pakete aus den Quellen von Kernel.org (optional mit Gentoo-Patches) baue, muss ich das gleiche Ding mehrmals bauen – drei mal um genau zu sein: Einmal ohne Modifikationen, einmal für Virtuelle Maschinen und ein drittes mal für Gameserver mit dem Gentoo-Patchset
In einem älteren Blogpost über ccache habe ich über die (un)Sinnhaftigkeit von ccache bei einem Gentoo-System geschrieben, da ein Cache erst bei wiederholtem Bauen der selben Prozedur greift. Also genau bei diesem Anwendungsfall, wo der Kernel mehrmals gebaut wird. Die Implementation ist einfach – der make Befehl wird mit CC=“ccache gcc“ erweitert und wir sind im Geschäft.
Damit dieser Post hier nicht nur leere Worte sind, hier ein paar Zahlen nach dem ersten gebauten Kernel, der wie üblich etwa eine Stunde baute:
cache hit (direct) 0 cache hit (preprocessed) 0 cache miss 15556 cache hit rate 0.00 % called for link 29 called for preprocessing 2857 unsupported code directive 4 no input file 682 cleanups performed 0 files in cache 46654 cache size 7.2 GB max cache size 10.0 GB
Der erste Compile brachte keine Treffer im Cache und somit auch keine Zeitersparnis. Der zweite Durchgang hingegen zeigte ein paar Treffer. Die Ergebnisse:
cache hit (direct) 34 cache hit (preprocessed) 774 cache miss 7318 cache hit rate 9.94 % called for link 28 called for preprocessing 1964 unsupported code directive 4 no input file 682 cleanups performed 17 files in cache 53763 cache size 8.8 GB max cache size 10.0 GB
Um noch mehr Geschwindigkeit herauszuholen wäre der Einsatz von distcc denkbar. Die Implementation ist genauso einfach durch die Erweiterung der CC Variable auf CC=’ccache distcc gcc‘ machbar, aber der Aufwand mit gleichen Compilern und besserem Netzwerk als ich hier zur Verfügung habe…