distcc - distribuovaná kompilace
Démon distcc sám o sobě není kompilátor, ale pouze frontend pro gcc. Jeho vývoj probíhá od r. 2002
Jde o jednoduchou aplikaci typu klient-server, která umožňuje rozdělit kompilaci mezi více strojů a v případě potřeby tak využít jejich výpočetní výkon ke zkrácení doby kompilace. Instalace je u Debianu triviální. Na každém z nodů, které mají být součástí kompilační farmy, stačí spustit:
apt-get install distcc
Konfigurace distcc
Součástí instalačního balíčku je jak klientská aplikace distcc, tak serverový démon distccd'. Ten po svém spuštění vytvoří několik procesů vyhlížejících svou dávku ke kompilaci. Každý z nodů tak může fungovat zároveň jako klient i jako server, ale není to nezbytně nutné.
Kupř. při kompilaci aplikace v prostředí virtuálního stroje lze tímto využít hrubý výpočení výkon fyzických nodů a tím redukovat zátěž virtualizačního stroje.
Efektivita použití distcc záleží na několika faktorech:
- Jak rychlá a spolehlivá je síť, skrz kterou klient komunikuje se servery?
- Jak jsou výkonné servery?
- Jak je výkonný server?
U pomalejší sítě lze využít pro přenos dat mezi klientem a servery lzo kompresi |
Klient
Je stroj na kterém bude probíhat sestavování instalačních balíků. Je třeba si uvědomit, že vlastní kompilace nemusí být při sestavování balíku ta nejnáročnější činnost. Záleží také na tom, jak rychle stíhá klient načítat z disku a rozesílat data ke kompilaci. Propustnost sítě zase ovlivňuje to, jak stíhají servery vracet zpracované bloky.
U distcc při kompilaci komunikuje vždy klient se servery, nikoliv servery mezi sebou! |
Klientská aplikace distcc si při svém spuštění přebírá seznam serverů z proměnnné $DISTCC_HOST, není-li nastavena, načte si jej z konfiguračního souboru /etc/distcc/hosts
. Stroje mohou být identifikovány buď:
- doménovým jménem (pokud mají vlastní doménu) nebo
- svým hostname (pokud pro ně existuje záznam v souboru
/etc/hosts
) nebo - IP adresou
Jednotlivé identifikátory jsou odděleny mezerami.
Server
Je stroj na kterém běží serverová část - démon distccd. U Debianu si parametry při spouštění démon distccd spouštěný přes init natahuje z konfiguračního souboru /etc/default/distcc
.
Využití ccache
Utilita ccache funguje tak, že archivuje dílčí výsledky při všech kompilacích, takže pokud se má kompilovat již jednou zpracovaný kus kódu, použije se - pokud nedošlo k nějakým změnám - kód z ccache. Pozor na to že:
- ccacche lze použít pouze na straně klienta
- ccache nelze používat v PUMP módu.
pump
Standardně distcc řeší pouze kompilaci, všechny zbývající operace, jako např. kompilace výsledného bajtkódu, atp. už probíhají na klientovi. distcc-pupmpje varianta, která umožňuje distribuovat i jiné operace prepocesoru. Má to však několik omezení:
- především jak na straně klienta i serveru musí být použita verze distcc-pump novější než 3.0
- hlavičky i cesty ke knihovnám musí být během kompilačního procesu jak na straně klienta tak serveru stejné.
- komplexní
Vytvoření zdroje pro spouštění distcc
Pokud jsou nody na který se spouští distcc součástí clusteru, lze spouštění démona provádět přes crm. Více viz CRM - konfigurace distcc,
Použití distcc
- Při testovacím buildování deb balíku na klientském stroji..
stroj:~# MAKEFLAGS="CC=distcc" fakeroot debian/rules binary -j16
|
- Při rebuildování zdrojového deb balíku na klientském stroji..
user@stroj:~$ MAKEFLAGS="CC=distcc" fakeroot dpkg-buildpackage -j16
|
- Při kompilaci vanilla kernelu na jednom z nodů..
nod-1:~# MAKEFLAGS="CC=distcc" make oldconfig
nod-1:~# time MAKEFLAGS="CC=distcc" make -j16
nod-1:~# time MAKEFLAGS="CC=distcc" make deb-pkg -j16
|