# distcc bringt keinen Geschwindigkeitsvorteil

## Sas

Hi allerseits,

ich habe mir jetzt auch mal distcc (unter Windows, mit cygwin) eingerichtet, funktioniert eigentlich auch, allerdings habe ich das Problem, dass nur der Rechner, der in der Liste der hosts für distcc als erstes kommt, belastet wird. Dabei spielt es keine Rolle, welcher das ist, also ob in erster Linie lokal oder übers Netz kompiliert werden soll.  Die MAKEOPTS habe ich auf "-j5" gesetzt, macht auch keinen Unterschied. Prinzipiell kann ich auf beiden (über 54MBit WLAN) vernetzten Rechnern kompilieren, aber einer langweilt sich immer. Natürlich kann ich zeitgleich ein Paket auf dem einen und eins auf dem anderen bauen, aber lieber wäre es mir natürlich, würden beide Hand in Hand arbeiten.

Es ist nicht so, dass der eine dann gar nichts tut, aber er steht nie länger als vielleicht fünf Sekunden unter Volllast, macht dann länger (einige Sekunden bis zu mehreren Minuten) Pause und bequemt sich dann vielleicht mal weiter zu machen. An der Netzwerkverbindung wird es nicht liegen, denn da ist während den Pausen gar kein Traffic.

Also gehe ich davon aus, dass ich etwas falsch (bzw. gar nicht) eingestellt habe, aber woran könnte das liegen? Konfiguriert habe ich eigentlich gar nichts, die daemons laufen auf beiden Rechnern, auf dem Client sind die hosts eingetragen und Portage fürs Nutzen von distcc konfiguriert.

Danke für Hilfe,

Gruß Sas

edit: Titel geändert (auf den neusten Stand meiner Erkentnisse gebracht)

----------

## slick

Ich hatte mal das gleiche Problem. Der Fehler was bei mir waren die fehlenden "", 

falsch

```
distcc-config --set-hosts 192.168.0.1 192.168.0.2 192.168.0.3 
```

und richtig

```
distcc-config --set-hosts "192.168.0.1 192.168.0.2 192.168.0.3" 
```

Prüf das mal.

http://www.gentoo.de/doc/de/distcc.xml#doc_pre5

----------

## crocodille

Man kann sich auch eine Datei anlegen in der die hosts stehen... Dann muss man das nicht nach jedem neustart neu anlegen.

/etc/distcc/hosts:

```

localhost 192.168.0.2 192.168.0.3

```

Dabei ist auch zu beachten, das die Reihenfolge wichtig ist. Der Host der an erster Stelle steht wird zuerst genommen, usw.

Ich hoffe das hilft dir schonmal weiter...

----------

## Sas

Nein, die hosts-Datei ist komplett richtig, das mit der Priorität steht ja auch in der manpage, habe ich drauf geachtet. Wie gesagt, es wird so gut wie nur der erste Host in dieser Liste genutzt.

Und mehr als in diese Datei schreiben macht distcc-config --set-hosts ja auch nicht.

----------

## sprittwicht

Was für Pakete hast du denn so versucht zu kompilieren? Der Eindruck mit dem einseitigen Verteilen auf den ersten Rechner kann auch täuschen, weil ja während der Installation nicht nur kompiliert wird. Sachen wie configure, irgendwelche Skripte und der Linker werden so weit ich weiß ausschließlich auf dem Hauptrechner ausgeführt.

Mal per top geguckt, was der Hauptrechner gerade macht, wenn der Rest sich langweilt?

----------

## Sas

Ja, das ist mir schon klar und ich habs berücksichtigt. Ich meine wirklich das Kompilieren, nicht den gesamten Emerge-Vorgang.

Unter anderen hab ichs mit k3b, glibc, xterm und php versucht, betrifft aber wie gesagt jedes Paket.

----------

## Sas

Ich hab gelesen, apache2 würde sehr von distcc profitieren, aber auch da tut sich nichts. Eben hat ers ohne distcc sogar in 14 Minuten geschafft und mit in 16.

Ich hab auch mal die LZO-Kompression eingeschaltet, da das für LANs langsamer als 100MBit ja empfohlen wird, bringt auch nichts.

Mit den MAKEOPTS hab ich auch noch etwas rumgespielt, ohne Erfolg. Seit ich die hochgesetzt habe, ist zwar auch der zweite Rechner häufiger am Rechnen,  aber es geht insgesamt einfach nicht schneller. Ich nutze unterschiedliche GCC und distcc Versionen, die aber miteinandern kompatibel sein sollen. Ich bekomme ja auch keine Fehler oder so, es geht nur einfach nicht schneller.

Fällt jemandem noch etwas ein? Ich bin echt ratlos...

----------

## sprittwicht

Hm, also das einzige, was mir jetzt noch einfällt wäre, dass der zweite Rechner im Vergleich zum ersten extrem langsam ist. Dann zieht ein distcc die Performance eher runter und es sollte besser alles auf dem ersten Rechner geschehen. Was sind denn das für Rechner?

Ansonsten keine hilfreichen Tips parat, sorry. :-/

----------

## Sas

Wie gesagt ist der zweite ein 1,4 GHz Pentium 4, der erste ein Athlon XP mobile 2000+, beide mit 512 MB RAM, da sollte der Unterschied nicht so groß sein, dass der erste ausgebremst wird.

----------

## Jlagreen

Hi,

hab nen XP2200+ und nen Centrino 1,4GHz und lass beide über distcc laufen  :Razz: , das entscheidende ist wie viele threads du mit MAKEOPTS="-jN" insgesamt (also für beide Systeme zulässt), das kann ich nun für deine Systeme nicht genau sagen, hab da jedenfalls mit rumprobiert und es läuft super mit -j16, meist ist aber auch -j5 oder -j8 ausreichend

ich denke mal, dass distcc soweit funzt wie nach der doc, dann versuch mal folgende host-einstellung 

```

# distcc-config --set-hosts "localhost/N  host1-IP/N host2-IP/N"

```

das N dabei bedeutet wie viele threads welcher host machen soll, also hab ich da zb. für den local 7 und für den 2ten 9 usw., distcc startet nun dann maxiamal 16 threads (wie nach MAKEOPTS) und erstmal 7 auf dem localhost und der rest wird dann automatisch zum 2ten host geschickt usw.

diese eingrenzung von threads in der hosts hat bei mir jedenfalls das problem mit dem gelangweilten rechner beseitigt  :Wink: , klar kann man da noch ordentlich optimieren, aber das musst halt jeder für sich entscheiden, welche einstellung am besten passt

hoffe es klappt   :Smile: 

PS: Bootstrappen auf dem Centrino dauerte ca. 50min und das obwohl ich vergessen hatte USE="-java" zu setzen   :Embarassed: 

----------

## Sas

Am LAN liegts auch nicht, ich habs mal testweise mit ner 100MBit-Verbindung versucht, macht keinen Unterschied.

Allerdings habe ich mittlerweile eher den Verdacht, dass etwas beim Zusammenspiel der beiden Rechner nicht stimmt. Wie gesagt: Ich kann auf jedem der beiden (mittels distcc) kompilieren und es lässt sich auch alles ordnungsgemäß ausführen. Aber ich kann mir einfach nicht erklären, dass einer allein etwa die gleiche Zeit (oft sogar etwas weniger) braucht als beide zusammen, obwohl auf beiden viel CPU- und RAM-Last entsteht (gcc, cc1).

Edit: Die distcc-Monitore (sowohl Gnome als auch Text) zeigen übrigens gar nichts an, könnte das in Zusammenhang stehen?

----------

## Sas

Gerade habe ich die neue QT-lib kompiliert und das bestätigt meinen Verdacht. Die ganze Zeit über waren beide Rechner unter Volllast, aber schneller gings deshalb noch lange nicht:

```
* x11-libs/qt

     Fri May 21 02:29:19 2004 >>> x11-libs/qt-3.3.2

       merge time: 44 minutes and 56 seconds.

     Mon Aug 16 19:19:49 2004 >>> x11-libs/qt-3.3.3

       merge time: 1 hour, 13 minutes and 19 seconds.

```

Die alte Version wurde ohne distcc kompiliert, die neue mit. Kann doch nicht sein.

Hat denn niemand mehr eine Idee?

----------

## Jlagreen

hmm, sehr eigenartig, denn eigentlich muss man nicht viel einstellen um distcc zu verwenden und die einstellungen aus meinem post oben genügen, wichtig ist nur distcc installieren, /etc/distcc/hosts anpassen und in der /etc/make.conf die FEATURE="distcc" einzufügen

überwachst du die compile-vorgänge auch mit distccmon-text bzw. distccmon-gnome?

auch wenn du da nur ein localhost[0] siehst, heißt es das distcc funzt, aber eben das paket nicht verteilt compiliert wird (ist bei mir bei rund 80% der pakete)

bei mir siehts mit der qt auf dem XP2200 ohne distcc so aus:

```

merge time: 56 minutes and 38 seconds

```

und auf dem centrino 1,4ghz mit distcc:

```

merge time: 34 minutes and 13 seconds

```

also schon merklich schneller, allerdings nervt es sehr das viele große pakete (openoffice, xorg usw.) distcc eh nicht verwenden

----------

## Sas

Wie schon gesagt, steht in den distcc-Monitoren gar nichts. Also nichtmal localhost. Allerdings ist klar, dass distcc grundsätzlich funktioniert, denn erstens sehe ich den dadruch entstehenden Netzwerk-Traffic, zweitens kann ich ja auch nur auf dem zweiten Rechner kompilieren und es funktioniert und drittens sehe ich doch die gcc, cc1plus und wie sie alle heißen Prozesse und wieiviel CPU-Zeit und Speicher sie verbrauchen. Also da tut sich definitiv was.

----------

## dakjo

Du machst auch für den distccmon ein 

```
DISTCC_DIR="/var/tmp/portage/.distcc"  distccmon-gnome
```

?

----------

## primat

Nur um sicher zu sein:

Du hast /etc/init.d/distccd

schon gestartet, oder?

Gruss

----------

## Sas

 *dakjo wrote:*   

> Du machst auch für den distccmon ein 
> 
> ```
> DISTCC_DIR="/var/tmp/portage/.distcc"  distccmon-gnome
> ```
> ...

 Nein, das habe ich nicht  :Rolling Eyes: 

Danke, werds mal probieren.

Und ja, ich habe distccd sowohl lokal als auch auf dem Zweitrechner laufen. Jenachdem, welche Rechner ich in /etc/distcc/hosts eintrage werden die ja auch genutzt. Ich kann auch ausschließlich auf dem zweiten kompilieren, klappt alles. Nur sind sie eben zusammen geringfügig langsamer als der schnellere von beiden allein und das sollte nicht sein.

----------

## Sas

So, jezt zeigt mir der distccmon auch Infos, danke. So wie ich das sehe, zeigt er auch an, was er sollte, er kompiliert lokal zwei Dateien und vier auf dem Zweitrechner. Unabhängig davon, ob das das richtige Verhältnis ist, sollte es so doch auf jeden Fall schneller gehen als mit einem allein, oder?

Was bedeuten die verschiedenen Farben beim grafischen Monitor?

----------

## dakjo

Ja, sofern auf beiden die selbe gcc version läuft.

----------

## Sas

Nein, aber es läuft auf beiden 3.3.x, das sollte laut distcc.samba.org funktionieren.

----------

## dakjo

Ich hab jetzt auch mal wieder Performance test gemacht, mit wxGTK.

ÄÄÄhhhhhmmmm :

-j12 ohne distcc :

```
     Tue Aug 17 13:56:38 2004 --> x11-libs/wxGTK-2.4.2-r2

       merge time: 2 minutes and 36 seconds.
```

-j12 distcc an drei hosts :

```
     Tue Aug 17 14:03:41 2004 --> x11-libs/wxGTK-2.4.2-r2

       merge time: 5 minutes and 49 seconds.
```

-j12 distcc an drei hosts mit lzo : 

```
   Er kompiliert nur localhost ?
```

Tja, vor einem halben Jahr sah das aber noch anders aus   :Question: 

----------

## Sas

Sehr seltsam. Wie sieht bei dir denn die CPU-Last auf den verschiedenen Systemen aus, wenn du distcc nutzt? Profitiert dieses Paket überhaupt davon (gehe ich aber mal von aus  :Wink: )?

Also mit lzo verhält er sich bei mir genau wie ohne: Beide Rechner arbeiten, schneller gehts deswegen aber nicht.

----------

## oma

Können die Einstellungen in der make.conf etwas damit zu tun haben? Blos ne Idee...

----------

## dakjo

In der make.conf ist alles korrekt.

Die Maschinen haben auch volle last beim kompilieren.

naja

----------

## Sas

Eigentlich nicht. FEATURES und MAKEOPTS sind korrekt gesetzt und mehr kann man da ja nicht falsch machen. Außerdem nutzt er distcc ja.

Interessant ist nur, dass dakjo scheinbar das gleiche Problem hat.

----------

## Sas

So, ich habs jetzt mal mit Knoppix statt Cygwin versucht und es ist genau das Gleiche: Eigentlich klappts, geht aber nicht schneller.

Ich glaub ich gebs auf ;(

----------

## simex

ein Tip, was das distcc mit mehr als zwei Rechnern angeht:

in der /etc/distcc/hosts müssen die einzelnen hosts nicht hintereinander stehen - dann nimmt er immer nur den ersten.

zumindest bei mir hat er erst  dann angefangen, beide remote hosts mit compile-jobs zu versorgen, als ich sie in der liste mit zeilentrennern separiert habe, z.B.:

```
/etc/distcc/hosts:

localhost

192.168.1.2

192.168.1.3

```

distcc-config schreibt das seltsamerweise nur mit space getrennt in die datei... (kann man das eigentlich als bug bezeichnen?)

zu der geschwindigkeitsproblematik kann ich sonst leider nix beisteuern

 :Crying or Very sad: 

----------

## holgi1789

 *Sas wrote:*   

> 
> 
> ```
> * x11-libs/qt
> 
> ...

 

Doofe Frage: Wie bekommt man die Zeitdauer des emergens angezeigt?

----------

## _hephaistos_

 *new_holgi wrote:*   

> Doofe Frage: Wie bekommt man die Zeitdauer des emergens angezeigt?

 

genlop -t <paket>

emerge genlop

ciao

----------

