Re: -Os versus -O2

From: david
Date: Sun Jun 24 2007 - 21:08:05 EST


On Sun, 24 Jun 2007, Arjan van de Ven wrote:

I wouldn't care if CONFIG_CC_OPTIMIZE_FOR_SIZE was hidden behind
CONFIG_EMBEDDED, but as long as it's available as a general purpose
option we have to consider it's performance.

I think you are missing the point. You tell the kernel to
OPTIMIZE_FOR_SIZE. *over performance*. Sure. Performance shouldn't be
EXTREMELY pathetic, but it's not; and if it were, it's a problem with
the gcc version you have (and if you are a distro, you can surely fix
that)


The interesting questions are:
Does -Os still sometimes generate faster code with gcc 4.2?
If yes, why?

on a system level, size can help performance because you have more
memory available for other things. It also reduces download size and
gives you more space on the live CD....

if you want to make things bigger again, please do this OUTSIDE the
"optimize for size" option. Because that TELLS you to go for size.

then do we need a new option 'optimize for best overall performance' that goes for size (and the corresponding wins there) most of the time, but is ignored where it makes a huge difference?

I started useing Os several years ago, even when it was hidden in the embedded menu becouse in many cases the smaller binary ended up being faster.

in reality this was a flaw in gcc that on modern CPU's with the larger difference between CPU speed and memory speed it still preferred to unroll loops (eating more memory and blowing out the cpu cache) when it shouldn't have.

if that has been fixed on later versions of gcc this would be a good thing. if it hasn't (possibly in part due to gcc optimizations being designed to be cross platform) then either the current 'go for size' or a hybrid 'performance' option is needed.

David Lang
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/