Kopfkino

distcc

| 3 Kommentare

Da brüte ich über einer Anwendung, die ich mal so als auslastenden Job auf einem kleinen Verbund von Rechnern laufen lassen könnte. Sowas produziert Last und somit bunte Bildchen. Immer gut für Präsentationen und anderes Marketing Geblubber.
Gut, Linpack wäre eine Idee. Damit kann in meinem Business sowieso jeder was anfangen. Quasi das Buzz-Word der HPC Gilde.
Aber nicht mein Kandidat.
Doch da fällt mir mal wieder distcc ein.
Juhu, damit habe ich vor seeeehr langer Zeit schon tolle Dinge mit gemacht … und nette Ergebnisse erzielt.

Grundidee von distcc ist, dass man längere Compile Jobs aufteilt. Quasi ein Ansatz von Compile Farmen. Aber einfacher.
Beispiel: du sitzt daheim und musst mal eben wieder dein Projekt, bestehend aus 1Mio LOC, komplett bauen. Dein Laptop schafft das zwar in endlicher Zeit, aber nicht mehr bis zum Schlafengehen. Also möchtest du gerne noch den PC in der Ecke nutzen.
Genau das macht distcc. Compile Jobs auf- und verteilen.

Hier meine Beispiele.
Ganz klar sei zu sagen, dass hier keinerlei Optimierungen dabei sind. Und da kann man noch gut tunen.

Ich habe ein paar Rechner, ausgestattet mit 4-core Harpertown CPUs, jeweils zwei Sockel, 2.33GHz. Alle via 1GigE vernetzt.
Also was Einfaches.

Aufgabe ist das Kompilieren des RHEL5.3 Kernels unter verschiedenen Bedingungen (ist ja auch nur ein Vanilla Kernel mit brutal vielen Patches)
Fangen wir an.

Compile nur auf dem lokalen Knoten mir zwei parallelen Prozessen.
Was typisches für den Laptop.

make -j 2
real 10m56.694s
user 19m44.024s
sys 3m14.640s

Horror, wenn man nur eine CPU hat. Und wenig Speicher. Und langsame Disks.
Die Zahlen sind also für einen Laptop eher seeeehr optimistisch.
Und die Festplatte wird einem die Oberschenkel abkochen.

Compile nur auf dem lokalen Knoten mir acht parallelen Prozessen.
Mehr Cores hat der Knoten nicht. Also maximale Last.

make -j 8
real 3m28.493s
user 21m18.842s
sys 3m40.807s

Besser.

Compile nur auf einem entfernten Knoten mir acht parallelen Prozessen.

export DISTCC_HOSTS=’idpx03′
make -j 8
real 6m34.261s
user 4m36.940s
sys 2m14.668s

War zu erwarten, da der Code immer übers Netz geschoben wird.

Compile auf zwei entfernten Knoten.

export DISTCC_HOSTS=’idpx03 idpx04′
make -j 16
real 3m23.504s
user 4m37.745s
sys 2m17.647s

Hmm. Nur knapp besser als das, was lokal auf einem System so ablief. Aber kann man sicher auch irgendwie erklären, da die Einzelmaschine durchaus sehr stark ist.

Compile auf vier entfernten Knoten.

make -j 32
real 1m57.331s
user 4m41.712s
sys 2m22.664s

na, das rockt doch schon, oder?

Compile auf sechs entfernten Knoten.

make -j 48
real 1m41.167s
user 4m44.359s
sys 2m26.322s

Kein so dicker Sprung mehr.

Compile auf acht entfernten Knoten.

make -j 64
real 1m38.584s
user 4m46.432s
sys 2m27.815s

Sättigung.
Lässt sich aber auch erklären.
Hier wird nun das Netz zum Bottleneck. Ebenfalls der zentrale Server, der alle Daten verwalten muss. Der kommt einfach nicht mehr hinterher.
Das in Kombination und die Tatsache, dass die einzelnen Server verdammt schnell sind, macht hier die Sättigung aus.

In der Vergangenheit habe ich andere Messungen gemacht. Da war der zentrale Server dicker, die Knoten aber schwächer.
Das skalierte auf etwas mehr Server bei etwa gleicher Compile Zeit am Ende. Ein klein wenig besser sogar. Aber es war auch ein etwas älterer Kernel.

Der Kernel ist jetzt ein nicht soooo gewaltiges Projekt.
Aber man sieht schon ganz gut, dass man mit distcc viel Spass haben kann.

3 Kommentare

  1. Cool, seit langem wieder ein technischer Eintrag hier in Deinem Blog. Wird es davon mehr geben ?

    Grüße
    Totte

  2. Ja gerne. Nur ich finde selten Zeit mich den schönen Dingen im Hobby anzunehmen.
    Ich programmiere nix mehr, Linux finde ich mittlerweile nur noch ’normal‘ (was nicht bedeutet, dass Windows irgendwie an Charme gewonnen hätte) und letztlich bietet der Job viel Technik

  3. Ja, okay, ich gebe zu: der nachfolgende Test ist absolut neben den Standards. Aber was soll ich machen, ich kompiliere halt gerne Kernel Nein, quatsch. Mir ist aktuell und auf die Schnelle einfach nichts Besseres eingefallen. Also, ich habe gerade Zu

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.


*