distcc - distribuovaná kompilace

Z DCEwiki
Skočit na navigaci Skočit na vyhledávání

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?
Poznámka 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.

Upozornění 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í:

  1. především jak na straně klienta i serveru musí být použita verze distcc-pump novější než 3.0
  2. hlavičky i cesty ke knihovnám musí být během kompilačního procesu jak na straně klienta tak serveru stejné.
  3. 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..
Poznámka
stroj:~# MAKEFLAGS="CC=distcc" fakeroot debian/rules binary -j16
  • Při rebuildování zdrojového deb balíku na klientském stroji..
Poznámka
user@stroj:~$ MAKEFLAGS="CC=distcc" fakeroot dpkg-buildpackage -j16
  • Při kompilaci vanilla kernelu na jednom z nodů..
Poznámka
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