Gentoo (speziell fuer CS 1.6) optimieren
Die Tatsache, dass Du das hier liest bedeutet, dass dein System tatsaechlich gebootet hat.
Dazu erstmal herzlichen Glueckwunsch :).
Nun gehts dran, etwas mehr Leistung aus dem Gentoo zu quetschen.
--- Leute die Linux lieben und voller Leidenschaft nutzen bitte hier aufhoeren, wir werden es sehr stark missbrauchen um unseren Wuenschen nachzukommen. ---
--- Es koennte deine Gefuehle verletzen. ---
Jetzt gehen wir erstmal genauer auf die make.conf ein.
Ich werde sie erstmal posten, ihr passt sie bitte entsprechend an.
CFLAGS="-O3 -march=prescott -pipe -fomit-frame-pointer -ffast-math -mfpmath=sse -msse -DNDEBUG " // wenn ihr einen AMD habt nutzt bitte "-march=athlon-xp"
CXXFLAGS="${CFLAGS}"
CHOST="i686-pc-linux-gnu"
USE="glibc-omitfp -debug"
ACCEPT_KEYWORDS="~x86" // bitte keine Diskussion ob das klug ist
MAKEOPTS="-j6" // nur fuer Quadcores geeingnet, bei Dualcores bitte auf "-j3" abaendern.
GENTOO_MIRRORS="ftp://ftp.uni-erlangen.de/pub/mirrors/gentoo ftp://mirrors.sec.informatik.tu-darmstadt.de/gentoo/
http://ftp-stud.fht-esslingen.de/pub/Mirrors/gentoo/ ftp://ftp-stud.fht-esslingen.de/pub/Mirrors/gentoo/"
SYNC="rsync://rsync.europe.gentoo.org/gentoo-portage"
Nun ne kurze Erklaerung.
Die make.conf ist diejenige Datei, die der Kompiler betrachtet, bevor er beginnt ein Paket zu bauen.
Er verwendet die dort angegeben Optionen um den Code speziell nach den Wuenschen des Users anzupassen.
Genau DAS macht Gentoo fuer uns so wertvoll, unter anderen Distros muessen wir zum groeßten Teil mit fertig kompilierten Paketen arbeiten.
- Wieso march=prescott bzw march=athlon-xp und nicht die neusten ( march=core2 bzw. march=k8 )
> CS 1.6 stammt von 1999. Obwohl es in der Zwischenzeit stark veraendert wurde ist der Kern immernoch auf der damaligen Programmierung aufgebaut.
> Die -march - Optionen prescott und athlon-xp sind die letzten cpu-typen unter gentoo, welche am weitesten entwickelt sind, ohne 64-Bit-Extensions
> ins SSE Instruktionsset mit einzukompilieren. Der resultierende Code wird um einiges kleiner und vor allem schneller.
> Weiter runter in der Architektur koennen wir leider nicht gehen, weil diese beiden die "untersten" Architekturen sind, die mfpmath=sse und -msse unterstuetzen.
Was ist sse ?
Ich bin zu faul es zu erklaeren, ein einfaches Copy & Paste muss reichen:
"
Use scalar floating point instructions present in the SSE instruction set. This instruction set is supported by Pentium4 and newer chips, in the AMD line by Athlon-4, Athlon-xp and Athlon-mp chips. The earlier version of SSE instruction set supports only single precision arithmetics, thus the double and extended precision arithmetics is still done using 387. The resulting code should be considerably faster in the majority of cases and avoid the numerical instability problems of 387 code, but may break some existing code that expects temporaries to be 80bit. "
Diese Option ist bei einer 64Bit-Architektur standartmaessig aktiviert.
Das ist auch einer der vielen Gruende warum manche behaupten man muss fuer beste Performance
unbedingt 64Bit benutzen, unwissend, dass man die 32Bit -
Architektur dementsprechend anpassen kann.
Warum glibc-omitfp, -debug und-DNDEBUG.
Die USE-Flag glibc-omitfp deaktiviert groesstenteils die Faehigkeit der glibc, Probleme sauber zu debuggen.
Der resultierende Code wird um einiges kleiner und gewinnt an Schnelligkeit.
Die USE-Flag -debug wird von einigen weiteren Paketen genutzt, es hat den gleichen Effekt wie die oben genannte.
Die Option -DNDEBUG ist ein bisschen gefaehrlicher, sie wird zum Beispiel vom gcc und vom kernel beachtet wenn man ihn kompiliert, er verliert dadurch fast komplett die Faehigkeit auftretende Probleme zu debuggen.
Der Leistungsgewinn ist jedoch zu hoch um es aussen vorzulassen.
So, dass waers zur make.conf
Nun muessen wir uns die Änderungen nurnoch zu nutze machen.
Erstmal beginnen wir mit einem
# emerge =gcc-4.3.3 glibc
um den gcc und die glibc erstmal auf den neusten Stand zu bringen.
Das wird einige Zeit dauern bis das fertig ist.
Anschliessend ein:
# gcc-config -l
Das zeigt uns an, welche gcc-versionen wir besitzen.
Um den neuen 4.3.3 zu aktivieren:
# gcc-config i686-pc-linux-gnu-4.3.3
Wenn wir dann
# gcc-config -l
machen sollte hinter dem 4.3.3 ein * sein.
So, jetzt geht der Spass los.
>>> Merke: Solltet ihr ein fertiges Gentoo von eurem Anbieter installiert haben, weil ihr zu faul wart selbst eins zu bauen, führt erst
>>> # emerge --sync && emerge portage && emerge --update system && emerge --update world
>>> aus bevor ihr weitermacht. Der Rest von euch darf diese 3 Zeilen ignorieren.
# emerge -eD -j6 --keep-going system &&
emerge -eD -j6 --keep-going world
Dies baut saemtliche Pakete auf dem kompletten System neu auf, mit unseren Vorgaben.
Es wird mehrere Stunden dauern.
Danach bitte das Linux rebooten und den selben Schritt noch einmal wiederholen.
# emerge -eD -j6 --keep-going system &&
emerge -eD -j6 --keep-going world
Wieso? Weil wir erst beim zweiten Mal die bereits optimierten Pakete benutzen um das System zu optimieren.
Herzlichen Glueckwunsch, auch dieses Kapitel ist fertig. Du naeherst dich nun dem Ende.
