# Fragen zur /etc/make.conf

## 72_6f_6c_61_6e_64

Hallo, ich setz jetzt bald mein Netbook neu auf (32 auf 64 Bit) und hätte ein paar Fragen zur /etc/make.conf.

Mein Prozessor: Intel Atom N450

Also ich hab jetzt diesen Artikel über Safe-Flags gelesen (http://en.gentoo-wiki.com/wiki/Safe_Cflags) und versteh das nich ganz.

Da steht, wenn man direkt auf die Seite mit den Intel Flags geht, dass man die auf native lassen soll.

- Soll man das jetzt auf native lassen oder anpassen? (Ich will gerne mit einem x86 Rechner beim Compilieren mithelfen)

- Nimmt man -O2 oder -Os? (was bringt was?)

LG Roland

----------

## Necoro

 *72_6f_6c_61_6e_64 wrote:*   

> Das steht wenn man direkt auf die Seite mit den Intel Flags geht, dass man die auf native lassen soll.

 

"-march=native" meint, dass der gcc die Optimierungen für den momentanen CPU auswählen soll. Also ist es genau das was du willst. Steht übrigens auch alles genau so auf der Wiki-Seite. Eventuell an deinen Englisch-Kentnissen arbeiten.

 *Quote:*   

> Wenn ich Gentoo auf einem Netbook installiere, bei dem ich nicht vorhabe Festplatte oder CPU zu wechseln. Soll man das dann anpassen? Und wenn ja wie?

 

Was hat die Festplatte mit den gcc-Optimierungen zu tun?

 *Quote:*   

> Nimmt man dan -O2 oder -Os (was bringt was? Das hab ich nicht ganz verstanden.)

 

-O2. -Os optimiert auf Größe, also so, dass die entstehenden Binaries möglichst klein sind. Das mag zwar an diesen und jenen Stellen besser sein (wahrscheinlich wenn man wenig Speicher zur Verfügung hat und/oder die Plattenanbindung sehr langsam ist), aber ich denke, dass rumreiten auf Millisekunden nix bringt und der "Standard" -O2 die sinnvollste Variante hier ist.

Nachtrag: Bitte formatiere/formuliere deine Beiträge mal besser. Es ist immer schwer rauszufinden, was jetzt genau deine Frage ist und auf was sich was bezieht. Wenn es viele Fragen gibt, kann man zB "1."/"2." etc vor jede Frage schreiben. Oder einfach Aufzählungszeichen wie "-"

----------

## disi

Zum Crosscompiling: ja

Wenn du z.B. mit -j10 auf deinem Atom ohne fremde Hilfe die Binaries zusammensetzt, ist er mehr mit Lesen/Schreiben usw. beschaeftigt als mit Compilieren. Ausserdem wird das System dann vermutlich kaum mehr benutzbar sein.

Es wird aber i.d.R. keine Fehler geben, so meine Erfahrung mit Icecream.

Hier ist ein klasse Wiki-Eintrag dazu: http://de.gentoo-wiki.com/wiki/Emerge_beschleunigen

----------

## 72_6f_6c_61_6e_64

@ necoro

Ich hab jetzt den gesamten Einstiegspost geändert.

Ich hab das Wiki auch gelesen. Aber mich haben die Crosscompiling-Dokumente (Siehe geänderte Fragestellung) verwirrt. 

Heißt dass, wenn ich die auf native lasse funktioniert das mit dem distcc/icecream dann (meinem Netbook soll geholfen werden, Die x86 Rechner sollen helfen. (Die Rechner stehen bei meinem Vater im Büro, ich hab keine näheren Angaben über die Hardware.))

(Ich hab jetzt das 12. Jahr Englisch in der Schule, ich glaube eigentlich den Sinn des Dokuments verstanden zu haben^^)

 *Necoro wrote:*   

> Was hat die Festplatte mit den gcc-Optimierungen zu tun?

 

Da steht irgendwas, dass die Pakete, die man kompiliert hat nicht kompatibel zu anderen Archtitekturen ist.

Meine Annahme dazu: Wenn ich keine Programme hergebe. (Festplatte ausbauen und herborgen) oder die Architektur ändere (Prozessor tauschen) kann mir das ja eigentlich egal sein.

@ disi

Das hab ich nicht ganz verstanden.

Wenn ich mit icecream/distcc arbeite starte ich die dazugehörigen Server auf den dafür vorgesehenen Rechnern und ändere überall die /etc/make.conf auf den richtigen -jn Wert.

Anschließend ändere ich die -jn Werte wieder zurück?

Benötigt das einen Neustart?

Mein Problem ist: Ich hab ein Netbook und will damit alleine arbeiten (Nicht ständig andere Rechner für Compiling-Cluster zur Verfügung).

Wenn ich aber daheim bin, will ich die Power von meinem Notebook und Standpc nutzen.

 *disi wrote:*   

> Hier ist ein klasse Wiki-Eintrag dazu: http://de.gentoo-wiki.com/wiki/Emerge_beschleunigen

 

Den Artikel hab ich auch gelesen.

Da steht man muss die /etc/make.conf und die /etc/profile editieren.

Lässt man das jetzt auch wenn die Clients nicht verfügbar sind?

Ich glaub dass das wieder ein bisschen unverständlich ist, aber ich kanns grad nicht besser formulieren.

LG Roland

----------

## Necoro

 *72_6f_6c_61_6e_64 wrote:*   

> @ necoro
> 
> Ich hab jetzt den gesamten Einstiegspost geändert.

 

Ah - jetzt ergeben auch deine Fragen Sinn. Und machen meinen obigen Post obsolet, da sich deine Fragen ja auf das distcc bezogen. Das ging daraus ursprünglich nicht hervor.

----------

## 72_6f_6c_61_6e_64

Ja, der war chaotisch, den hab ich im Laufe des Tages so nebenbei zusammengeschrieben. (Hab das Wiki durchgearbeitet und aufkommende Fragen so halbwegs zu "Papier" gebracht.)

Wie schaut es in diesem Fall mit -O2 vs. -Os aus? Ich schätze immer noch gleich.

Aber was ist mit den Flags?

LG Roland

----------

## disi

Ja, du aenderst den -jN Wert auf dem Rechner der Hilfe braucht auf z.B. -j10

Da du den PREROOTPATH in der /etc/make.conf aenderst und damit immer den icecream compiler nimmst, musst du theoretisch den Wert nicht zuruecksetzen. Dein lokaler Icecream Compiler/Client nimmt nur die Menge an Jobs an, die du in ICECREAM_MAX_JOBS="N" definierst.

Desweiteren, wenn du -march=native nimmst und Icecream funktioniert es "glaube" nicht (nicht getestet). Ich habe eben mal in die changelog geguckt und da ist ein Patch, dass wenn -march=native gesetzt ist, er nur den lokalen Compiler benutzt.

p.s. Keine Ahnung ob distcc -march=native schluckt...

----------

## Necoro

 *Quote:*   

> p.s. Keine Ahnung ob distcc -march=native schluckt...

 

Der Safe-CFLAGS-Wikieintrag sagt dazu:

 *Quote:*   

> Do not use -march=native if you use distcc on nodes with different architectures as this may produce unusable code.

 

Aber da ich nie distcc und Konsorten verwendet habe kann ich dazu außer dem Quote nix weiter beitragen  :Smile: 

----------

## Genone

-march=native und distcc/icecream sollte man vermeiden, da native ja die Optimierungen für den kompilierenden Rechner auswählt, und die sind nicht unbedingt kompatibel mit dem Zielrechner.

-O2 vs. -Os sollte man normalerweise -O2 nehmen, weil u.a. -Os in der Vergangenheit mit manchen Programmen Probleme bereitet hat (wenn diese bestimmte Annahmen über den Speicheraufbau gemacht haben) und die Unterschiede eh relativ gering sind.

----------

## 72_6f_6c_61_6e_64

Hallo,

das heißt ich passe die -march Flags in der make.conf an.

Im Intel/Safe Flags Wiki-Artikel steht für den Atom N-Series (Intel Atom N450) folgendes:

 *http://en.gentoo-wiki.com/wiki/Safe_Cflags/Intel wrote:*   

> 64 bit profile (amd64) for < GCC 4.3:
> 
> CHOST="x86_64-pc-linux-gnu"
> 
> CFLAGS="-march=nocona -O2 -pipe"
> ...

 

Wie kann ich sehen welche Version von GCC ich installiert habe?

bzw. welche ist die aktuelle? Oder anders, welche installiert man wenn man das Netbook am Mitwoch neu aufsetzt?

@ disi

Theorie

Das mit dem Client/Server hab ich noch nicht ganz verstanden.

Mein Netbook braucht Hilfe und ist deshalb der Server?

Und die anderen PCs sind die Clients? Oder umgekehrt?

Praxis

Ich muss also am Server? (Netbook) in der make.conf den -jN, und in der /etc/conf.d/icecream den ICECREAM_MAX_JOBS="N" Wert raufsetzen, wenn Clients? (Andere PCs) mithelfen, und wieder runter im Normalbetrieb.

Heißt dass also auch, dass ich auf den Rechnern, die beim Compilieren helfen (Clients?) die -march Flag anpassen muss!? (Von denen müsste ich nämlich dann vor Ort schauen was für einen Prozessor die haben. Da würde ich mit einem Live-USB-Stick mit icecream arbeiten.)

Aja, kennt wer eine Live-Distro auf der Icecream installiert ist? 

Wenn man in der make.conf etwas geändert hat, muss man dann irgendwelche Dienste/Rechner neu starten oder nimmt er beim nächsten emerge automatisch von dort die Werte?

LG Roland

----------

## disi

Du musst nicht neu starten wenn du Aenderungen an der make.conf vornimmst.

Alle Rechner sind Clients bei Icecream und einer der Clients startet einen zusaetzlichen Dienst. Dieser Dienst verteilt die Jobs and die Clients im Netzwerk.

Wenn du nur dein Laptop hast (nicht verbunden mit dem Netzwerk), ist da auch kein Client der den Dienst laufen hat. Ergo wird er sowieso nur den lokalen Compiler verwenden.

Beispiel:

Laptop: MAKEOPTS="-j10" und ICECREAM_MAX_JOBS="2" und ICECREAM_RUN_SHEDULER="no" 

Desktop: MAKEOPTS="-j10" und ICECREAM_MAX_JOBS="5" und ICECREAM_RUN_SHEDULER="yes" 

Der Desktop verteilt demnach die Jobs.

Fuer das Laptop am Netzwerk bedeutet das, emerge wird versuchen 10 Jobs laufen zu lassen, die gehen an den Scheduler Dienst auf dem Desktop und der verteilt 2 Jobs an das Laptop und 5 an den Desktop.

Fuer das Laptop ohne Netzwerk bedeutet das, emerge wird versuchen 10 Jobs laufen zu lassen, der lokale Icecream Compiler nimmt aber nur 2 an und laesst auch nur 2 laufen.

p.s. die Einrichtung ist etwas kompliziert bei Icecream, weil du jeden Rechner im Netzwerk erst miteinander bekannt machen musst. Sprich du erstellt eine Datei mit Information zum System und kopierst diese auf alle anderen Clients die helfen sollen usw. Da ist die Wiki aber vermutlich der bessere Anlaufpunkt.

pp.s. das p.s. gilt in deinem Fall wegen des "Crosscompiling" du musst noch sogenannte environment files erstellen usw. damit du 32bit auf 64bit bauen kannst und umgekehrt oder ganz andere Sachen wie SPARC, ARM, PPC etc.

----------

## Necoro

 *72_6f_6c_61_6e_64 wrote:*   

> Wie kann ich sehen welche Version von GCC ich installiert habe?

 

gcc-config -l ... die mit dem Stern ist die aktuell benutzte

Oder anders, welche installiert man wenn man das Netbook am Mitwoch neu aufsetzt?

Die letzte stable. Aber den gcc muss man nicht explizit installieren, der wird ja durch das system-Set eh mitgebaut.

----------

## 72_6f_6c_61_6e_64

Hallo,

Also ich hab das mit dme Icecream von Anfang an anders verstanden.

Stimmt das, dass der Sheduler nicht das Notebook sein muss, welches Unterstützung benötigt.

Wenn ich -j10 eingestellt habe, aber ICECREAM_MAX_JOBS="2" und ICECREAM_RUN_SHEDULER="no", und kein Sheduler da ist. Wird der -j10 Eintrag ignoriert und das MAX_JOBS="2" (Single Core + 1) zum kompilieren genommen?

Wenn also der Desktop mithilft, schickt das Netbook alles was es kompilieren will an den Desktop und der verteilt es wieder?

Der -jN Wert soll aber trotzdem ca. die Anzahl der CPUs + 1 Sein oder? (Was bewirkt ein zu kleiner/zu großer Wert)

Gibt es wo handbücher über Icecream Cross Compiling? Ich hab nur allgemeine gesehen. (Ich habe nur Intel Prozessoren mit 32/64 Bit, keine komplett andere Architektur wie SPARC oder ARM.)

LG Roland

----------

## 72_6f_6c_61_6e_64

Hallo,

Ich hab jetzt diesen Artikel im Wiki gefunden (http://www.gentoo-wiki.info/HOWTO_Setup_An_ICECREAM_Compile_Cluster)

Kann man den so eins zu eins hernehmen?

Den Abschnitt Caveats versteh ich nicht.

Genkernel verwend ich nicht. Bezieht sich das nur auf genkernel oder auch wenn man den Kernel manuel configuriert?

LG Roland

----------

## disi

Mal in kurz...

Auf deinem x86_64 Desktop:

```
# emerge crossdev

# crossdev -t i686-pc-linux-gnu
```

Auf jedem Rechner im Cluster:

```
# echo "sys-devel/icecream" >> /etc/portage/package.keywords

# emerge sys-devel/icecream

# echo "PREROOTPATH="/usr/lib/icecc/bin:$PREROOTPATH" >> /etc/make.conf
```

Auf deinem x86_64 Desktop:

```

# CHOST=x86_64-pc-linux-gnu icecream-create-env i686-pc-linux-gnu
```

Die Datei (lkjh34k5h34k5h34kuh5l2hk45h23kj.tar.gz) die du da bekommst wuerde ich umbenennen in die CHOST des Ziels, also etwa: i686-pc-linux-gnu.tar.gz

Die musst du auf deinen Laptop kopieren und speicher sie in /var/icecream

Dann auf dem Laptop:

```

# echo "ICECC_VERSION="x86_64:/var/icecream/i686-pc-linux-gnu.tar.gz" >> /etc/env.d/01icecream

# env-update && source /etc/profile
```

Dann jeweils die /etc/conf.d/icecream auf beiden Rechnern anpassen und die make.conf fuer die max jobs und den scheduler.

Die Rechner muessen ausserdem im gleichen Netzwerk sein.

Auf jedem Rechner

```
# /etc/init.d/icecream start
```

Dann emerge <whatever>

p.s. auf diesem Weg hilft der Desktop dem Laptop aber das Laptop dem Desktop nicht. Willst du das auch, musst du noch crossdev auf dem Laptop installieren und einen environment File auf dem ...

----------

## 72_6f_6c_61_6e_64

Danke, genau diesen Teil hab ich im Wiki nicht ganz verstanden.

Nur ein paar Anmerkungen:

Was ändere ich in deiner Anleitung wenn ich auf dem Netbook amd64 hab?

Macht es etwas aus, dass die Rechner die Helfen verschiedene CPUs haben (Schulnotebook Core2Duo, andere irgendeienen Pentium4 oder neuer.)

Ich hatte nie vor, mit dem Netbookprozessor jemandem beim compilieren zu helfen (der ist zu langsam.)

Wenn ich das Netbook als Scheduler setze und keine anderen icecream-dienste im Netz laufen nimmt er zum kompilieren nur meinen Rechner und hält sich an die MAX_JOBS eingabe hällt (ist das jetz die Anzahl der Cores +1 oder die doppelte anzahl der Cores +1?), auch wenn die -jN viel höher ist?

Wie ist das allgemein mit dem -jN wert? Wenn der auf 15 ist und der MAX_JOBS wert auf 2 (3? siehe klammer oben). Läuft der dan langsamer? Oder wäre das das selbe wie wenn man den auf -j2 stellt?

LG Roland

----------

## disi

Gib doch mal "uname -a" von all deinen Rechnern, die du benutzen willst. Entscheidend ist in der make.conf die Variable CHOST.

Wenn alle die gleiche CHOST haben, brauchst du crossdev garnicht.

Sobald du deine Rechner konfiguriert hast und icecream laeuft, entscheidet eigentlich nur noch ICECREAM_MAX_JOBS wieviel der Compiler nimmt. Du kannst mit -jN nichts kaputtmachen. Nur wenn du zuviele Jobs gleichzeitig laufen laesst wird das System lahm. Das ist ein Wert, den DU setzt und das System haelt sich daran, das hat nichts mit der Anzahl der Prozessoren zu tun. Die Anzahl der Cores +1 ist nur ein Richtwert.

----------

## 72_6f_6c_61_6e_64

Hallo, 

das mit dem uname -m wird schwer. Mein Netbook hab ich zurzeit noch auf x86 (deshalb neuinstall), und die anderen Rechner stehen im Büro von meinem Vater, da komm ich erst am Mitwoch hin, ich nehm aber an dass die auch x86 sind.

Mein Netbook soll dann amd64 haben.

Aja, was ist wenn der -jN Wert zu klein ist? Dann ist er auch langsam oder?

Wie wirkt sich das aus, wenn den -jN Wert einstellt, und berücksichtigt, dass zwei Rechner helfen. Wenn die nicht helfen, und ich das nicht zurückändere, ist der merkbar langsamer?

LG Roland

----------

## disi

Um ehrlich zu sein, der Einfachheit halber, wenn ich ein Netbook mit <= 4GB RAM haette wuerde ich auf x86 bleiben.

Zur Zeit scheint es zwar, dass x86_64 stabiler ist als x86 aber damit waerst du 100% compatible mit den Rechnern deines Vaters  :Smile: 

----------

## 72_6f_6c_61_6e_64

Ich dachte, dass die Programme ein bisschen flüssiger laufen mit 64Bit (vorallem aircrack).

----------

## 72_6f_6c_61_6e_64

Heißt dass also, das die Programme mit 64Bit nicht spürbar schneller sind?

Was meinst du mit stabiler?

Betrifft Cross-compiling auch verschiedene Prozessortypen auf der gleichen Architektur (x86 -> i686)?

LG Roland

----------

## disi

 *72_6f_6c_61_6e_64 wrote:*   

> Ich dachte, dass die Programme ein bisschen flüssiger laufen mit 64Bit (vorallem aircrack).

 

Wenn du wirklich grosse Berechnungen mit deinem Laptop anstellen willst, ist 64bit nuetzlich.

Sieh es so:

Festplatte ---> Speicher ---> Cache --64bit-> CPU

Das ist die Reihenfolge in der Geschwindigkeit.

Je nachdem welchen Teil du mehr benutzt ist die Geschwindigkeit. 

Wenn du grosse Berechnungen anstellst, wird er hauptsaechlich den Cache benutzen und du hast Geschwidkeitsvorteile.

Programme starten ist kein Unterschied -> Flaschenhals Festplatte.

Zwischen Programmen wechseln ist kein Unterschied -> Flaschenhals Speicher.

Video de- encode und gucken sollte schneller sein.

Aircrack sollte kein Unterschied sein, da ist der Flaschenhals die Netzwerkkarte.

3D Anwendungen, keine Ahnung, da wird ja vieles an die Grafikkarte abgegeben, es koennte sein dass es da schneller laeuft.

Praktisch alles was sich lange im Speicher abspielt hat Vorteile.

----------

## 72_6f_6c_61_6e_64

Also auf einem Netbook macht es nicht wirklich einen Unterschied.

Dann bleib ich bei 32 Bit. Das heißt aber, dass ich kein Cross-Compiling brauche oder? Trotz verschiedener CPUs?

LG Roland

----------

## disi

 *72_6f_6c_61_6e_64 wrote:*   

> Also auf einem Netbook macht es nicht wirklich einen Unterschied.
> 
> Dann bleib ich bei 32 Bit. Das heißt aber, dass ich kein Cross-Compiling brauche oder? Trotz verschiedener CPUs?
> 
> LG Roland

 

CFLAGS = CPU spezifische Angaben, was teilweise nur die eine CPU versteht

CHOST = generelle Angabe ueber die Architektur (32bit, 64bit Intel oder anderes ARM, SPARC, SPARC64, PPC, Whatever)

Der GCC einer Architektur kann i.d.R. fuer alle CPU dieser Architektur Programme uebersetzen.

Also, wenn du 2 Rechner hast und die eine CPU hat sse2 und die andere nicht, koennen trotzdem beide Programme mit sse2 Optimierung uebersetzen. Nur wirst du bei der CPU ohne sse2 Probleme bekommen, falls das Programm dieses Feature nutzen moechte.

----------

## Genone

 *72_6f_6c_61_6e_64 wrote:*   

> Also auf einem Netbook macht es nicht wirklich einen Unterschied.
> 
> Dann bleib ich bei 32 Bit. Das heißt aber, dass ich kein Cross-Compiling brauche oder? Trotz verschiedener CPUs?

 

Solange CHOST auf allen Rechnern identisch ist braucht man sich nicht mit Cross-Compiling zu beschäftigen.

----------

