2008-10-13 11:36:01

by Phil Endecott

[permalink] [raw]
Subject: [PATCH] Mention Intel Atom in Kconfig.cpu

Am I right in thinking that CONFIG_MCORE2 is the correct choice for an
Intel Atom? (It seems to work for me, so far.) If this is true, since
there are quite a lot of these chips in circulation now and the choice
is not obvious, I think it would be helpful to add something along the
following lines to arch/x86/Kconfig.cpu.

Signed-off-by: Phil Endecott <[email protected]>
---
diff --git a/arch/x86/Kconfig.cpu b/arch/x86/Kconfig.cpu
index b225219..7df0801 100644
--- a/arch/x86/Kconfig.cpu
+++ b/arch/x86/Kconfig.cpu
@@ -263,11 +263,12 @@ config MPSC
in /proc/cpuinfo. Family 15 is an older Xeon, Family 6 a
newer one.

config MCORE2
- bool "Core 2/newer Xeon"
+ bool "Core 2/newer Xeon/Atom"
help
- Select this for Intel Core 2 and newer Core 2 Xeons (Xeon
51xx and 53xx)
- CPUs. You can distinguish newer from older Xeons by the CPU family
- in /proc/cpuinfo. Newer ones have 6 and older ones 15 (not a typo)
+ Select this for Intel Core 2, newer Core 2 Xeon (Xeon 51xx
and 53xx)
+ and Intel Atom CPUs. You can distinguish newer from older
Xeons by
+ the CPU family in /proc/cpuinfo. Newer ones have 6 and older
ones 15
+ (not a typo).

config GENERIC_CPU
bool "Generic-x86-64"




2008-10-13 12:14:16

by Phil Endecott

[permalink] [raw]
Subject: [PATCH] Mention Intel Atom in Kconfig.cpu (less garbled this time)

[Appoligies for the garbled first attempt at posting this. Blame the
original author for the long lines!?]

Am I right in thinking that CONFIG_MCORE2 is the correct choice for an
Intel Atom? (It seems to work for me, so far.) If this is true, since
there are quite a lot of these chips in circulation now and the choice
is not obvious, I think it would be helpful to add something along the
following lines to arch/x86/Kconfig.cpu.

Signed-off-by: Phil Endecott <[email protected]>
---
diff --git a/arch/x86/Kconfig.cpu b/arch/x86/Kconfig.cpu
index b225219..7df0801 100644
--- a/arch/x86/Kconfig.cpu
+++ b/arch/x86/Kconfig.cpu
@@ -263,11 +263,12 @@ config MPSC
in /proc/cpuinfo. Family 15 is an older Xeon, Family 6 a newer one.

config MCORE2
- bool "Core 2/newer Xeon"
+ bool "Core 2/newer Xeon/Atom"
help
- Select this for Intel Core 2 and newer Core 2 Xeons (Xeon 51xx and 53xx)
- CPUs. You can distinguish newer from older Xeons by the CPU family
- in /proc/cpuinfo. Newer ones have 6 and older ones 15 (not a typo)
+ Select this for Intel Core 2, newer Core 2 Xeon (Xeon 51xx and 53xx)
+ and Intel Atom CPUs. You can distinguish newer from older Xeons by
+ the CPU family in /proc/cpuinfo. Newer ones have 6 and older ones 15
+ (not a typo).

config GENERIC_CPU
bool "Generic-x86-64"




2008-10-13 12:28:21

by Andi Kleen

[permalink] [raw]
Subject: Re: [PATCH] Mention Intel Atom in Kconfig.cpu

"Phil Endecott" <[email protected]> writes:

> Am I right in thinking that CONFIG_MCORE2 is the correct choice for an
> Intel Atom?

No, Atom is completely different from a Core2.

Right now 586 or 686 is a reasonable choice.

-Andi

2008-10-13 13:18:55

by Arjan van de Ven

[permalink] [raw]
Subject: Re: [PATCH] Mention Intel Atom in Kconfig.cpu

On Mon, 13 Oct 2008 14:28:06 +0200
Andi Kleen <[email protected]> wrote:

> "Phil Endecott" <[email protected]> writes:
>
> > Am I right in thinking that CONFIG_MCORE2 is the correct choice for
> > an Intel Atom?
>
> No, Atom is completely different from a Core2.
>
> Right now 586 or 686 is a reasonable choice.

actually 586 is completely wrong.

Core2 instruction set with tune=generic is still the best to set.

--
Arjan van de Ven Intel Open Source Technology Centre
For development, discussion and tips for power savings,
visit http://www.lesswatts.org

2008-10-13 13:24:22

by Andi Kleen

[permalink] [raw]
Subject: Re: [PATCH] Mention Intel Atom in Kconfig.cpu

On Mon, Oct 13, 2008 at 09:18:48AM -0400, Arjan van de Ven wrote:
> On Mon, 13 Oct 2008 14:28:06 +0200
> Andi Kleen <[email protected]> wrote:
>
> > "Phil Endecott" <[email protected]> writes:
> >
> > > Am I right in thinking that CONFIG_MCORE2 is the correct choice for
> > > an Intel Atom?
> >
> > No, Atom is completely different from a Core2.
> >
> > Right now 586 or 686 is a reasonable choice.
>
> actually 586 is completely wrong.

It is nearest in scheduling at least. You'll lose CMOV, but that's
not a big loss.

> Core2 instruction set with tune=generic is still the best to set.

Not sure that is true. These option are mostly for the compiler.

-Andi

--
[email protected]

2008-10-13 13:30:28

by Arjan van de Ven

[permalink] [raw]
Subject: Re: [PATCH] Mention Intel Atom in Kconfig.cpu

On Mon, 13 Oct 2008 15:30:51 +0200
Andi Kleen <[email protected]> wrote:
>
> > Core2 instruction set with tune=generic is still the best to set.
>
> Not sure that is true. These option are mostly for the compiler.

exactly, and our benchmarks show that tune=generic is best right now
for Atom.
(586 scheduling sounds nice, but the pipelines are rather different.
And the benchmarks don't lie.. ;-)


--
Arjan van de Ven Intel Open Source Technology Centre
For development, discussion and tips for power savings,
visit http://www.lesswatts.org

2008-10-13 13:47:04

by Andi Kleen

[permalink] [raw]
Subject: Re: [PATCH] Mention Intel Atom in Kconfig.cpu

On Mon, Oct 13, 2008 at 09:30:14AM -0400, Arjan van de Ven wrote:
> On Mon, 13 Oct 2008 15:30:51 +0200
> Andi Kleen <[email protected]> wrote:
> >
> > > Core2 instruction set with tune=generic is still the best to set.
> >
> > Not sure that is true. These option are mostly for the compiler.
>
> exactly, and our benchmarks show that tune=generic is best right now

So it doesn't matter as long as you set X86_GENERIC (and
CONFIG_CC_OPTIMIZE_FOR_SIZE)

It would probably make sense to add a setting for those.

-Andi

--
[email protected]

2008-10-13 14:03:46

by Adrian Bunk

[permalink] [raw]
Subject: Re: [PATCH] Mention Intel Atom in Kconfig.cpu

On Mon, Oct 13, 2008 at 09:30:14AM -0400, Arjan van de Ven wrote:
> On Mon, 13 Oct 2008 15:30:51 +0200
> Andi Kleen <[email protected]> wrote:
> >
> > > Core2 instruction set with tune=generic is still the best to set.
> >
> > Not sure that is true. These option are mostly for the compiler.
>
> exactly, and our benchmarks show that tune=generic is best right now
> for Atom.
> (586 scheduling sounds nice, but the pipelines are rather different.
> And the benchmarks don't lie.. ;-)

That sounds a bit dangerous since tune=generic is documented to change
the semantics between gcc versions to better fit more recent CPUs
(there's even a small difference between gcc 4.2 and gcc 4.3):

As new processors are deployed in the marketplace, the
behavior of this option will change. Therefore, if you
upgrade to a newer version of GCC, the code generated option
will change to reflect the processors that were most common
when that version of GCC was released.


cu
Adrian

--

"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon Seed

2008-10-13 14:17:32

by Arjan van de Ven

[permalink] [raw]
Subject: Re: [PATCH] Mention Intel Atom in Kconfig.cpu

On Mon, 13 Oct 2008 17:02:30 +0300
Adrian Bunk <[email protected]> wrote:

> On Mon, Oct 13, 2008 at 09:30:14AM -0400, Arjan van de Ven wrote:
> > On Mon, 13 Oct 2008 15:30:51 +0200
> > Andi Kleen <[email protected]> wrote:
> > >
> > > > Core2 instruction set with tune=generic is still the best to
> > > > set.
> > >
> > > Not sure that is true. These option are mostly for the compiler.
> >
> > exactly, and our benchmarks show that tune=generic is best right now
> > for Atom.
> > (586 scheduling sounds nice, but the pipelines are rather different.
> > And the benchmarks don't lie.. ;-)
>
> That sounds a bit dangerous since tune=generic is documented to
> change the semantics between gcc versions to better fit more recent
> CPUs (there's even a small difference between gcc 4.2 and gcc 4.3):
>

reality is that tune=generic avoids the things that are "really bad"
for a wide generation of cpus; the world of x86 is such that there
really are many common things that are good for the vast majority of
the cpus out there (or at least neutral).

Future versions of GCC might have a specific ATOM model. Until they do,
tune=generic is the right thing based on tests over a few gcc versions.
Yes it's a bit fluid, but no gcc isn't going to suddenly go do stupid
things for currently mass-sold cpus.


--
Arjan van de Ven Intel Open Source Technology Centre
For development, discussion and tips for power savings,
visit http://www.lesswatts.org

2008-10-13 15:36:45

by J.A. Magallón

[permalink] [raw]
Subject: Re: [PATCH] Mention Intel Atom in Kconfig.cpu (less garbled this time)

On Mon, 13 Oct 2008 13:13:57 +0100, "Phil Endecott" <[email protected]> wrote:

> [Appoligies for the garbled first attempt at posting this. Blame the
> original author for the long lines!?]
>
> Am I right in thinking that CONFIG_MCORE2 is the correct choice for an
> Intel Atom? (It seems to work for me, so far.) If this is true, since
> there are quite a lot of these chips in circulation now and the choice
> is not obvious, I think it would be helpful to add something along the
> following lines to arch/x86/Kconfig.cpu.
>
> Signed-off-by: Phil Endecott <[email protected]>
> ---
> diff --git a/arch/x86/Kconfig.cpu b/arch/x86/Kconfig.cpu
> index b225219..7df0801 100644
> --- a/arch/x86/Kconfig.cpu
> +++ b/arch/x86/Kconfig.cpu
> @@ -263,11 +263,12 @@ config MPSC
> in /proc/cpuinfo. Family 15 is an older Xeon, Family 6 a newer one.
>
> config MCORE2
> - bool "Core 2/newer Xeon"
> + bool "Core 2/newer Xeon/Atom"
> help
> - Select this for Intel Core 2 and newer Core 2 Xeons (Xeon 51xx and 53xx)
> - CPUs. You can distinguish newer from older Xeons by the CPU family
> - in /proc/cpuinfo. Newer ones have 6 and older ones 15 (not a typo)
> + Select this for Intel Core 2, newer Core 2 Xeon (Xeon 51xx and 53xx)
> + and Intel Atom CPUs. You can distinguish newer from older Xeons by
> + the CPU family in /proc/cpuinfo. Newer ones have 6 and older ones 15
> + (not a typo).
>
> config GENERIC_CPU
> bool "Generic-x86-64"
>

I think Atom is worth a separate setting. It can share some flags with other
processors but has some very special features. And perhaps (I would like it)
distros begin to ship special 'netbook' kernels without all the extras you
don't need (raid, scsi adapters, etc...), with some tunes (iosched=nopp for
SSDs...), and memory scrapping settings (NR_CPUS=2 or 4...).

Some questions:
- How worthy is to reduce NR_CPUS from 64 (standard in many distros) to 2 or 4 ?
- Atom is an in-order processor. Intel included some flag in icc to build code
with in-order scheduling, which will be the best settings in gcc ?
From what I have found, apart from other things, -match=prescott is the best
for Atom, wrt processor features. Perhaps the best settings are
-march=prescott -mtune=generic
until gcc people implement an in-order scheduler.
- Anyways, what does all this matter if Makefile_32.cpu reads:

cflags-$(CONFIG_MPENTIUMII) += -march=i686 $(call tune,pentium2)
cflags-$(CONFIG_MPENTIUMIII) += -march=i686 $(call tune,pentium3)
cflags-$(CONFIG_MPENTIUMM) += -march=i686 $(call tune,pentium3)
cflags-$(CONFIG_MPENTIUM4) += -march=i686 $(call tune,pentium4)
cflags-$(CONFIG_MCORE2) += -march=i686 $(call tune,core2)

ie, no march=xxxx ? Why don't we use something like

cflags-$(CONFIG_MCORE2) += $(call cc-option,-march=core2,-march=i686) $(call tune,core2)

TIA

--
J.A. Magallon <jamagallon()ono!com> \ Software is like sex:
\ It's better when it's free
Mandriva Linux release 2009.0 (Cooker) for i586
Linux 2.6.25-jam18 (gcc 4.3.1 20080626 (GCC) #1 SMP

2008-10-13 19:22:33

by Phil Endecott

[permalink] [raw]
Subject: Re: [PATCH] Mention Intel Atom in Kconfig.cpu

Arjan van de Ven wrotes:
> On Mon, 13 Oct 2008 17:02:30 +0300
> Adrian Bunk <bunk <at> kernel.org> wrote:
>
> > On Mon, Oct 13, 2008 at 09:30:14AM -0400, Arjan van de Ven wrote:
> > > On Mon, 13 Oct 2008 15:30:51 +0200
> > > Andi Kleen <andi <at> firstfloor.org> wrote:
> > > >
> > > > > Core2 instruction set with tune=generic is still the best to
> > > > > set.
> > > >
> > > > Not sure that is true. These option are mostly for the compiler.
> > >
> > > exactly, and our benchmarks show that tune=generic is best right now
> > > for Atom.
> > > (586 scheduling sounds nice, but the pipelines are rather different.
> > > And the benchmarks don't lie..
> >
> > That sounds a bit dangerous since tune=generic is documented to
> > change the semantics between gcc versions to better fit more recent
> > CPUs (there's even a small difference between gcc 4.2 and gcc 4.3):
> >
>
> reality is that tune=generic avoids the things that are "really bad"
> for a wide generation of cpus; the world of x86 is such that there
> really are many common things that are good for the vast majority of
> the cpus out there (or at least neutral).
>
> Future versions of GCC might have a specific ATOM model. Until they do,
> tune=generic is the right thing based on tests over a few gcc versions.
> Yes it's a bit fluid, but no gcc isn't going to suddenly go do stupid
> things for currently mass-sold cpus.

Well, if the Intel experts can't even agree, what hope do I have of
getting it right :-( I chose Core2 because I read somewhere that Atom
was "feature compatible" with it, but of course that doesn't say
anything about the optimal optimisations. I trust that someone will
update Kconfig.cpu with their idea of the right choice for Atom eventually.

(Maybe there should be a way to auto-suggest the right setting for a
native build based on /proc/cpuinfo? I think the gcc build process can
do something like that.)

Cheers, Phil.