Linux SMP HOWTO

David Mentr�, David.Mentre@irisa.fr

v1.9, 13 janvier 2000
Ce HOWTO passe en revue les principaux probl�mes et leurs solutions li�s la configuration et � l'emploi d'un syst�me SMP sous Linux.

1. Introduction

Linux fonctionne sur les machines SMP (Symetric Multi-Processors). Le support SMP fut introduit dans la version 2.0 du noyau et a �t� largement am�lior� depuis. La gestion est beaucoup plus fine dans la s�rie 2.2.x que dans la 2.0.x, d'o� de meilleures performances lorsque les processus font appel au noyau !

HOWTO maintenu par David Mentr� ( David.Mentre@irisa.fr). La derni�re version de ce HOWTO peut �tre obtenue �

Si vous voulez contribuer � ce HOWTO, je pr�f�re les diffs SGML version de ce document, mais toute remarque (en texte pur) sera grandement appr�ci�. Si vous m'envoyez un e-mail � propos de ce document, ins�rez s'il vous pla�t un tag tel [Linux SMP HOWTO] dans le champ Suject: de votre e-mail. �a m'aide � trier automatiquement mon courrier (et vous recevrez une r�ponse plus rapide ;)).

Ce HOWTO reprend et enrichit first draft �crit par Chris Pirih.

Toutes les informations contenues dans ce HOWTO sont fournies "tel que". Toute garantie explicite, implicite ou l�gale, concernant l'exactitude de l'information, de la convenance � quelque usage particulier est par la pr�sente sp�cifiquement d�clin�e. Alors que tous les efforts ont �t� faits pour assurer l'exactitude des informations contenues dans ce HOWTO, les auteurs n'assument aucune responsabilit� pour les erreurs, omissions ou dommages r�sultant de l'utilisation des informations contenues dans ce document.

2. Questions ind�pendantes de l'architecture.

2.1 C�t� noyau

  1. Linux supporte-t-il les threads multiples ? Si je lance deux ou plusieurs processus, seront-ils r�partis entre les diff�rents processeurs disponibles ?

    Oui. Les processus et les threads du noyau sont r�partis entre les processeurs. Ceux de l'espace utilisateur ne le sont pas.

  2. Quelles sont les architectures SMP support�es ?

    D'apr�s Alan Cox :

    Les versions 2.0 du noyau supportent les syst�mes SMP de type hypersparc (SS20, etc...) et Intel 486, Pentium ou machines sup�rieurs compatible avec la norme Intel MP1.1/1.4. Richard Jelinek ajoute : jusqu'� pr�sent, seul des syst�mes ne comprenant pas plus de 4 processeurs ont �t� test�s. La sp�cification MP (et donc Linux) autorise th�oriquement jusqu'� 16 processeurs.

    Le support SMP pour les architectures UltraSparc, SparcServer, Alpha et PowerPC est disponible dans le 2.2.x.

    De Ralf B�chle :

    MIPS, m68k et ARM ne g�rent pas le SMP; les deux derniers ne le supporteront probablement jamais.

    Ceci �tant, je ferai un hack pour MIPS-SMP d�s que j'aurais une machine SMP...

  3. Comment construire un noyau Linux g�rant le SMP ?

    La plupart des distributions ne fournissent pas un noyau adapt� au SMP. Vous devrez donc en faire un vous m�me. Si vous n'avez encore jamais compil� de noyau, voila une excellente occasion d'apprendre. Expliquer comment compiler un nouveau noyau d�passe le cadre de ce document; pr�f�rez-vous au Linux Kernel Howto pour de plus amples informations (C. Polisher). Dans la s�rie 2.0 jusqu'� la version 2.1.132 exclue du noyau, d�commentez la ligne SMP=1 dans le Makefile principal (/usr/src/linux/Makefile).

    Dans la version 2.2, configurez le noyau et r�pondez "oui" � la question "Symetric multi-processing support" (Michael Elizabeth Chastain).

    Autorisez l'horloge temps r�el en cochant l'option "RTC support" (Robert G. Brown). Notez qu'inclure le support RTC, en r�alit�, pour autant que je sache, n'emp�che pas le probl�me connu de la d�rive de l'horloge avec le SMP : activer cette fonctionnalit� avertit en cas de lecture de l'horloge au d�marrage. Une note de Richard Jelinek signale aussi qu'activer "Enhandced RTC" est n�cessaire pour activer le deuxi�me processeur (identification) sur certaines cartes m�re Intel exotiques.

    Enfin, sur plate-forme Intel, N'ACTIVEZ PAS l'option APM (Advanced Power Management)! APM et SMP sont incompatibles et votre syst�me plantera certainement (ou du moins probablement ;)) au d�marrage si APM est activ� (Jakob Oestergaard). Alan Cox le confirme : d�sactivez APM pour les machines SMP en 2.1.x. En gros le comportement APM est ind�fini en pr�sence de syst�mes SMP et tout peut arriver. Toujours sur plate-forme Intel, activez "MTRR (Memory Type Range Register) support". Certains BIOS sont d�fectueux et n'activent pas la m�moire cache du second processeur. Le support MTRR contient le code pour y rem�dier.

    Vous devez reconstruire votre noyau et vos modules quand vous passez en SMP et quand vous changez de mode SMP. N'oubliez pas d'effectuer un make modules et un make modules_install (Alan Cox).

    Si vous obtenez des erreurs au chargement des modules, vous n'avez probablement pas r�install� vos modules. N�anmoins, avec quelques noyaux 2.2.x, certains ont rapport� des probl�mes lors de la recompilation d'un noyau SMP en noyau UP (Uni-Processeur). Afin de r�soudre cela, sauvegardez votre fichier .config, et faites un make mrproper, restaurez votre fichier .config et recompilez votre noyau (make dep, etc...) (Wade Hampton). N'oubliez pas de relancer lilo apr�s avoir recopi� votre nouveau noyau.

    R�capitulation :


    make config # ou menuconfig ou xconfig
    make dep
    make clean
    make bzImage # ou ce que vous voulez
    # copiez l'image du noyau manuellement puis RELANCER LILO 
    # ou make lilo
    make modules
    make modules_install
    

  4. Comment compile-t-on un noyau Linux non-SMP ?

    Dans la s�rie 2.0, commentez la ligne SMP=1 dans le Makefile principal (/usr/src/linux/Makefile).

    Pour la s�rie 2.2, configurez le noyau et r�pondez "no" � la question "Symmetric multi-processing support" (Michael Elizabeth Chastain).

    Vous devez absolument recompiler votre noyau et ses modules pour activer ou d�sactiver le mode SMP. N'oubliez pas de faire make modules, make modules_install et de relancer lilo. Voyez les notes plus haut sur les probl�mes de configuration possibles.

  5. Savoir si �a marche

     cat /proc/cpuinfo 
    

    Sortie typique (bi-PentiumII):


    processor       : 0
    cpu             : 686
    model           : 3
    vendor_id       : GenuineIntel
    [...]
    bogomips        : 267.06
     
    processor       : 1
    cpu             : 686
    model           : 3
    vendor_id       : GenuineIntel
    [...]
    bogomips        : 267.06
    

  6. Statut de la migration du noyau vers un verrouillage fin et le multithreading ?

    La version 2.2 du noyau poss�de une gestion des signaux, des interruptions et de quelque E/S � verrouillage fin (fine grain locking). Le reste est en cour de migration. En mode SMP, plusieurs processus peuvent �tre ordonnanc�s simultan�ment.

    Les noyaux 2.3 (futur 2.4) poss�dent vraiment des verrous noyaux fins. Dans la s�rie des noyaux 2.3 l'usage des gros blocages noyau a tout simplement disparu. Tous les sous-syst�mes majeurs du noyau Linux sont compl�tement cod�s avec des threads : r�seau, VFS, VM, ES, block/pages de cache, ordonnancement, interruptions, signaux, etc... (Ingo Molnar)

  7. Linux SMP supporte-t-il les affinit�s processeur ?

    Noyaux standard

    Oui et non. Il n'est pas possible de forcer l'assignation d'un processus � un processeur sp�cifique mais l'ordonnanceur Linux poss�de un parti-pris pour chaque processus qui tend � conserver les processus attach�s � un processeur sp�cifique.

    Noyau patch�

    Oui. Voir PSET - Processor Sets for the Linux kernel:

    Ce projet a pour but d'offrir une version compatible au niveau sources et fonctionnalit�s de pset (tel que d�fini par SGI - partiellement retir� de leur noyau 6.4 IRIX) pour Linux. Cela autorise les utilisateurs � d�terminer sur quel processeur ou ensemble de processeurs un processus peut tourner. Les utilisations possibles incluent l'assignement de thread � des processeurs distincts, la synchronisation, la s�curit� (un processeur d�di� � `root') et s�rement davantage encore.

    Nous nous sommes attach�s � concentrer toutes les fonctionnalit�s autour de l'appel syst�me sysmp(). Cette routine accepte un certain nombre de param�tres qui d�terminent la fonctionnalit� requise. Ces fonctions comprennent:

    • affecter un processus/thread � un processeur sp�cifique;
    • interdire un processeur d'ex�cuter certains processus;
    • emp�cher strictement l'utilisation d'un processeur;
    • assigner � un processeur un _unique_ processus (et ses fils);
    • information sur l'�tat du processeur;
    • cr�er/supprimer un ensemble de processeurs, sur lesquels les processus peuvent �tre limit�s

  8. A qui rapporter les bogues SMP ?

    Signalez s'il vous pla�t les bogues � linux-smp@vger.rutgers.edu.

  9. A propos des performances SMP

    Si vous voulez mesurer les performances de votre syst�me SMP, vous pouvez essayer les tests de Cameron MacKinnon, disponibles � http://www.phy.duke.edu/brahma/benchmarks.smp.

2.2 C�t� utilisateur

  1. Ai-je vraiment besoin de SMP ?

    Si vous vous le demandez, vous n'en avez probablement pas besoin. :) En g�n�ral les syst�mes multiprocesseurs offrent de meilleurs performances que les syst�mes monoprocesseurs, mais pour obtenir un gain quelconque vous devez consid�rer bien d'autres facteurs que le seul nombre de processeurs. Par exemple, sur un syst�me donn�, si le processeur est en g�n�ral inactif, la plupart du temps � cause d'un disque dur lent, alors le syst�me est bloqu� au niveau des entr�es/sorties ("input/output bound"); il ne b�n�ficiera probablement pas de la puissance d'un processeur suppl�mentaire. Si, d'un autre cot�, un syst�me doit ex�cuter beaucoup de processus simultan�ment et que l'utilisation processeur est tr�s forte, alors vous �tes susceptible d'am�liorer les performances de votre syst�me. Les disques dur SCSI peuvent �tre tr�s efficaces en utilisation avec plusieurs processeurs. Ils peuvent g�rer plusieurs commandes simultan�ment sans immobiliser le processeur (C. Polisher).

  2. Obtient-on les m�mes performances avec un biprocesseur 300 MHz qu'avec un processeur 600 MHz ?

    Tout d�pend de l'application, mais g�n�ralement non. Le SMP implique quelques "frais de gestion" absents d'une machine monoprocesseur. (Wade Hampton). :)

  3. Comment afficher les performances de plusieurs processeurs ?

    Gr�ce � Samuel S. Chessman, se ici trouvent quelques utilitaires pratiques :

    Character based:

    http://www.cs.inf.ethz.ch/~rauch/procps.html

    En gros, il s'agit de procps v1.12.2 (top, ps, et. al.) et de quelques patches pour le support SMP.

    Pour les 2.2.x, Gregory R. Warnes a rendu disponible un patch � http://queenbee.fhcrc.org/~warnes/procps

    Graphique:

    xosview-1.5.1 supporte le SMP, les noyaux sup�rieurs au 2.1.85 (inclus) et l'entr�e cpuX dans le fichier /proc/stat.

    Page d'accueil officielle pour xosview : http://lore.ece.utexas.edu/~bgrayson/xosview.html

    Vous ici trouverez une version patch�e par Kumsup Lee pour les noyaux 2.2.p : http://www.ima.umn.edu/~klee/linux/xosview-1.6.1-5a1.tgz

    Les diff�rents patches noyau de Forissier sont disponibles � : http://www-isia.cma.fr/~forissie/smp_kernel_patch/

    N�anmoins, vous ne pouvez pas contr�ler l'ordonnancement de fa�on pr�cise avec xosview car ce dernier le perturbe (H. Peter Anvin).

  4. Comment autoriser plus d'un processus lors de la compilation du noyau ?

    Utiliser :


            # make [modules|zImage|bzImages] MAKE="make -jX"
            o� X = nombre maximum de processus.
            Notez que �a ne marche pas avec "make dep".
    

    Avec un noyau 2.2, r�f�rez vous au fichier /usr/src/linux/Documentation/smp.txt pour des instructions pr�cises.

    Par exemple, comme lancer de multiples compilateurs autorise une machine avec suffisamment de m�moire � utiliser le temps processeur autrement perdu durant les d�lais caus�s par les E/S, make MAKE="make -j 2" -j 2 aide r�ellement m�me sur les machines monoprocesseurs. (de Ralf B�chle).

  5. Pourquoi le temps donn� par la commande time est-il erron� ? (de Joel Marchand)

    Dans la s�rie des 2.0, le r�sultat de la commande time est faux. La somme utilisateur+syst�me est juste *mais* 'l'�tendue' entre le temps utilisateur et le temps syst�me est faux.

    Plus pr�cis�ment : "tout le temps pass� sur un processeur autre que celui de d�marrage est comptabilis� comme temps syst�me. Si vous chronom�trez un programme, ajoutez le temps utilisateur et le temps syst�me. Votre mesure sera alors correcte, � ceci pr�s qu'elle inclura aussi le temps syst�me qui restera � d�compter" (Jakob �stergaard).

    Ce bogue est corrig� dans les versions 2.2.

2.3 Programmation SMP

Section par Jakob �stergaard.

Cette section a pour but de signaler ce qui fonctionne et ce qui ne fonctionne pas quand il s'agit de programmer des logiciels avec des threads pour Linux SMP.

M�thodes de parall�lisation

  1. threads POSIX (POSIX Threads)
  2. PVM / MPI Message Passing Libraries
  3. fork() -- Processus multiples

Comme ni fork() ni les processus PVM/MPI ne partagent g�n�ralement la m�moire, mais communiquent au moyen d'IPC ou d'une API de messagerie, ils ne seront pas d�crits davantage dans cette section. Ils ne sont pas vraiment sp�cifiques � SMP, puisqu'ils sont tout autant employ�s - sinon plus - avec des ordinateurs monoprocesseurs et des clusters.

Seuls les threads POSIX fournissent des threads multiples partageant certaines ressources telles la m�moire. Cette propri�t� des machines SMP autorise plusieurs processeurs � partager leur m�moire. Pour employer deux (ou plus ;) ) processeurs avec un syst�me SMP, utilisez une librairie de thread du noyau. Une bonne librairie LinuxThreads, une librairie de thread �crite par Xavier Leroy est maintenant int�gr�e avec la glibc2 (aka libc6). Les distributions Linux r�centes int�grent toutes cette librairie par d�faut. Vous n'avez donc pas � obtenir un paquetage s�par� pour utiliser les threads du noyau.

Il existe des mises en oeuvre des threads (et thread POSIX) de niveau application qui ne tirent pas avantage des threads du noyau. Ces paquetages gardent le thread dans un seul processus et, partant, ne profitent pas du SMP. N�anmoins, elles sont bonnes pour beaucoup d'applications et ont tendance � �tre plus rapides que les threads du noyau sur des syst�mes monoprocesseurs.

Le multithreading n'a jamais �t� vraiment populaire dans le monde UN*X. Pour diverses raisons, les applications exigeant de multiples processus ou threads ont �t� pour la plupart �crites en utilisant fork(). Donc, avec une approche de type threads, on rencontre des probl�mes d'incompatibilit�s et de non-adaptation aux thread des librairies, compilateurs et d�bogueurs. GNU/Linux n'y fait pas exception. Esp�rons que les sections qui suivent apporteront quelques lumi�res sur ce qui est possible et sur ce qui ne l'est pas.

La librairie C

Les vieilles librairies ne sont pas s�res au niveau des threads. Il est tr�s important que vous utilisiez la GNU libc (glibc), aussi connue sous le nom de libc6. Vous pouvez �videmment utiliser des versions ant�rieurs, mais cela vous causera plus de probl�mes que mettre � jour votre syst�me. Enfin, probablement :)

Si vous voulez utiliser GDB pour d�boguer vos programmes, voyez plus bas.

Langages, compilateurs et d�bogueurs

Il existe de nombreux langages de programmation disponibles pour GNU/Linux et beaucoup d'entre eux utilisent les threads d'une mani�re ou d'une autre. Certains langages comme Ada et Java incluent m�me les threads dans les primitives du langage.

Cette section, pour l'instant, ne d�crira que le C et le C++. Si vous avez une exp�rience de programmation SMP avec d'autre langages, merci de nous en faire part.

Les compilateurs GNU C et C++, tout comme EGCS C et C++, fonctionnent avec le support thread de la librairie C standard (glibc). Il y a n�anmoins quelques probl�mes :

  1. Quand vous compilez en C ou C++, incluez -D_REENTRANT dans la ligne de commande du compilateur. Il est n�cessaire d'activer certaines fonctions de gestion des erreurs telles celles relatives � la variable errno.
  2. Quand vous utilisez C++, si deux threads rencontrent des exceptions simultan�ment, le programme retournera une erreur de segmentation. Le compilateur g�n�re un code d'exception inadapt� aux threads. Une mani�re de contourner le probl�me consiste � mettre un pthread_mutex_lock(&global_exception_lock) dans le(s) constructeur(s) de chaque classe que vous throw() et � ins�rer le pthread_mutex_unlock(...) correspondant dans le destructeur. Ce n'est pas tr�s beau mais �a marche. Cette solution a �t� fournie par Markus Ferch.

Le d�bogueur GNU GDB, � partir de la version 4.18, devrait prendre en charge les threads correctement. La plupart des distributions Linux comprennent une version patch�e de gdb qui g�re les threads.

Il n'est pas n�cessaire de patcher la glibc pour qu'elle fonctionne avec des threads. Si vous n'avez pas besoin de d�boguer le logiciel (cela peut-�tre vrai pour toutes les machines qui ne sont pas d�di�es au d�veloppement), il n'y a pas besoin de patcher la glibc.

Notez que les core-dumps ne sont d'aucune utilit� quand vous utilisez des threads. D'une mani�re ou d'une autre, le core dump est attach� au thread courant et non au programme tout entier. Aussi, pour d�boguer quoi que ce soit, faites le depuis le d�bogueur.

Astuce : si vous avez un thread qui perd la t�te, se met � utiliser 100% du temps CPU et que vous ne voyez pas pourquoi, voici une m�thode �l�gante de trouver ce qui se passe : lancez le programme depuis la ligne de commande, sans GDB. Faites d�railler votre thread. Utilisez top pour obtenir le PID du processus. Lancez GDB tel que gdb program pid. GDB s'attachera lui-m�me au processus dont vous avez sp�cifi� le PID et arr�tera le thread. Vous disposez maintenant d'une session GDB avec le thread incrimin� et vous pouvez utiliser bt ou d'autres commandes pour suivre ce qui se passe.

Autres librairies

ElectricFence : cette librairie n'est pas s�re du point de vue SMP. Il devrait n�anmoins �tre possible de la faire fonctionner dans un environnement thread� en ins�rant des verrous dans son code source.

Autres points concernant la programmation SMP

  1. O� puis-je trouver plus d'informations sur la programmation parall�le ?

    Voyez Linux Parallel Processing HOWTO

    Beaucoup d'informations utiles se trouvent sur Parallel Processing using Linux

    Voyez aussi Linux Threads FAQ

  2. Existe-t-il des programmes ou des librairies utilisant les threads ?

    Oui. Pour les programmes vous devriez regarder � Multithreaded programs on linux (j'adore les liens hypertextes, le saviez vous ? ;))

    En ce qui concerne les librairies :

    OpenGL Mesa library

    Gr�ce � David Buccarelli, andreas Schiffler et Emil Briggs, il existe une version multithread (� l'heure actuelle [1998-05-11], une version fonctionne et permet d'obtenir un accroissement de 5-30% avec certaines suites de test OpenGL). La partie multithread est maintenant incluse dans la distribution Mesa officielle comme une option exp�rimentale. Pour plus d'information, voyez Mesa library

    BLAS

    BLAS et FFTs optimis�s Pentium pro pour Intel Linux

    Les routines multithread BLAS ne sont pas disponibles pour l'instant, mais une librairie multithread est pr�vue pour 1998-05-27, voir Blas News pour plus de d�tails.

    The GIMP

    Emil Briggs, la m�me personne qui est impliqu�e dans la version multithread de MESA, est aussi en train de travailler sur la version multithread des plugins de The Gimp. Voyez http://nemo.physics.ncsu.edu/~briggs/gimp/index.html pour plus d'info.

3. Questions sp�cifiques � l'architecture x86

3.1 Pourquoi cela ne marche-t-il pas avec ma machine ?

  1. Puis-je utiliser le mode SMP avec un CPU Cyrix/AMD/non-Intel ?

    R�ponse courte: non.

    R�ponse longue Intel r�vendique la propri�t� sur les plan APIC SMP, et tant qu'une compagnie ne prend pas de licence d'Intel pour cela, ils ne peuvent pas l'utiliser. Aucune compagnie ne l'a fait pour l'instant. Cela peut �videment changer dans le futur. A titre anecdotique, Cyrix et AMD adh�rent au standard non-propri�taire OpenPIC SMP mais actuellement il n'existe pas de carte m�re l'utilisant.

  2. Pourquoi mon vieux Compaq ne fonctionne-t-il pas ?

    Mettez le en mode compatibilit� MP1.1/1.4.

    V�rifiez "Configure Hardware" -> "View / Edit details" -> "Advanced mode" (F7 je pense) pour les options de configuration "APIC mode" et cochez "full Table mode". Il s'agit d'une recommandation officielle de Compaq (Daniel Roesen).

    Adrian Portelli :

    1. Pressez F10 quand le serveur d�marre afin d'entrer dans l'utilitaire de configuration syst�me (System Configuration Utility)
    2. Pressez Entr�e pour effacer l'�cran de d�marrage
    3. Pressez imm�diatement CTRL+A
    4. Un message appara�tra vous informant que vous �tes maintenant en "Advanced Mode"
    5. S�lectionnez ensuite "Configure Hardware" -> "View / Edit details"
    6. Vous verrez alors les r�glages avanc�s (m�lang�s avec les r�glages ordinaires)
    7. Descendez jusqu'au "APIC Mode" et s�lectionnez alors "Fully Mapped"
    8. Sauvegardez les changements et red�marrez

  3. Pourquoi mon ALR ne fonctionne-t-il pas ?

    De Robert Hyatt: ALR Revolution quad-6 semble � peu pr�s s�re, alors que quelques machines Revolution quad plus vieilles sans processeurs P6 ne semble pas "fiables"...

  4. Pourquoi ma machine SMP est-elle si lente ? ou Pourquoi un processeur montre-t-il une valeur bogomips basse et pas l'autre ?

    De Alan Cox: si un de vos processeurs rapporte une valeur bogomips tr�s basse, son cache n'est pas activ�. Votre vendeur vous � probablement fournis un BIOS bogu�. Obtenez un patch pour contourner cela ou mieux retournez la � votre vendeur et achetez une carte m�re chez un fournisseur comp�tent.

    Un noyau 2.0 (> 2.0.36) contient un patch MTRR qui devrait r�soudre ce probl�me (s�lectionnez l'option "handle buggy SMP BIOSes with bad MTRR setup" dans le menu "General setup").

    Je pense que les BIOS SMP bogu�s sont pris en charge automatiquement dans les derniers noyaux 2.2.

  5. J'ai entendu dire que des machines IBM avaient des probl�mes

    Certaines machines IBM poss�dent le bloc BIOS MP1.4 dans l'EBDA. C'est autoris� mais pas support� en dessous des noyaux 2.2.

    Il y a une vieille machine IBM SMP bas�e sur des 486SLC. Linux/SMP requiert un support FPU mat�riel.

  6. Les sp�cification MP 1.4 pr�sentent-elles un quelconque avantage vis-�-vis des sp�cifications 1.1 ?

    Non (selon Alan :) ), 1.4 est juste une sp�cification plus stricte de 1.1.

  7. Pourquoi l'horloge d�rive-t-elle si rapidement quand la machine fonctionne en mode SMP ?

    Il s'agit d'un probl�me connu avec la gestion des IRQ et les blocages noyau longs dans la s�rie 2.0 des noyaux. Pensez � mettre � jour votre syst�me vers un 2.2 plus r�cent.

    De Jakob Oestergaard: ou pensez � utiliser xntpd. Cela devrait garder votre horloge � l'heure. Je pense avoir entendu qu'activer RTC dans le noyau corrigeait aussi le probl�me de d�rive de l'horloge. �a a march� pour moi, mais j'ignore si cela est g�n�ral ou si j'ai juste �t� chanceux !

    Certaines corrections du noyau dans les derniers 2.2.x devraient r�soudre ce probl�me.

  8. Pourquoi mes processeurs sont-ils num�rot�s 0 et 2 au lieu de 0 et 1 (ou autre num�rotation bizarre) ?

    Le num�ro du processeur est fix� par le fabricant de la carte m�re et ne veut absolument rien dire. Ignorez le.

  9. Mon syst�me quadruple Xeon plante d�s qu'il a d�compress� le noyau

    (Doug Ledford) Essayez de recompiler LILO avec le support LARGE_EBDA et faites attention � bien toujours utiliser bzImage quand vous compilez le noyau. Cela semble avoir r�solu le probl�me de plantage au d�marrage ici sur une carte m�re Intel multi-Xeon. Notez cependant que cela semble aussi affecter LILO en ceci que l'option root= ne fonctionne plus. Faites donc bien attention d'avoir appliqu� 'rdev' � votre noyau au moment o� vous lancerez LILO afin d'�tre sur que votre noyau charge correctement le syst�me de fichier racine au d�marrage.

    (Robert M. Hyatt) Avec 3 processeurs, avez-vous un terminateur dans le 4�me emplacement ?

  10. Durant le d�marrage la machine plante en signalant un probl�me IOAPIC

    Essayez l'option de d�marrage "noapic" (John Aldrich) et/ou "reboot=bios" (Terry Shull).

  11. Mon syst�me se bloque lors de trafic NFS intense

    Essayez le dernier noyau 2.2.x et le patch knfsd. Cela est en cours d'investigation. (Wade Hampton)

  12. Mon syst�me bloque sans message oops

    Si vous utilisez les noyaux 2.2.11 ou 2.2.12, r�cup�rez le dernier noyau. Par exemple 2.2.13 poss�de de nombreuses corrections SMP. Plusieurs personnes ont rapport� ces noyaux comme instables pour le SMP. Ces m�mes noyaux peuvent avoir des probl�mes NFS qui provoqueraient des blocages. Aussi, utilisez une console s�rie pour capturer vos messages oops. (Wade Hampton)

    Si le probl�me persiste (et que les suggestions sur cette liste n'ont pas aid� davantage), vous devriez alors essayer les derniers noyaux 2.3. Ils ont un code SMP/APIC plus bavard (et plus robuste) et un code de pr�vention contre les blocages durs qui produit des oops plus significatifs au lieu de planter en silence (Ingo Molnar).

    (Osamu Aoki) Vous DEVEZ aussi d�sactiver toutes les fonctionnalit�s du BIOS li�es � l'�conomie d'�nergie. Exemple d'une bonne configuration (Dual Celeron 466 Abit BP6) :


     POWER MANAGEMENT SETUP.
       ACPI:              Disabled
       POWER MANAGEMENT:  Disabled
       PM CONTROL by APM: No
    

    Si les fonctions d'�conomie d'�nergie sont activ�es, des plantages al�atoires peuvent se produire

  13. D�boguer des blocages

    (item par Wade Hampton)

    Un bon moyen de d�boguer les blocages consiste � se procurer le patch ikd de Andrea Arcangeli: ftp://ftp.suse.com/pub/people/andrea/kernel-patches

    Il y a plusieurs options de d�bogage. N'utilisez PAS l'option de blocage logicielle ! Pour des machines SMP r�centes, activez l'option kernel debugging et ensuite l'option NMI oopser. Afin de v�rifier que le NMI oopser fonctionne, apr�s avoir d�marr� avec votre nouveau noyau, ex�cutez un /cat /proc/interrupts et v�rifiez que vous obtenez des NMI. Quand la machine se bloque, vous devriez obtenir un oops.

    Vous pouvez aussi essayer l'option %eip. Elle autorise le noyau � �crire sur la console l'adresse %eip � chaque fois qu'une fonction du noyau est appel�e. Quand la machine se bloque, �crivez sur un papier la premi�re colonne ordonn�e selon la seconde colonne et cherchez ensuite les adresses dans le fichier System.map. Ca ne marche qu'en mode console.

    Notez que l'utilisation d'une console s�rie facilite grandement le d�bogage des blocages noyau, qu'ils soient SMP ou non !

  14. Messages "APIC error interrupt on CPU#n, should never happen" dans les logs

    Un message comme:


    APIC error interrupt on CPU#0, should never happen.
    ... APIC ESR0: 00000002
    ... APIC ESR1: 00000000
    

    indique la r�ception d'une erreur de calcul de code d'int�grit�. Linux ne peut en �tre responsable car la partie calcul des messages APIC est compl�tement mat�rielle. Il peut s'agir d'un probl�me mat�riel marginal. Tant que vous ne percevez pas d'instabilit�, ils ne sont pas probl�matiques. Les messages APIC sont renvoy�s jusqu'� ce qu'il soient d�livr�s (Ingo Molnar).

3.2 Causes possibles de plantages

Dans cette section vous trouverez quelques information sur les causes possibles de plantage sur une machine SMP (merci � Jakob �stergaard pour cette partie). Autant que je sache (David), les probl�mes �voqu�s ici sont sp�cifiques aux plate-formes Intel.

3.3 Informations sp�cifiques aux cartes m�res

Notez que des informations plus pr�cises peuvent �tre trouv�es avec la liste des Cartes m�re suppos�es fonctionner sous Linux SMP

Cartes m�res avec des probl�mes connus

3.4 Machine SMP Linux � bas prix (machine double Celeron)

(St�phane �colivet)

Les machines SMP Linux les moins ch�res avec des processeurs disponibles de nos jours sont les syst�mes double Celeron. Un tel syst�me n'est pas officiellement possible selon Intel. On a int�r�t � v�rifier qu'il s'agit bien de Celerons de seconde g�n�ration, ceux avec 128 Kb de cache L2.

Est-il possible de faire fonctionner une machine double Celeron ?

R�ponse officielle d'Intel : non, le Celeron ne peut pas fonctionner en mode SMP.

R�ponse pratique : c'est possible, mais cela demande une modification mat�rielle pour les processeurs Slot 1. La manipulation est d�crite par Tomohiro Kawada sur sa page Dual Celeron System. Naturellement, de telles modifications annulent la garantie... Certaines versions du processeur Celeron sont aussi disponibles au format Socket 370. Dans ce cas, l'alt�ration peut-�tre faite sur l'adaptateur Socket 370 � Slot 1 qui peut m�me �tre vendu pr�-cabl� pour une utilisation SMP (Andy Poling, Hans - Erik Skyttberg, James Beard).

Il existe aussi une carte m�re (ABIT BP6) autorisant l'insertion de deux Celerons dans le format Socket 370 (Martijn Kruithof, Ryan McCue), l'ABIT Computer BP6 v�rifi�e, test�e et support�e sous linux avec deux ppga socket 370 (Andre Hedrick).

Comment Linux se comporte-t-il sur les syst�mes double Celeron ?

Bien, merci.

Les processeurs Celeron sont r�put�s pour �tre facilement surcaden�able.Qu'en est-il des syst�mes doubles Celeron ?

Cela peut marcher. N�anmoins, surcadencer un tel syst�me n'est pas aussi facile que pour un monoprocesseur. Ce n'est franchement pas une bonne id�e pour un syst�me de production. Pour une utilisation personnelle, des syst�mes double Celeron 300 A fonctionnant parfaitement � 450 MHz ont �t� signal�s (de nombreuses personnes).

Et un syst�me quadruple Celeron ?

C'est impossible. Les processeurs Celerons poss�dent � peu pr�s les m�mes fonctionnalit�s qu'un Pentium II basique. Si vous voulez plus de deux processeur dans votre syst�me, vous devriez regarder du c�t� des machines � base de Pentium Pro, Pentium II Xeon ou Pentium III (?).

Pourquoi ne pas m�langer Celeron et Pentium II ?

Un syst�me utilisant un Celeron "r�-autoris�" et un Pentium II � la m�me cadence peut th�oriquement fonctionner.

Alexandre Charbey � fabriqu� un tel syst�me:

4. Questions sp�cifiques � l'architecture Sparc

4.1 Quellles sont les machines Sparc support�es ?

Citation de la page web UltraLinux (syst�mes SMP seulement):

UltraLinux a fonctionn� sur une machine de 14 processeurs (voir la sortie dmesg).

4.2 Probl�mes sp�cifiques au support SMP Sparc

(David Miller) Il ne devrait pas y avoir d'inqui�tudes.

Le seul probl�me connu et que nous n'avons pas l'intention de corriger, consiste en ce qu'un noyau SMP compil� pour des syst�mes 32bits (ie. non-ultrasparc) ne fonctionnera pas sur les syst�mes sun4c.

4.3 Limites SMP sp�cifiques au noyau courant (2.2)

David Miller: il y a un bug dans le fichier d'en-t�te include/linux/tasks.h, cela n�cessite de d�finir NR_CPUS � 64 sur UltraSparc puisqu'il s'agit de la limite sup�rieure pour le mat�riel que nous supportons :-)

5. Questions sp�cifiques � l'architecture PowerPC

5.1 Quellles sont les machines PPC support�es ?

(Cort Dougan) Non support�: Syst�mes PPC RS/6000

5.2 Probl�mes sp�cifiques concernant le support SMP PPC

Rien. Compilation SMP normale (voir plus haut). Comme d'habitude, soyez attentif. Les modules sont sp�cifiques pour UP ou pour SMP. Recompilez les (Paul Mackerras).

6. Questions sp�cifiques � l'architecture Alpha

6.1 Quelles sont les machines Alpha support�es ?

Geerten Kuiper : le SMP marche pour la plupart des serveurs AXP, sinon pour tous.

Jay A Estabrook : le SMP semble fonctionner sur la plupart de nos machines [Compaq] avec deux processeurs ou plus. La liste de celles-ci comprend :

En sont exclus :

6.2 Probl�mes sp�cifiques au support SMP Alpha

Aucun (vraiment ? :-) ).

7. Pointeurs utiles

7.1 Divers

7.2 Programmes et librairies multithread

7.3 Patches sp�cifiques SMP

7.4 Compilateurs parall�liseurs/optimiseurs pour les machines 586/686 (Sumit Roy)

8. Glossary

9. Quoi de neuf ?

v1.9, 13 janvier 2000

v1.8, 8 novembre 1999

v1.7, 6 novembre 1999

v1.6, 21 octobre 1999

v1.5, 4 octobre 1999

v1.4, 30 septembre 1999

v1.3, 29 septembre 1999

v1.2, 27 septembre 1999

v1.1, 26 septembre 1999

v1.00, 25 septembre 1999

v0.54, 13 mars 1999

v0.53, 08 mars 1999

v0.52, 07 mars 1999

v0.51, 06 mars 1999

v0.50, 03 f�vrier 1999

v0.49, 13 janvier 1999

v0.48, 10 d�cembre 1998

v0.47, 20 novembre 1998

v0.46, 10 novembre 1998

v0.45, 25 octobre 1998

v0.44, 14 octobre 1998

v0.43, 9 septembre 1998

v0.42, 2 septembre 1998

v0.41, 1 septembre 1998

v0.40, 27 ao�t 1998

v0.39, 27 ao�t 1998

v0.38, 8 ao�t 1998

v0.37, 30 Juillet 1998

v0.36, 26 Juillet 1998

v0.35, 14 Juillet 1998

v0.34, 10 juin 1998

v0.33, 3 juin 1998

v0.32, 27 mai 1998

v0.31, 18 mai 1998

v0.30, 12 mai 1998

v0.29, 11 mai 1998

v0.28, 09 mai 1998

v0.27, 05 mai 1998

10. Liste des contributeurs

Un grand merci � ceux qui m'ont aid� � maintenir ce HOWTO:

  1. Tigran A. Aivazian
  2. John Aldrich
  3. Niels Ammerlaan
  4. H. Peter Anvin
  5. Osamu Aoki
  6. Guylhem Aznar
  7. Ralf B�chle
  8. James Beard
  9. Troy Benjegerdes
  10. Anton Blanchard
  11. Emil Briggs
  12. Robert G. Brown
  13. Alexandre Charbey
  14. Michael Elizabeth Chastain
  15. Samuel S. Chessman
  16. Alan Cox
  17. Andrew Crane
  18. Cort Dougan
  19. Mark Duguid
  20. St�phane �colivet
  21. Jocelyne Erhel
  22. Jay A Estabrook
  23. Byron Faber
  24. Mark Garlanger
  25. hASCII
  26. Wade Hampton
  27. Andre Hedrick
  28. Claus-Justus Heine
  29. Benedikt Heinen
  30. Florian Hinzmann
  31. Moni Hollmann
  32. Robert M. Hyatt
  33. Jeffrey H. Ingber
  34. Richard Jelinek
  35. Tony Kocurko
  36. Geerten Kuiper
  37. Martijn Kruithof
  38. Doug Ledford
  39. Kumsup Lee
  40. Hank Leininger
  41. Ryan McCue
  42. Paul Mackerras
  43. Cameron MacKinnon
  44. Joel Marchand
  45. David Maslen
  46. Chris Mauritz
  47. Jean-Francois Micouleau
  48. David Miller
  49. Ingo Molnar
  50. Ulf Nielsen
  51. Jakob Oestergaard
  52. C Polisher
  53. Adrian Portelli
  54. Matt Ranney
  55. Daniel Roesen
  56. Ulf Rompe
  57. Jean-Michel Rouet
  58. Volker Reichelt
  59. Sean Reifschneider
  60. Sumit Roy
  61. Thomas Schenk
  62. Terry Shull
  63. Chris K. Skinner
  64. Hans - Erik Skyttberg
  65. Szakacsits Szabolcs
  66. Jukka Tainio
  67. Simen Timian Thoresen
  68. El Warren
  69. Gregory R. Warnes
  70. Gero Wedemann
  71. Christopher Allen Wing
  72. Leonard N. Zubkoff