Skip to contentSkip to conversation

Kernel GCC Optimizations

DISCUSSION Ro0tSiEgE 8 participants 10 messages Dec 21, 2002 – Dec 22, 2002

lore
Share & tools
lore

Ro0tSiEgE

author
#0 lore raw

Is there any risk using -O3 instead of -O2 to compile the kernel, and why?
Also what about compiling against glibc 2.3.1 and gcc 3.2.x??
Thanks!

--Ro0tSiEgE

#1 lore raw
Quoted 1 line

Is there any risk using -O3 instead of -O2 to compile the kernel, and why?

* It might uncover subtle bugs that would otherwise not occur.

* Compiling with unusual options means that less people will know about any problems it causes you.

Quoted 1 line

Also what about compiling against glibc 2.3.1 and gcc 3.2.x??

The kernel does not use glibc functions, so you can compile the kernel and glibc with different compilers.

Bug reports about GCC 3.2.x compiled kernels will probably be welcomed by most developers.

John.

#2 lore raw
Quoted 2 lines
Quoted 1 line

Is there any risk using -O3 instead of -O2 to compile the kernel, and why?

* It might uncover subtle bugs that would otherwise not occur.

I wonder: for the sake of performance and good use of the precious clock- cycles, shouldn't there be made a start of fixing those bugs? Assuming that the bugs you're talking about are not compiler-bugs, they *are* bugs in the code that should be fixed, shouldn't they?

Quoted 2 lines

* Compiling with unusual options means that less people will know about any problems it causes you.

So, let's make it -O6 per default for 2.7.x/3.1.x?

Folkert
www.vanheusden.com/Linux

#3 lore raw
Quoted 9 lines
Quoted 4 lines
Quoted 2 lines

Is there any risk using -O3 instead of -O2 to compile the kernel, and why?

* It might uncover subtle bugs that would otherwise not occur.

I wonder: for the sake of performance and good use of the precious clock- cycles, shouldn't there be made a start of fixing those bugs? Assuming that the bugs you're talking about are not compiler-bugs, they *are* bugs in the code that should be fixed, shouldn't they?

There obviously are bugs in GCC, and the kernel team work around the known ones. This is part of the reason that there is a recommended compiler version. The Linux kernel also uses GCC compiler extensions, and those can change between GCC versions.

The kernel has bugs too, but if they are not triggered by the recommended version of GCC, then they might not get fixed immediately, especially if the fix is non-trivial.

Quoted 4 lines
Quoted 2 lines

* Compiling with unusual options means that less people will know about any problems it causes you.

So, let's make it -O6 per default for 2.7.x/3.1.x?

A higher -O setting does not necessarily mean better performance - loop unrolling is one compiler optimisation that I *think* is performed by GCC at high -O settings, and that *often* causes code to be slower.

John.

#4 lore raw
Quoted 7 lines
Quoted 2 lines

So, let's make it -O6 per default for 2.7.x/3.1.x?

A higher -O setting does not necessarily mean better performance - loop unrolling is one compiler optimisation that I *think* is performed by GCC at high -O settings, and that *often* causes code to be slower.

In all official releases of GCC, -Ox, x >= 4, has exactly the same effect as -O3. This is unlikely to change anytime soon.

-O3 enables exactly two optimizations relative to -O2:
-finline-functions and -frename-registers. This may or may not change in the future. It does *not* enable loop unrolling. -finline-functions is almost always a major performance loss, because it makes the code huge and blows out the I-cache. I'm not familiar with the performance effects of -frename-registers; it might be worth experimenting with just that switch.

zw

#5 lore raw
In reply to [email protected]
Quoted 11 lines · On Saturday 21 December 2002 04:10 pm, [email protected] wrote:
Quoted 4 lines
Quoted 2 lines

Is there any risk using -O3 instead of -O2 to compile the kernel, and why?

* It might uncover subtle bugs that would otherwise not occur.

I wonder: for the sake of performance and good use of the precious clock- cycles, shouldn't there be made a start of fixing those bugs? Assuming that the bugs you're talking about are not compiler-bugs, they *are* bugs in the code that should be fixed, shouldn't they?

Quoted 4 lines
Quoted 2 lines

* Compiling with unusual options means that less people will know about any problems it causes you.

So, let's make it -O6 per default for 2.7.x/3.1.x?

Let's not. I'd rather have the best kernel developers concentrating on finishing important kernel features rather than digging their way out of esoteric optimizer debugging sessions only to find it was a flaw in gcc. The difference in performance boost between -O2 and greater levels isn't usually enough to make a significant impact, not as significant as the introduction of important new features, for example.
---scott

#6 lore raw

Em Sat, Dec 21, 2002 at 07:20:28PM -0600, scott thomason escreveu:

Quoted 17 lines · On Saturday 21 December 2002 04:10 pm, [email protected] wrote:
Quoted 11 lines
Quoted 4 lines
Quoted 2 lines

Is there any risk using -O3 instead of -O2 to compile the kernel, and why?

* It might uncover subtle bugs that would otherwise not occur.

I wonder: for the sake of performance and good use of the precious clock- cycles, shouldn't there be made a start of fixing those bugs? Assuming that the bugs you're talking about are not compiler-bugs, they *are* bugs in the code that should be fixed, shouldn't they?

Quoted 4 lines
Quoted 2 lines

* Compiling with unusual options means that less people will know about any problems it causes you.

So, let's make it -O6 per default for 2.7.x/3.1.x?

Quoted 7 lines

Let's not. I'd rather have the best kernel developers concentrating on finishing important kernel features rather than digging their way out of esoteric optimizer debugging sessions only to find it was a flaw in gcc. The difference in performance boost between -O2 and greater levels isn't usually enough to make a significant impact, not as significant as the introduction of important new features, for example.

Sometimes even _reducing_ the optimization for performance level makes it faster, try with -Os. And this was already discussed here and elsewhere, reading the archives would help a lot avoiding adding more noise to the list.

- Arnaldo

#8 lore raw
In reply to Ro0tSiEgE

Hi Ro0tSiEgE!

Quoted 2 lines · On Sat, 21 Dec 2002, Ro0tSiEgE wrote:

Is there any risk using -O3 instead of -O2 to compile the kernel, and why?
Also what about compiling against glibc 2.3.1 and gcc 3.2.x??

I believe because of some assembler stuff that needs to be compiled as is and may not be optimized more that -O2 you cannot use -O3.

There is no problem compiling the kernel with glibc 2.3.1 and gcc 3.2.x.

Axel

#9 lore raw
Quoted 4 lines
Quoted 2 lines

Is there any risk using -O3 instead of -O2 to compile the kernel, and why?
Also what about compiling against glibc 2.3.1 and gcc 3.2.x??

I believe because of some assembler stuff that needs to be compiled as is and may not be optimized more that -O2 you cannot use -O3.

Then selective compile with -O2 or -O6? Like; everything with assembly in it with -O2 and the rest with -O6.

Folkert
www.vanheusden.com/Linux