Learning about Control of Optimization -- for dummies please

David Southwell david at vizion2000.net
Wed Aug 5 13:02:09 UTC 2009


>      On Wed, 5 Aug 2009 12:19:23 +0200 Roland Smith <rsmith at xs4all.nl> 
wrote:
> >On Wed, Aug 05, 2009 at 10:54:07AM +0100, David Southwell wrote:
> >> I have found
> >> http://docs.freebsd.org/info/gcc/gcc.info.Optimize_Options.html.
> >>
> >> I am about to build a new kernel am starting to dig a bit deeper into
> >> things I have, until now, taken for granted.
> >>
> >> The above link is very informative in technical terms about how to
> >> control optimization but I find it difficult to interpret the info in a
> >> way that tells me what might work best on my own system (Intel quad
> >> Core) with 8G of ram.
> >
> >The build system takes care of that, once you have set the correct
> >CPUTYPE in /etc/make.conf. For a quad-core, set CPUTYPE=nocona. See
> >make.conf(5), /usr/src/share/mk/bsd.cpu.mk and
> >/usr/src/sys/conf/kern.pre.mk.
>
>      As I read the man page for [g]cc, though, setting -march=nocona (which
> is where the CPUTYPE information ends up in the cc commands) tells the
> compiler which base instruction set to use and which model of instruction
> scheduling to use, but to get the rest of the model-dependent features
> used, he would still need to add "-mmmx -msse -msse2 -msse3" at a minimum
> for most other compilations, though these would not be advisable for kernel
> compilations.  I don't recall whether SSE4 instructions are in the Nocona/
> Merom/Kentfield chips or first appear in the Core i7 series.  I don't think
> the compiler versions available under FreeBSD support the SSE4
> instructions, though, so SSE4 doesn't matter anyway.
>
> >Additionally, compiler settings for building the kernel can be set with
> >COPTFLAGS in /etc/make.conf. Using anything other than -O or -O2 is
> >not guaranteed to work. If you don't know what you are doing, do not use
> >COPTFLAGS and stick with the defaults that the build system generates.
>
>      Right.  -O3 might royally screw a kernel in particular. :-)
>
>
>                                   Scott Bennett, Comm. ASMELG, CFIAG
Thanks for add more useful info however would you mind elaborating a little 
more because I do not understand the implications.

should I have:
CPUTYPE=nocona 
in make.conf?
Do I need anything else in make.conf?

So far my draft make.conf has these entries:

CPUTYPE=nocona

CFLAGS= -O2 -fno-strict-aliasing -pipe

FORCE_MAKE_JOBS=        true

Incidentally I am also puzzled because it appears necessary to use amd64 
GENERIC as my starting point when the cpu is actually Intel Quad Core!! 

I presume this means that in drafting a kernconf I need to refer to;

dns1# pwd
/usr/src/sys/amd64/conf
dns1# ls -l
total 44
-rw-r--r--  1 root  wheel     13 Jun 20  2005 .cvsignore
-rw-r--r--  1 root  wheel    482 Apr 15 04:14 DEFAULTS
-rw-r--r--  1 root  wheel  11968 Apr 15 04:14 GENERIC
-rw-r--r--  1 root  wheel    818 Apr 15 04:14 GENERIC.hints
-rw-r--r--  1 root  wheel   1036 Apr 15 04:14 MAC
-rw-r--r--  1 root  wheel    132 Apr 15 04:14 Makefile
-rw-r--r--  1 root  wheel  20721 Apr 15 04:14 NOTES


It would be great if some logical consistency could be introduced into naming 
conventions!!! It would really help those of us who know little and make it a 
trifle easier to climb the greasy pole of knowledge <chuckles>




More information about the freebsd-questions mailing list