Re: CFLAGS in /etc/make.conf / Optimierungen

From: Alvar Freude <alvar(at)a-blast.org>
Date: Wed, 26 Dec 2007 10:31:19 +0100

Hallo Oliver,

zuerst einmal dank für die ausführliche Erklärung!

-- Oliver Fromme <olli(at)lurza.secnetix.de> wrote:

> Ja, werden sie. Die oben angegebene CFLAGS-Zeile ist
> gleich in mehrfacher Hinsicht problematisch:
>
> - Man sollte bei den CFLAGS grundsätzlich "?=" statt "="
> verwenden, damit einzelne Makefiles die Einstellung
> überschreiben können, wenn es notwendig ist.

OK, verstehe.

Wobei das bei den Ports meines Wissens dennoch klappt, da wohl make.conf
zuvor eingelesen wird.
Mein PostgreSQL hat beide Angaben in den Compilerflags, das -O2 kommt von
/etc/make.conf, das -O3 aus de Ports (das ist eine extra Option).

pg_config:
CFLAGS = -O2 -pipe -march=athlon64 -O3 -funroll-loops -Wall [...]

der GCC nimmt da hoffentlich letzteres ;-)

> - Es gibt keinen Grund, -O zu verwenden und damit den
> Code unnötig langsamer zu machen.

Ich bin ja bisher davon ausgegangen, dass *kein* -O (sondern quasi ein
-O0) verwendet wird. So ist meines Erachtens auch die Dokumentation zu
interpretieren. Dass dies anders ist, das ist natürlich schön -- aber
wie Du auch weiter unten schreibst, sollte da dringend die Dokumentation
angepasst werden.

> - Wenn man grundsätzlich alles mit -g compilieren will,
> Sollte man eher »CFLAGS+= -g« schreiben.

das -g in dem Beispiel oben ist natürlich in den meisten Fällen sowieso
nicht sinnvoll, das ist klar.

> - Davon abgesehen sind die Default-Compilerflags bereits
> so eingestellt, dass man das Maximum an Performance
> erhält, das möglich ist, ohne dass bekannte sich Bugs
> oder bekannte Probleme manifestieren.

... was aber so nicht dokumentiert ist!
Ich werde daher aber die Sachen aus /etc/make.conf rausnehmen.

Gibt es noch weitere Sachen, die in /usr/src/share/examples/etc/make.conf
quasi empfohlen werden aber nicht eingesetzt werden sollen?

> Übrigens, momentan ist der Default sowohl unter RELENG_6
> als auch RELENG_7 »-O2 -pipe -fno-strict-aliasing«.

wo wird das denn definiert?

> > Beim Kernel macht u.U. ja alles ab -O2 Probleme,
>
> Nö. Die Einstellungen für den Kernel sind aktuell diesel-
> ben wie für den Rest, jedenfalls unter FreeBSD/i386 und
d> ohne DEBUG (bei amd64 sieht es etwas anders aus), und von
> einigen speziellen Sourcen abgesehen.

Bei i386 unter 5.x hatte ich mit -O2 mal Probleme, der Compile-Vorgang
wurde abgebrochen.

> Kann man übrigens in /sys/conf/kern.pre.mk nachlesen.

... was aber auch nicht dokumentiert ist, und dort ist auch nicht
dokumentiert, warum welche Einstellung gewählt wird. ;-)

> > Was ist zu CPUTYPE zu sagen?
>
> Das ist eigentlich in der make.conf(5)-Manpage hinreichend
> beschrieben. Wenn Du eine konkrete Frage dazu hast, heraus
> damit.

Ich wollte damit nur fragen, ob es dagegen auch etwas einzuwenden ist; da
make.conf(5) ja nicht vollständig ist, kann man sich darauf ja
offensicht nicht verlassen.

> Ja, wobei es aber auch kein großer Schaden ist, wenn man es
> nicht tut. Ich glaube, in den meisten Fällen kann man den
> Unterschied höchstens messen, aber nicht fühlen.

Das kommt wohl auf den Default-Wert an ... ;-)

 
> > warum ist das nicht dokumentiert?
>
> Das ist eine sehr gute Frage. Ich würde mir wünschen,
> dass die ganze Sache besser in share/examples/etc/make.conf
> und in make.conf(5) beschrieben wird, inkl. entsprechenden
> Warnungen. Ich hatte das vor kurzem mal in der -current-
> Liste angesprochen, und jemand hat dann den Wortlaut auch
> ein wenig klarifiziert, aber ich glaube, nach RELENG_6 hat
> die Änderung ihren Weg leider nicht gefunden.

Es wäre auf jeden Fall gut, wenn das in beiden klar und deutlich steht.
Denn alles andere kann man ja nicht wirklich erraten.

Ciao
  Alvar

-- 
** Alvar C.H. Freude, http://alvar.a-blast.org/
** http://www.assoziations-blaster.de/
** http://www.wen-waehlen.de/
** http://odem.org/

To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Wed 26 Dec 2007 - 10:31:32 CET

search this site