Skip to contentSkip to conversation

Mention Intel Atom in Kconfig.cpu

PATCH In review Phil Endecott 5 participants 11 messages Oct 13, 2008 x86

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 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.

---

arch/x86/Kconfig.cpu +0 -0
index b225219..7df0801 100644
@@ -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"
#1 lore raw

PATCH 1/1 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.

---

arch/x86/Kconfig.cpu +5 -4
index b225219..7df0801 100644
@@ -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"
#2 lore raw

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

Quoted 23 lines · Phil Endecott

[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.

---

arch/x86/Kconfig.cpu +1 -1
index b225219..7df0801 100644
@@ -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

arch/x86/Kconfig.cpu config MPSC · line 274

Quoted 10 lines
arch/x86/Kconfig.cpu +4 -3
-         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

Signature · 4 lines
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
#3 lore raw
In reply to Phil Endecott
Quoted 2 lines · Phil Endecott

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

#4 lore raw
Quoted 8 lines · On Mon, 13 Oct 2008 14:28:06 +0200 Andi Kleen <[email protected]> wrote:
Quoted 2 lines · Phil Endecott

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.

Signature · 3 lines
Arjan van de Ven 	Intel Open Source Technology Centre
For development, discussion and tips for power savings, 
visit http://www.lesswatts.org
#5 lore raw
Quoted 5 lines · Arjan van de Ven
Quoted 2 lines · On Mon, 13 Oct 2008 14:28:06 +0200 Andi Kleen <[email protected]> wrote:

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

Quoted 8 lines
Quoted 6 lines
Quoted 2 lines

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.

Quoted 1 line

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

Signature · 1 line
[email protected]
#6 lore raw
Quoted 4 lines · On Mon, 13 Oct 2008 15:30:51 +0200 Andi Kleen <[email protected]> wrote:
Quoted 2 lines

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.. ;-)

Signature · 3 lines
Arjan van de Ven 	Intel Open Source Technology Centre
For development, discussion and tips for power savings, 
visit http://www.lesswatts.org
#7 lore raw
Quoted 8 lines · Arjan van de Ven
Quoted 4 lines · On Mon, 13 Oct 2008 15:30:51 +0200 Andi Kleen <[email protected]> wrote:
Quoted 2 lines

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

Signature · 1 line
[email protected]
#8 lore raw
In reply to Arjan van de Ven
Quoted 11 lines · Arjan van de Ven
Quoted 4 lines · On Mon, 13 Oct 2008 15:30:51 +0200 Andi Kleen <[email protected]> wrote:
Quoted 2 lines

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

Signature · 4 lines
       "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
#9 lore raw
Quoted 9 lines · On Mon, 13 Oct 2008 17:02:30 +0300 Adrian Bunk <[email protected]> wrote:
Quoted 8 lines · Arjan van de Ven
Quoted 5 lines · On Mon, 13 Oct 2008 15:30:51 +0200 Andi Kleen <[email protected]> wrote:
Quoted 3 lines

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

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

Quoted 9 lines
Quoted 4 lines

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.

Signature · 3 lines
Arjan van de Ven 	Intel Open Source Technology Centre
For development, discussion and tips for power savings, 
visit http://www.lesswatts.org
#10 lore raw

Arjan van de Ven wrotes:

Quoted 26 lines
Quoted 9 lines · On Mon, 13 Oct 2008 17:02:30 +0300 Adrian Bunk <bunk <at> kernel.org> wrote:
Quoted 8 lines · Arjan van de Ven
Quoted 5 lines · On Mon, 13 Oct 2008 15:30:51 +0200 Andi Kleen <andi <at> firstfloor.org> wrote:
Quoted 3 lines

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

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

Quoted 8 lines
Quoted 3 lines

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).

Quoted 4 lines

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.