[wiki] distcc

Hi [LoN]Kamikaze,

also das sieht ja nach ner feinen sache aus die Rechenlast beim bau mit make buildworld auf mehreren Rechnern zu verteilen. Meine Frage ist da eher Technischer Natur. Sollten den die Rechner etwa mit gleicher Rechenleistung zu verfügung stehen weil für mich macht es sinn da, sollte eine Maschine langsamer Arbeiten als die anderen doch zu konflikten kommen könnte. Oder baut dann jede Maschine nur mit einen bestimmten Bereich in den Sourcen?
 
Wenn du z.B. einen port baust, kompiliert er ja viele einzelne Quelldateien.
Fuer jede einzelne startet er normalerweise einen neuen gcc. Und mit -j2, -j3, etc. startet er sogar mehrere Prozesse parallel.
Bei distcc ist es genauso, nur dass er den gcc auf anderen Rechnern startet und die die kompilierte Datei zurueck schicken.
Es kommt aber ab und zu mal zu Konflikten, aber das ist dann auch ohne distcc so.
 
Die Kompiler sollte möglichst gleiche Versionen haben. Ansonsten ist es aber egal, auf welchem OS sie laufen. Ich habe sogar von einem Administrator gelesen, der den Distcc auf allen Windows Rechnern in der Firma installiert hat um seiner Unix Kiste die Rechenzeit zur Verfügung zu stellen. Leider erinnere ich mich nicht an den Link.
 
Naja, mit cygwin geht das schon, hab ich auch schon testweise mit den Winrechnern meiner Nachbarn @home im Lan praktiziert. Auf nem 1GHz Athlon mit 512MB Ram damals fuer nen buildworld knappe 20min gegenueber gut 1,5-2h allein. Sehr schoen.

Alternativ ne Live-CD basteln mit entsprechend gleichem gcc, die dann in die beteiligten Rechner und gut ist.
 
Ok das klingt wirklich interessant denn der Bau der Welt auf meiner kleinen Kiste dauert 12 Stunden fürs Basissystem und noch mal 1 oder 2 Stunden für den Kernel, dagegen mein großer Athlon macht die Basis und Kernel + Installation in nichtmal einer Stunde. Aber ich denke mir mal ich werde um Stable auf der kleinen Kiste updaten nehme ich dann lieber NFS, für den siehts anders aus der Hat mehr bumms. Dort werde ich das mal anwenden da dort noch kein stable drauf ist sondern noch ein FreeBSD 5.4 Release.
 
Danke dir für die Info, also um mal hier den obigen Post fortzusetzen, kann also auch so wie du es beschreibst sogar das OS egal sein. Na denn steht ja nicht mehr im Wege die Rechenzeit mit den Server und Workstation zu teilen.
 
Hab's mal mit zwei Rechnern und nem simplen Kernelbau probiert. Irgendwie baut der Rechner auf dem der Daemon läuft nie mit.
Distcc wird als Compiler benutzt, Hosts sind beide eingetragen, der distccd läuft und ist auch erreichbar.
Auf beiden Rechnern läuft die selbe FreeBSD Version (6.1).
Sehr merkwürdig. ;'(
 
distccd_flags ist ordentlich gesetzt, der daemon lauscht ja auch.
Der distccmon zeigt halt nur die Dateien die gebaut werden auf localhost.
 
Poste doch mal alles relevante, also Zeile in der rc.conf und /usr/local/etc/distcc/hosts .
 
Ok, hier die Konfiguration:

Server (192.168.0.1):

/etc/rc.conf
distccd_enable="YES"
distccd_flags="-a 127.0.0.0/8 --listen 127.0.0.1 -a 192.168.0.0/16 --listen 192.168.0.1 --user distcc --daemon -P /var/run/distccd.pid"


Client (IP-Adresse dynamisch via dhcp, zwischen 192.168.0.100 und 192.168.0.253):

/usr/local/etc/distcc/hosts
localhost 192.168.0.1


Ausserdem die /etc/make.conf
CC= /usr/local/bin/distcc cc
CXX= /usr/local/bin/distcc c++

---

make immer mit "-j 4" aufgerufen (Beide Rechner haben jeweils eine CPU)
 
hi [LoN]Kamikaze,

habe mir das ganze mal zu gemüte geführt und distcc auf 3 rechnern installiert. Zwei Rechner sind Server und der dritte ist der Client und ich habe da den kleinsten Rechner genommen den ich derzeit hier stehen habe. sind alle Unterschiedlicher taktfrequenz. Die beiden Server sind

a. Meine Workstation (AMD XP 2600+ (Barton) und 1GB RAM)
b. Mein Server (Pentium 3 700 MHz und 256MB RAM)
genaueres dazu steht auf meiner Homepage unter Hardware.

Die kleine Kiste also der Client ist ein Pentium 1 233 MMX mit gerade mal 192MB RAM.
Ich beobachte bei allen drei Rechnern eine gewisse Netzwerkaktivitität und auch eine Prozessorauslastung. Es scheint alles zu klappen. Und auch auf dem Clienten sieht es gut aus. ich habe da mal den distccmon-text aufgerufen und der spuckte das aus.

29540 Preprocess cp-demint.c 192.168.0.2[0]
29539 Preprocess concat.c 192.168.0.4[0]
29538 Compile choose-temp.c localhost[0]
29541 Compile cp-demangle.c localhost[1]

schein alles im grünen bereich zu sein.
 
Hat jemand Erfahrungswerte zur Mindestanfrderung wie z.B. MHz, RAM, Netzspeed (wie siehts mit wlan (54Mb/s) aus) bei den Servern?
 
Hmm ich denke mir mal die Maschinen bzw die Server sollten dann schon entsprechend schnell sein. Was das Netz angeht reichen auch WLAN zu denn so groß sind die Sachen ja doch nicht die da kompiliert werden auf jeder Maschine. Bei mir ist es eben auch mal der erste Test mit diesen Port. Deswegen kann ich noch nicht viel sagen darüber. Aber fest steht die Datengrößen bewegen sich im KB-Bereich. Und das ist auch keine permanente Auslastung des Netzwerkes zu sehen sondern Impulsweise, hier im Gnome-Systemmonitor beobachte ich unregelmäßige Spitzen bis 100% bei der Netzwerkauslastung und max 80% CPU-Last bei der Workstation.
 
Wie ist "entsprechend schnell" zu verstehen?

War jetzt nur eine pauschale Aussage von mir. Zumindest bringt es nichts wenn deine Workstation eine auf 700 MHz CPU oder was auch immer läuft und du dann die Last mit einen 386er Server teilen willst. Also müsste dann schon halbwegs eine gute Maschine sein. Der Zweck dieser Anwendung, daß man zum beispiel ein Notbook oder älteren Rechner nicht die Arbeit machen lassen brauch sondern die Last auf andere schnellere Rechner verteilt. In Beispiel dauerte der Bau des Basissystems auf der 233er Kiste ohne distcc etwa 24 Stunden und 2-4 Stunden etwa für den Kernel. Zwar dauert der bau mit distcc noch an aber mein Eindruck ist jetzt schon die Erkenntniss einer höheren Geschwindigkeit. Mich würde an dieser Stelle mal Interessieren wenn ich den eintrag localhost aus der /usr/local/etc/distcc/hosts rausnehme und die IP's der Server nur drinn stehen habe ob dann nicht doch eine Steigerung der Geschwindigkeit möglich ist. Denn der langsame Prozessor in dem Client scheint da etwas auszubremsen. Ist nur mein Eindruck was sich auch aus dem distccmon interpretieren lässt, da dort keine weiteren Aufträge zu sehen sind wenn localhost noch nicht fertig ist mit dem was er gerade bearbeitet. Dann spielt ja noch die langsame lese und schreibgeschwindigkeit der Festplatte eine Rolle denn die läuftbei mir hier im moment auf WDMA2 ist ne Quantum Fireball EL7.6. Ich werde es beim nächsten mal ohne localhost testen so das wirklich nur die großen Kisten an der Basis bauen. Ma sehen was dabei rumkommt. Vieleicht aber auch gar nichts.
 
Zuletzt bearbeitet:
@mgr
Das sieht wirklich alles gut aus. Ich könnte mir nur noch vorstellen, das irgendwie eine Firewall da mitspielt.

@.*
Was die Geschwindigkeit der Rechner betrifft, jedes MHz hilft. Aber auch wenn die Server etwas langsamer sind, können sie doch noch den Client entlasten. Der Unterschied sollte allerdings nicht zu gewaltig sein, da sonst der Client öfter mal warten muss, bis der Server fertig ist. Was eine große Rolle spielt ist der Arbeitsspeicher. Die Server sollten meiner Meinung nach bis 512 mb mindestens so viel davon haben wie der Client. Denn wenn der Server öfter swappen muss als der Client, dann ist jeder Zeitgewinn nichtig.
Es gibt auch Programme, wo ein Prozess beim Kompilieren bis zu 300 mb belegt. Da sollte man sich ernsthaft überlegen für 2 Rechner nur '-j 2' zu verwenden. Im allgemeinen gilt swappen so weit wie möglich zu vermeiden.

@dmon
Der Netwerkverkehr ist Moderat, ich denke man könnte ein 2 Rechner System sogar noch über 10Mbit gewinnbringend verbinden, aber über WLAN würde ich das auf keinen Fall machen. Dort können die Antwortzeiten aus allen möglichen Gründen plötzlich einbrechen.
 
Zurück
Oben