# distcc optimieren

## Lenz

Hi,

habe gestern distcc installiert und eingerichtet. Funktioniert soweit auch gut, nur wird irgendwie von den Rechnern im Netzwerk immer nur häppchenweise in längeren Abständen (5-10 sec.) kompiliert (-> CPU Auslastung 100%). So richtig effektiv scheint das nicht zu laufen.

Ein zweites Problem ist, dass einige KDE Pakete nach dem Ende des Kompilierens - aber noch vor dem Installieren - mit einem roten Balken abbrechen. Woran könnte das liegen?

Drittens wäre noch eine Frage übrig: Kann man Distcc auch mal eben ausstellen ohne die gesamte Konfiguration abzuändern (in der make.conf)?

-- Lenz

----------

## redflash

Abschalten lässt sich distcc wie folgt. 

```
FEATURES="-distcc" emerge ..
```

Die Probeleme mit KDE müsstest du etwas präzisieren, da ich keine Probleme bei KDE mit distcc feststellen konnte. Es kompilierte kde einwandfrei. 

Die Pausen bei distcc kann leider auch nicht nachvollziehen. Wo es immer Pausen gibt ist während des Installierens und Konfigurierens.

----------

## EliasP

Hab es zwar noch nicht ausprobiert, aber ich denke es würde helfen, den MAKEOPTS-Wert überall zu erhöhen, dadurch werden mehr parallele Prozesse gestartet die sich in ihren Pausen beim "Nachschub-holen" dann überlappen und somit sollten die CPUs dann mehr beschäftigt sein.

Sollte so ungefähr funktionieren wie HT bei P4s..  :Wink: 

Hab aber auch noch n Problem mit distcc...

Hier stehen mehrere Rechner rum, manche x86, manche ~x86, woraus resultiert, dass die x86 natürlich nen älteren GCC als die ~x86 haben.

Also bricht das kompilieren oft ab, weil ./configure dann Funktionen definiert, die der alte GCC noch gar nicht kennt....

Gibt es hier ne Möglichkeit, auf den x86-ern nen neueren GCC zu installieren (ja, ich weiß, generell über SLOTS kein Problem) und distcc so zu konfigurieren, dass es bei Compiler-Anfragen von ~x86 Rechnern den neuen GCC verwendet??

Würde mein Leben hier deutlich erleichtern  :Wink: 

Gruß

Elias P.

----------

## misterjack

/etc/package.keywords ??

gcc eintragen und neuesten emergen

oder auf ~x86 /etc/portage/package.mask 

die ~x86 gcc maskieren und alten mergen

andere möglichkeiten gibts net, bei distcc sollte wirklich absolut die gleiche versionen auf den rechnern installiert sein

----------

## Jinidog

Schon unsauber ist es auch, einfach direkt per Ebuild den benötigen Compiler zu installieren und dann mittels gcc-config immer zwischen den gewünschten hin und her zu schalten.

----------

## Lars

 *Quote:*   

> nur wird irgendwie von den Rechnern im Netzwerk immer nur häppchenweise in längeren Abständen (5-10 sec.) kompiliert (-> CPU Auslastung 100%). So richtig effektiv scheint das nicht zu laufen. 

 

In der /etc/distcc/hosts

```
localhost/1 rechner2/2 rechner3/2 ...
```

Gib immer mindestens 2 für die entfernten Rechner an, dann klappt die Auslastung besser. Mit den Werten ruhig mal ein bisschen spielen, ist auch während der compilezeit möglich. Evtl. kann localhost auch weggelassen oder ans Ende gestellt werden. 

Des weiteren in der /etc/make.conf

```
MAKEOPTS="-j5"
```

-jX mit so vielen Rechnern, wie es eingetragene Werte in der hosts Datei gibt (hier 5). Einfache Addition  :Wink:  Das läßt sich allerdings nicht zur compilezeit ändern.

Die Auslastung sollte jetzt besser sein.

Lars

----------

## dek

 *Lenz wrote:*   

> Drittens wäre noch eine Frage übrig: Kann man Distcc auch mal eben ausstellen ohne die gesamte Konfiguration abzuändern (in der make.conf)?

 

Ich hab' das folgendermaßen gelöst: distcc aus den FEATURES der /etc/make.conf nehmen und nur bei Bedarf aktivieren.

Mein alias dazu:

```
alias emd="FEATURES=distcc MAKEOPTS=\"-j7\" nice emerge"
```

----------

## Jinidog

Ich habe mich auch mit distcc auseinandergesetzt.

Passt auf damit, dass kann die Kompilierzeit nämlich vergrößern.

Bei mir führt es bei bestimmten Konstellationen dazu, dass die schnelle Maschine sekundenweise gar nichts tut, während sie darauf wartet, dass eine andere langsamere Maschine, die auch nicht ausgelastet ist, ihre Ergebnisse zurückschickt.

Wichtig ist es also, auf dem schnellsten Rechner möglich maximal Auslastung zu erreichen.

Ich kenne alle Optimierungen, die genannt wurden.

Bei mir helfen sie recht wenig.

Ich denke, distcc arbeitet erst bei 100 MBit Netzwerken wirklich effizient.

Nicht unbedingt wegen der größeren Bandbreite, sondern vor allem wegen der geringeren Latenz.

Wenn der Server eine Sekunde auf das Ergebniss eines anderen Hosts warten muss, hätte der Server in dieser Zeit Millionen von Rechenoperationen durchführen können.

----------

