# [processeur] smp ou pas (résolu)

## Il turisto

Bonjour,

je vous explique mon problème :

Je suis en train d'écrire un script de mise à jour automatique pour debian (pas de troll merci) et par défaut debian installe un kernel non smp. Je voudrais savoir si il existe un moyen fiable de savoir si le cpu est un smp et par conséquent installer automatiquement le kernel adéquat.

Par fiable j'entend : autre chose que : cat /proc/cpuinfo | grep "Dual core"

J'ai regardé dans /proc/cpuinfo et avec lshw et a part le family model rien ne permet vraiment de savoir si le cpu est un bicore ou si la carte mère comporte plusieurs cpu.

Merci pour votre aide.Last edited by Il turisto on Wed Oct 25, 2006 2:50 pm; edited 1 time in total

----------

## -KuRGaN-

Et bien cat /proc/cpuinfo | grep cpu1   :Wink: 

Edit: ha non, merde, j'ai mal lu ta question   :Embarassed: 

----------

## Il turisto

Non forcément je n'ai qu'un cpu vu que je n'ai pas de kernel smp.

sinon : cat proc/cpuinfo | grep cpu | wc -l (ou qqch y ressemblant).

Mais non  :Smile: 

Merci quand même. Un autre idée?

----------

## Bapt

Un début de piste avec dmidecode qui va lire le smbios : 

```
emerge dmidecode
```

Par contre tu aurai l'information par processeur physique, mais je ne trouve pas le champs me disant c'est un dual core ou non, mais il doit y être. Une machien bipro dual core.

Par exemple au taf des xeon dual core :

```
Handle 0x0400

        DMI type 4, 35 bytes.

        Processor Information

                Socket Designation: PROC_1

                Type: Central Processor

                Family: Xeon

                Manufacturer: Intel

                ID: 34 0F 00 00 FF FB EB BF

                Signature: Type 0, Family F, Model 3, Stepping 4

                Flags:

                        FPU (Floating-point unit on-chip)

                        VME (Virtual mode extension)

                        DE (Debugging extension)

                        PSE (Page size extension)

                        TSC (Time stamp counter)

                        MSR (Model specific registers)

                        PAE (Physical address extension)

                        MCE (Machine check exception)

                        CX8 (CMPXCHG8 instruction supported)

                        APIC (On-chip APIC hardware supported)

                        SEP (Fast system call)

                        MTRR (Memory type range registers)

                        PGE (Page global enable)

                        MCA (Machine check architecture)

                        CMOV (Conditional move instruction supported)

                        PAT (Page attribute table)

                        PSE-36 (36-bit page size extension)

                        CLFSH (CLFLUSH instruction supported)

                        DS (Debug store)

                        ACPI (ACPI supported)

                        MMX (MMX technology supported)

                        FXSR (Fast floating-point save and restore)

                        SSE (Streaming SIMD extensions)

                        SSE2 (Streaming SIMD extensions 2)

                        SS (Self-snoop)

                        HTT (Hyper-threading technology)

                        TM (Thermal monitor supported)

                        SBF (Signal break on FERR)

                Version: Not Specified

                Voltage: 1.4 V

                External Clock: 800 MHz

                Max Speed: 3600 MHz

                Current Speed: 3400 MHz

                Status: Populated, Enabled

                Upgrade: ZIF Socket

                L1 Cache Handle: 0x0700

                L2 Cache Handle: 0x0701

                L3 Cache Handle: 0x0702

                Serial Number: Not Specified

                Asset Tag: Not Specified

                Part Number: Not Specified

Handle 0x0401

        DMI type 4, 35 bytes.

        Processor Information

                Socket Designation: PROC_2

                Type: Central Processor

                Family: Xeon

                Manufacturer: Intel

                ID: 34 0F 00 00 FF FB EB BF

                Signature: Type 0, Family F, Model 3, Stepping 4

                Flags:

                        FPU (Floating-point unit on-chip)

                        VME (Virtual mode extension)

                        DE (Debugging extension)

                        PSE (Page size extension)

                        TSC (Time stamp counter)

                        MSR (Model specific registers)

                        PAE (Physical address extension)

                        MCE (Machine check exception)

                        CX8 (CMPXCHG8 instruction supported)

                        APIC (On-chip APIC hardware supported)

                        SEP (Fast system call)

                        MTRR (Memory type range registers)

                        PGE (Page global enable)

                        MCA (Machine check architecture)

                        CMOV (Conditional move instruction supported)

                        PAT (Page attribute table)

                        PSE-36 (36-bit page size extension)

                        CLFSH (CLFLUSH instruction supported)

                        DS (Debug store)

                        ACPI (ACPI supported)

                        MMX (MMX technology supported)

                        FXSR (Fast floating-point save and restore)

                        SSE (Streaming SIMD extensions)

                        SSE2 (Streaming SIMD extensions 2)

                        SS (Self-snoop)

                        HTT (Hyper-threading technology)

                        TM (Thermal monitor supported)

                        SBF (Signal break on FERR)

                Version: Not Specified

                Voltage: 1.4 V

                External Clock: 800 MHz

                Max Speed: 3600 MHz

                Current Speed: 3400 MHz

                Status: Populated, Idle

                Upgrade: ZIF Socket

                L1 Cache Handle: 0x0703

                L2 Cache Handle: 0x0704

                L3 Cache Handle: 0x0705

                Serial Number: Not Specified

                Asset Tag: Not Specified

                Part Number: Not Specified

```

----------

## yoyo

Il me semble (à prendre avecdes pincettes donc) que le "dmesg" fourni une information à ce sujet lorsqu'il liste le/les procos (et cela quelque soit la config du noyau). Un truc du genre "smp capable" ou équivalent. Mais attention car certains P4 ne supportant pas l'HT affichent aussi cette option (j'en ai fait l'expérience). Du coup il faudrait ajouter un test sur la fréquence du proco qui permet de filtrer ce genre "d'anomalie".

Mes 0.02 cents

----------

## xaviermiller

et pourquoi ne pas ajouter "bêtement" le support SMP, qui sera détecté au démarrage ?

----------

## Il turisto

Je vais regarder à vos solutions tout de suite.

Qu'entends tu par betement Xavier? Tu proposes d'installer le smp dans tout les cas?

----------

## El_Goretto

Moi c'était faire la différence entre un HyperThreading et un vrai multiproc/dual core qui m'intéressait, et j'ai vu le physicalID dans le cpuinfo. Je ne sais pas si à peut te servir.

----------

## xaviermiller

 *Il turisto wrote:*   

> Je vais regarder à vos solutions tout de suite.
> 
> Qu'entends tu par betement Xavier? Tu proposes d'installer le smp dans tout les cas?

 

Oui. N'est-ce pas le cas des live-linux ? En général, tu mets autant de "features" que tu veux dans le kernel, et elles s'activeront si le matériel le supportent (et sinon, tant pis, tu auras gaspillé quelques dixaines de ko en RAM)

----------

## titoucha

 *XavierMiller wrote:*   

> Oui. N'est-ce pas le cas des live-linux ? En général, tu mets autant de "features" que tu veux dans le kernel, et elles s'activeront si le matériel le supportent (et sinon, tant pis, tu auras gaspillé quelques dixaines de ko en RAM)

 

Pas seulement, j'ai regardé chez Ubuntu, la version dapper a plusieurs kernels, dont un compilé pour le support du smp, dans la nouvelle version qui va sortir les développeurs ont décidé de ne sortir plus qu'un seul kernel avec toutes les options compilées et celles-ci sont utilisées ou non.

----------

## Il turisto

donc pour vous dans tout les cas je met le smp et je me pose pas de questions?

De toute facon tout les cpu vont devenir bicore je suppose...

----------

## PabOu

En fait, oui c'est une bonne solution.

Mais dans ce cas, pourquoi le kernel par défaut de debian n'est pas smp ? Ils doivent avoir une raison valable, parceque bon, debian c'est beaucoup utilisé sur des serveurs qui ont le multi-cpu depuis bien plus longtemps que nos pauvres CPU de particuliers :'(

Quelqu'un connait la raison ou alors je devrai faire une recherche lorsque ma curiosité m'aura suffisement titillé ?

----------

## El_Goretto

Normalement, tu perds en perfs si tu actives le SMP en monoCPU, et ça n'est pas négligeable, d'après ce que j'avais aperçu lors de mon dernier "faisage" de noyau pour le C2D.

Sans compter qu'un ou 2 trucs noyau sont broken en SMP (genre des modules iptables comme owner).

----------

## Il turisto

comment font les lives cd comme knoppix, ... pour détecter le cpu?

----------

## Il turisto

Personne?

----------

## nico_calais

 *Il turisto wrote:*   

> donc pour vous dans tout les cas je met le smp et je me pose pas de questions?
> 
> De toute facon tout les cpu vont devenir bicore je suppose...

 

Bah...je comprend pas trop le pb. Tu peux mettre le SMP et voir si après ton deuxième proc est reconnu.

Si pour une raison ou pour une autre tu veux enlever le support smp, tu enlèves l'option.

----------

## Il turisto

on parle ici d'une distro debian et d'un installeur automatique.

Dans mes scripts je n'ai pas vraiment le temps d'installer le smp, rebooter, tester, virer le smp, rebooter, ...

----------

## nico_calais

Bah dans ce cas là, via apt installe le noyau smp.

Et t'auras les 2 dans ton chargeur de démarrage.

----------

## blasserre

```
apt-get install genkernel
```

----------

## Il turisto

Je comprend bien ou vous voulez en venir mais : 

- genkernel n'existe pas dans le tree par défaut de debian

- il n'est pas question que je recompile un kernel car je fais une installation full automatique

En fait je crée un cd d'installation pour ma boite qui installe, configure, ... debian et installe notre logiciel et le configure. Mon cd crypte les partitions qui doivent l'etre, met en place le systeme de backup, configure apache, mysql et tout le toutim, firewall, ajoute des scripts d'administration que j'ai écrit, crée les comptes, ... bref la totale.

Vous comprendrez aisément que je ne peux pas me permettre de scripter une compilation de kernel automatique ni de choisir un noyau au boot. Ici le but est de livrer un cd à nos clients qui installe tout même si le mec ne connait rien a linux. Et une fois par mois lui envoyer un cd de mise à jour qui met à jour le système, le logiciel, les scripts, ...

Bref tout fonctionne sauf que je ne sais pas comment détecter si il y a un ou x cpu en sachant que par défaut j'ai un kernel non smp.

----------

## blasserre

 *Il turisto wrote:*   

> - genkernel n'existe pas dans le tree par défaut de debian

 

c'est ce qui me conforte dans mon choix de gentoo  :Mr. Green: 

pour être sérieux, je ne pense pas que ce soit possible, le SMP n'étant pas un module il te faudrait un hack de bootloader (<- halte aux trolls) détectant l'arch de ton CPU et bootant le noyau ad-hoc

à ma connaissance : ça n'existe pas

il te reste donc deux choix mettre ce support.. ou pas

fais des tests de perfs sur des machines possédant ou pas ce support avec des kernels possédant ou pas SMP 

et choisis la meilleure option, sachant qu'un noyau SMP ne bootera pas forcément sur une machine mono-CPU

(voir l'aide de menuconfig) je choisirai la solution non-SMP

après ça dépend du parc, de son évolution... etc.

----------

## dapsaille

Ou bien ... tu installes les 2 kernels ... et ensuite tu lance un cat /proc/cpuinfo 

```

processor       : 0

vendor_id       : AuthenticAMD

cpu family      : 15

model           : 35

model name      : AMD Athlon(tm) 64 X2 Dual Core Processor 4400+

stepping        : 2

cpu MHz         : 2200.146

cache size      : 1024 KB

physical id     : 0

siblings        : 2

core id         : 0

cpu cores       : 2

fdiv_bug        : no

hlt_bug         : no

f00f_bug        : no

coma_bug        : no

fpu             : yes

fpu_exception   : yes

cpuid level     : 1

wp              : yes

flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov

pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt lm 3dnowext 3d

now pni lahf_lm cmp_legacy ts fid vid ttp

bogomips        : 4401.41

processor       : 1

vendor_id       : AuthenticAMD

cpu family      : 15

model           : 35

model name      : AMD Athlon(tm) 64 X2 Dual Core Processor 4400+

stepping        : 2

cpu MHz         : 2200.146

cache size      : 1024 KB

physical id     : 0

siblings        : 2

core id         : 1

cpu cores       : 2

fdiv_bug        : no

hlt_bug         : no

f00f_bug        : no

coma_bug        : no

fpu             : yes

fpu_exception   : yes

cpuid level     : 1

wp              : yes

flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov                     pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt lm 3dnowext 3                     now pni lahf_lm cmp_legacy ts fid vid ttp

bogomips        : 4399.32

```

 et j'en déduis que si tu peux trouver la chaine processor :1 et bien tu jartes le kernel standard et tu modifie le bootloader :p

 voila

----------

## yoyo

 *Il turisto wrote:*   

> Dans mes scripts je n'ai pas vraiment le temps d'installer le smp, rebooter, tester, virer le smp, rebooter, ...

 Je saisis mal le problème en fait ... Tu fais une install via un livecd perso c'est ça ??

Si tel est le cas, tu te fais un livecd avec 2 kernels, un smp et l'autre monocpu. Tu démarres par défaut sur le smp (l'autre c'est en cas d'incompatibilité smp/mono) et tu contrôles le nombre de cpu présents sur le système. En fonction du résultat, tu copies le noyau approprié.

Mes 0.02 cents

----------

## Il turisto

Oui dans le cas ou c'est moi qui fais l'installation mais la c'est pour un client.

Si c'etais moi qui fais l'install je fais un cat /proc/cpuinfo et je sais si c'est un bicore ou pas.

Mais la tout doit etre automatique ...

----------

## Bapt

Et bien, ton cd d'install, tu le fait bouter en smp et faire toute son install en smp, donc tu pourras savoir au cour de ton install si le smp est nécessaire ou pas, si oui tu met ton kernel-smp, si non, tu met ton kernel-nonsmp

----------

## yoyo

 *Il turisto wrote:*   

> Mais la tout doit etre automatique ...

 C'est-à-dire ?? Il met le liveCD et ça se débrouille ?? Ou alors c'est une image disque ??

----------

## Il turisto

il met le live cd et ca se debrouille.

Booter en smp ca n'a pas l'air possible. J'utilise le debian-installer et visiblement on ne peut pas changer son kernel à lui ou alors je n'ai pas trouvé comment faire.

----------

## Temet

C'est une idée en l'air, mais t'as essayé de rentrer en contact avec un dev de Knoppix ou un truc du style pour lui demander une piste.

... désolé si c'est très con ce que je dis   :Embarassed: 

EDIT : je viens de penser que le live CD de Kubuntu ne m'avait pas détecté le core duo ... et que je n'avais qu'un core qui tournait... c'est ptet donc pas possible.

----------

## Il turisto

bon ben j'ai la solution :

```

hwinfo --smp

SMP support: yes (2 cpus)

```

```

hwinfo --smp

SMP support: no

```

voici le résultat sur une machine smp ou pas avec un kernel non smp.

Merci bcp pour votre aide.

----------

