Portál AbcLinuxu, 4. května 2025 12:27
Ako dlho sa na vašom počítači kompiluje nová verzia prehliadača Mozilla
Firefox, prehrávača MPlayer alebo celé KDE, či Gnome? Pár minút? Tak to
už asi poznáte programy ccache
a distcc
.
ccache
dokáže zrýchliť opakované kompilovanie 5 až 10krát.
Je výtvorom Andrewa Tridgella z projektu Samba, ktorý sa inšpiroval ideou
projektu compilercache.
Pred každým spustením gcc
sa ccache
pozrie do
svojej databázy a pokúsi sa v nej nájsť skompilovaný súbor. Ak výsledok
kompilácie nenájde, spustí gcc
a jeho výsledok vloží do
databázy. Pri vývoji aplikácií sa medzi dvoma verziami aplikácie často mení
iba zopár súborov a ostatné zostávajú nedotknuté. Pri kompilovaní novšej
verzie už raz kompilovaného programu má ccache
veľkú šancu
usporiť čas potrebný pre kompiláciu už raz skompilovaných súborov.
Portage dokáže ccache
používať automaticky. Stačí ho len
nainštalovať:
# emerge ccache
a pridať do súboru /etc/make.conf
do premennej
FEATURES
:
FEATURES="ccache"
Ak chcete ccache
používať mimo Portage (v inej distribúcii
alebo pri programovaní), musíte dať cestu k binárkam ccache
do
premennej prostredia PATH
(pred cestou ku
gcc
):
# export PATH=/usr/lib/ccache/bin:$PATH
Databáza ccache
bude rásť a rásť, preto je dobré stanoviť
jej nejaký limit:
# ccache -M 1G
Používatelia Gentoo si tento údaj môžu nastaviť aj v súbore
/etc/make.conf
:
CCACHE_SIZE="1G"
Z dielne Samby pochádza aj program distcc
, tentokrát je
jeho autorom Martin Pool. Distcc distribuuje kompiláciu medzi viacerými
počítačmi. To sa oplatí hlavne, pokiaľ chcete inštalovať Gentoo na pomalý
počítač a máte k dispozícii jeden, alebo viac rýchlejších strojov.
Program distcc
najprv spracuje vstupný zdrojový súbor preprocesorom
(gcc -E
). Vznikne tak zdrojový súbor, ktorý obsahuje
všetky hlavičkové súbory, ktoré sú potrebné na jeho skompilovanie. Program
distcc
tento súbor pošle na niektorý zo vzdialených počítačov,
kde sa spustí kompilácia. Skompilovaný súbor s príponou .o
(object), sa vráti späť na klientsky počítač a distcc
sa ukončí.
Aby tento postup kompiláciu urýchlil, musí byť kompilovaných
viacero zdrojových súborov naraz. Program make
podporuje paralelnú
kompiláciu. Počet súčasne spustených kompilácií sa nastavuje parametrom
-jN
(N - počet paralelných kompilácií). Používatelia
Gentoo si tento parameter môžu nastaviť v súbore
/etc/make.conf
:
MAKEOPTS="-j2"
S počtom paralelných kompilácií sa musíte trochu pohrať. Začať môžete s
hodnotou rovnou počtu procesorov na kompilovanie plus jeden (napríklad ak
kompilujete na dvoch dvoj-procesorových počítačoch nastavte
MAKEOPTS="-j5"
). Tento počet vám pomôže doladiť grafický
monitor distccmon-gui
.
Distcc treba samozrejme nainštalovať, v Gentoo jednoducho:
# emerge distcc
Portage vie používať distcc
automaticky, len ho musíte
pridať do súboru /etc/make.conf
do premennej FEATURES:
FEATURES="distcc"
Ak nepoužívate Gentoo, musíte si binárky distcc
pridať do
premennej PATH
ešte pred cestou ku gcc
. Ale
pozor, ak používate aj ccache
, najprv musí ísť cesta k
ccache
, potom k distcc
a až potom všetko
ostatné:
# export
PATH=/usr/lib/ccache/bin:/usr/lib/distcc/bin:$PATH
Na vzdialených počítačoch musíte buď spustiť démona
distccd
, nakonfigurovať initd
server alebo
sprístupniť počítač cez ssh
. Odporúčané je spustiť démona
distccd
:
# distccd --allow 192.168.1.0/24
Používatelia Gentoo budú mať po inštalácii k dispozícii rc skript:
# rc-update add distccd default
# /etc/init.d/distccd start
Parameter --allow
je veľmi dôležitý. Určuje, ktoré IP
adresy budú mať prístup k distccd
serveru. Používatelia Gentoo
si tento a ďalšie parametre distcc
môžu nastaviť v súbore
/etc/conf.d/distccd
.
Nakoniec na klientskom počítači nastavte zoznam a limity pre vzdialené
servery. To sa robí pomocou premennej
prostredia DISTCC_HOSTS
:
# export DISTCC_HOSTS="localhost/2 192.168.1.1/2 superserver.com/8"
V Gentoo použite konfiguračný nástroj distcc-config
:
# distcc-config --set-hosts "localhost/2 192.168.1.1/2 \
superserver.com/8"
# env-update
# source /etc/profile
Ešte musím upozorniť, že ccache
je citlivý na to, či
používate distcc
alebo nie. Ak ste prvú verziu kompilovali
distribuovane a pri kompilácii novej verzie už nemáte k dispozícii viac
počítačov a distcc
vymažete za súboru
/etc/make.conf
, ccache
si bude myslieť, že ste
zmenili verziu gcc
a medzivýsledky kompilácie vo svojej
databáze jednoducho nenájde.
Ak hrozí, že nebudete môcť kompilovať na viacerých počítačoch pomocou
distcc
, je lepšie distcc
do súboru
/etc/make.conf
nedávať a spúšťať distribuované kompilovanie
nasledovne:
# FEATURES="distcc" emerge parametre
- ma centralni scheduler, takze na rozdil od distcc rozdeluje ulohy na jine pocitace inteligentne (nepouziva zatizene pocitace, snazi se pouzivat nejrychlejsi nejdrive, sam hleda ostatni pocitace,...)
- dokaze jednoduse mixovat ruzne druhy gcc a pocitacu (mit treba i686+gcc-3.x a nechat si prekladat na amd64+gcc-4.x neni problem)
slon ~ # emerge -pv sys-devel/icecream These are the packages that I would merge, in order: Calculating dependencies !!! All ebuilds that could satisfy "sys-devel/icecream" have been masked. !!! One of the following masked packages is required to complete your request: - sys-devel/icecream-0.6.20040829 (masked by: ~x86 keyword) For more information, see MASKED PACKAGES section in the emerge man page or refer to the Gentoo Handbook.
Limit ccache nastaveny pres `ccache -M 1G` *neovlivni* Portage, protoze Portage pouziva jiny $CCACHE_DIR nez root (defaultne je to "~/.ccache" iirc). Reseni je pri *kazdem* spusteni cehokoliv, co saha na ccache, at uz velikosti cache nebo monitory, nastavit spravnou $CCACHE_DIR (nekde pod /var/portage asi, nevim, nepouzivam, jsem liny zjistovat). Jinak u "distcc" je dobry zminit, ze se ma pouzivat jenom tehdy, pokud bychom uzivatelum kompilujicim z danych klientu poskytli na dalsich distcc nodech shell access, viz http://distcc.samba.org/security.html : "Anyone who can connect to the distcc server port can run arbitrary commands on that machine as the distccd user. If you are not using SSH, you must use the --allow rule and/or firewall rules to limit access to port 3632." Dale mi neni jasne, co autor minil doporucenim pouzivat `FEATURES="distcc" emerge foo` misto adekvatni zmeny make.conf, zejmena v kontextu predchoziho odstavce.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.