Anzeige:
Ergebnis 1 bis 4 von 4

Thema: Gentoo Optimierungs howto

  1. #1
    Premium Mitglied Avatar von Stage
    Registriert seit
    Jun 2002
    Beiträge
    810

    Gentoo Optimierungs howto

    0 Vorwort
    Dieses Howto ist für Gentooneulinge und für diejenigen, denen die Einstellungen in der make.conf einige Kopfzerbrechen bereitet.
    Man sollte sich stets an die Installationanleitung halten
    Nachfolgende Anleitung sollte man beachten, wenn man bei Punkt 5.e und Punkt 6 des Installationshandbuchs angelangt ist.
    Aber bevor es jetzt daran geht die make.conf fröhlich zu editieren, sollte man vorher eine vollständige mit Kommentaren und allen Optionen versehene Sampledatei kopieren. Dazu einfach folgenden Befehl nach dem entpacken des stage-archives ausführen (nur Stage1 Systeme).
    Code:
    copy /mnt/gentoo/etc/make.conf.example /mnt/gentoo/etc/make.conf
    Achtung: bei Stage2 und 3 Systemen darf man nicht einfach die alte make.conf überschreiben, weil dadurch die CHOST Einstellung verändert werden kann, daher die ursprüngliche Einstellung aufschreiben und in die Sampledatei eintragen, erst danach kopieren.

    1 CHOST
    sollte so gewählt werden
    • 386 --> CHOST="i386-pc-linux-gnu"
    • 486 --> CHOST="i486-pc-linux-gnu"
    • 586, Pentium, AMD K6 Serie, Winchip-C6 --> CHOST="i586-pc-linux-gnu"
    • Pentium Pro und neuer, AMD Athlon und neuer --> CHOST="i686-pc-linux-gnu"

    ACHTUNG: Diese Einstellung bei einem Stage 2 und 3 System nicht verändern.

    2 Kompilereinstellungen

    2.1 CFLAGS
    Die CFLAGS bestimmen das Kompilerverhalten des C-Kompilers.
    Eine typische Zeile sieht so aus:
    Code:
    CFLAGS="-march=xxxxx -O2 -pipe"
    Wichtig bei -O3, das das der grosse Buchstabe o ist und nicht die Zahl NULL.

    -O3 ist die höchste Optimierungstufe bei gcc (gnu C-Kompiler)
    -O2 optimiert weniger als -O3, die Binaries werden auch nicht so gross (ist auch die Defaulteinstellung bei GNU-Projekten)
    -Os schließt alle Optimierungen von -O2 ein, außer diejenigen, die das Binary grösser machen würden
    -O1 Optimiert noch weniger als O2
    -O0 deaktiviert die Optimierungen (sollte nicht verwendete werden)

    Häufig hab ich auch gesehen das -march und -mcpu gleichzeitig verwendet werden. Das ist falsch.
    -march optimiert den Code vollständig für den angegebenen Prozessor, so das dieser auf älteren CPU's nicht lauffähig ist.
    -mcpu optimiert dementsprechend nicht ganz so gut, aber der Code bleibt auf älteren CPU's trotzdem lauffähig.

    Folgende CPU Typen (x86) werden vom aktuellen stable gcc (3.3.4) unterstützt
    i386, i486, i586, i686, pentium, pentium-mmx, pentiumpro, pentium2, pentium3, pentium4, k6, k6-2, k6-3, athlon, athlon-tbird, athlon-4, athlon-xp, athlon-mp, winchip-c6, winchip2 und c3

    Hinweis: wer sich nicht sicher ist welchen CPU-Typ er hat, kann mit
    Code:
    cat /proc/cpuinfo
    einige Details in Erfahrung bringen

    Wenn die CPU die SSE Befehlserweiterungen unterstützt können die mathematischen Operationen durch diese übernommen werden -mfpmath=sse

    Achtung: Mir sind schon Pakete begegnet, die mit diesem Flag nicht erfolgereich kompiliert werden konnten.
    hierzu ein Auszug aus der Manpage
    The resulting code should be considerably faster in majority of cases and avoid the numerical
    instability problems of 387 code, but may break some existing code that expects temporaries to be
    80bit.
    als eine weitere Option zum Optimieren ist -fomit-frame-pointer zu nennen. In den Manpages steht dazu, dass dieses bei sämtlichen -O*-Optimierungen aktiviert wird, wenn es mit Debugging nicht in Konflikt gerät. Bei x86-Architekturen scheint dies aber der Fall zu sein, also muss man es explizit mit angeben. Wer also später nicht vor hat Programme debuggen zu müssen, kann dies ohne Gefahr mit angeben, weil es einen guten Geschwindigkeitsvorteil bringt. Die Funktionen müssen dann nicht jedesmal, die Framepointer sichern, setzen bzw wiederherstellen.

    -pipe ist dazu da den Kompileprozess zu beschleunigen

    2.2 CXXFLAGS
    die CXXFLAGS sollten genauso aussehen wie die CFlags
    Code:
    CXXFLAGS="${CFLAGS}"
    ACHTUNG: wenn man wie weiter oben beschrieben die Sampledatei kopiert hat, dann ist CXXFLAGS mit einem # versehen. Nicht vergessen dies wegzunehmen.

    2.3 Sonstiges
    Damit die CPU auch gut ausgelastet ist, empfiehlt es sich die MAKEOPTS weiter unten in make.conf zu setzen. Die Zahl hinter dem -j sollte so gewählt werden das sie der CPU-Anzahl+1 entspricht
    Bei einem Singleprozessorsystem sollte das so aussehen
    Code:
    MAKEOPTS="-j2"
    3 USE-Flags
    eine Liste aller Flags und Beschreibungen findet man in

    3.1 Funktionsweise
    Jeder der schon einmal aus Quellcode ein Programm erstellt hat, wird festgestellt haben, daß man dem ./configure Script verschiedene Parameter übergeben kann. Einige dieser Parameter regeln welche Funktionalität das Programm haben soll. Und genau das machen die USE-Flags in vereinfachter Form.

    3.2 welche USE-Flags?
    Nun wird sich natürlich jeder fragen, was muss ich nun setzen, und was nicht. Diese Frage ist nicht leicht zu beantworten, weil es unzählige Konfigurationen gibt.
    Es gibt aber einen Ansatz, wie man vermeidet, dass man etwas vergisst oder zu viel setzt.

    3.2.1 Stage 1 + 2
    Bevor es zum Bootstrappen kommt, müssen noch die USE-Flags eingestellt werden. Damit man nicht unnötig die lange Liste der Flags durchgeht und sich dadurch jede menge Arbeit macht, sollte man folgenden Trick versuchen.
    Man gibt einfach mal
    Code:
    emerge -pv system
    ein. Keine Angst, dabei wird noch nichts an eurem System verändert. Aber man bekommt eine Liste der Pakete, die während des Bootstraps und anschließenden emerge system installiert werden. Es werden aber auch die unterstützten USE-Flags der Pakete angezeigt. Man erkennt, daß schon einige aktiviert sind (anhand des "+" vor dem Flag und der roten Einfärbung). Diese aktivierten Flags stammen aus /etc/make.profile/make.defaults (diese Datei NICHT verändern, sondern alles in /etc/make.conf eintragen).
    Meist sind da Dinge dabei, die man nicht unbedingt will. Anstatt jetzt jedes einzelne Flag in der make.conf zu deaktivieren (indem man -FLAG bei USE="" einträgt) was man nicht braucht, kann man auch gleich
    Code:
    USE="-* x86"
    eintragen. Wenn man die make.conf jetzt abspeichert, und anschließend
    Code:
    emerge -pv system
    ausführt, sollten nun alle Flags deaktiviert sein. Dies möchte man aber nicht. Also schaut man anhand der Ausgabe was man brauchen kann und trägt diese in die make.conf ein. Hier ist zu beachten das durch Hinzunahme von Flags auch neue Pakete mit in die Installation aufgenommen werden können, deswegen muss man, nachdem alle Flags in der make.conf eingetragen sind, noch einmal mit emerge -pv system prüfen ob neue Pakete hinzugekommen sind und mit diesen natürlich eventuell neue Flags, die man noch aktivieren möchte.

    Anmerkung: Man sollte zumindest nls und pam mit angeben, damit man später ein System hat, das verschiedene Sprachen und Zeichensätze unterstützt und durch PAM ein gutes Absicherungswerkzeug für den Rechner bereitstellt.
    Besitzer einer CPU mit den Befehlserweiterungen 3dnow, mmx, sse sollten auch die zutreffenden Flags mit dazuschreiben: 3dnow mmx sse

    Achtung! die Flags static, build, bootstrap, selinux, livecd nicht setzen, weil die für interne Sachen gedacht sind.
    Anschliessend kann man wie im Handbuch beschrieben fortfahren.

    3.2.2 Stage 3
    Wenn man sich für eine Stage 3 Installation entschieden hat, oder nachdem emerge system fertig ist, kann man auch die gleiche Methode, wie unter 3.2.1 beschrieben bei den zu installierenden Paketen anwenden.
    Code:
    emerge -pv PAKETNAME
    4 Zusatz

    4.1 UFED - Use Flag Editor
    Nachdem man nun ein lauffähiges System besitzt, kann man, das Tool ufed installieren (emerge app-portage/ufed).
    Das ist eine auf NCurses bassierende GUI, mit der man eine Liste aller Flags erhält (global und local). Zusätzlich kann dieses auch Flags an- und abwählen, und die Ändererungen an der make.conf vornehmen. Natürlich kann man das auch alles wie bisher mit dem Editor erledigen

    4.2 Tutorial zum sauber halten des Systems und richtigen Installieren von maskierten Paketen
    siehe: http://www.linuxforen.de/forums/showthread.php?t=140969

    4.3 Tutorial zum manuellen Konfigurieren des Kernels 2.6.x
    siehe: http://de.gentoo-wiki.com/Kernel_manuell_kompilieren

    4.4 Emerge beschleunigen
    siehe: http://de.gentoo-wiki.com/Emerge_beschleunigen
    dazu siehe auch: http://de.gentoo-wiki.com/Arbeiten_mit_tmpfs
    Geändert von Stage (16.05.05 um 13:13 Uhr) Grund: Kernelconfig-Howto URL geändert. Punkt 4.4 added
    Kernel (2.6.x) Konfigurations-Howto
    Gentoo Optimierungs-Howto
    IRC: irc.freenode.org - #gentoo-anfaenger

  2. #2
    Premium Mitglied Avatar von SeeksTheMoon
    Registriert seit
    Feb 2002
    Beiträge
    1.704
    wer hochoptimierte CFLAGS haben will, der kann sich hier bedienen:
    http://www.freehackers.org/gentoo/gc...g_gcc3opt.html
    Die für den Athlon XP 2000+ funktionieren so auf jeden Fall (auch bei mir), ich konnte nur 1-2 für Normalsterbliche sehr exotische Programme nicht kompilieren (Crystalspace Engine und das zweite hab ich vergessen) und hab die Flags dafür runtergeschraubt.

    Auf der Seite gibt es auch eine Liste mit "safe-flags", die also auf jeden Fall funktionieren.
    Das sind die Optionen O3, pipe, fomit-frame-pointer. Für einen Athlon sieht das so aus:
    CFLAGS="-march=athlon -O3 -pipe -fomit-frame-pointer"

    Die Seite mit diesen Flags steht hier: http://www.freehackers.org/gentoo/gc...flag_gcc3.html
    Geändert von SeeksTheMoon (16.11.03 um 10:45 Uhr)
    09F911029D74E35BD84156C5635688C0

  3. #3
    Premium Mitglied Avatar von Stage
    Registriert seit
    Jun 2002
    Beiträge
    810
    Ich wurde darauf aufmerksam gemacht, dass im Gentooforum ein kleines Script zum anzeigen der kompatiblen CFlags existiert.
    http://forums.gentoo.org/viewtopic.php?t=53602

    Der einfachhalber hab ich das Script gleich mal als txt-Datei angehangen.
    Datei auf dem Rechner abspeichern, dann den chmod setzen
    Code:
    chmod 744 cpuinfo.txt
    und script starten
    Code:
    ./cpuinfo.txt
    Geändert von Stage (18.10.04 um 16:04 Uhr) Grund: Anhang geändert, da Zeilenumbruch durch Ascii-transfer auf Windowsnorm geändert wurde, und das Script dadurch nicht mehr lauffähig war. Danke an ness für den Hinweis.
    Kernel (2.6.x) Konfigurations-Howto
    Gentoo Optimierungs-Howto
    IRC: irc.freenode.org - #gentoo-anfaenger

  4. #4
    Premium Mitglied Avatar von spychodelics
    Registriert seit
    Nov 2002
    Ort
    Offenbach
    Beiträge
    623
    Die Seiten die SeeksTheMoon angegeben hat sind leider down, gab es dort fertige Dateien die zufällig noch jemand hat?

    Brauche eine Optimierung für AMD Athlon XP 2400+ TB

    dankend spychodelics

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •