  Linux SMP HOWTO
  David Mentr, David.Mentre@irisa.fr
  v1.9, 13 janvier 2000

  Ce HOWTO passe en revue les principaux problmes et leurs solutions
  lis la configuration et  l'emploi d'un systme SMP sous Linux.
  ______________________________________________________________________

  Table des matires

























































  1. Introduction

  2. Questions indpendantes de l'architecture.

     2.1 Ct noyau
     2.2 Ct utilisateur
     2.3 Programmation SMP
        2.3.1 Mthodes de paralllisation
        2.3.2 La librairie C
        2.3.3 Langages, compilateurs et dbogueurs
        2.3.4 Autres librairies
        2.3.5 Autres points concernant la programmation SMP

  3. Questions spcifiques  l'architecture x86

     3.1 Pourquoi cela ne marche-t-il pas avec ma machine ?
     3.2 Causes possibles de plantages
     3.3 Informations spcifiques aux cartes mres
        3.3.1 Cartes mres avec des problmes connus
     3.4 Machine SMP Linux  bas prix (machine double Celeron)
        3.4.1 Est-il possible de faire fonctionner une machine double Celeron ?
        3.4.2 Comment Linux se comporte-t-il sur les systmes double Celeron ?
        3.4.3 Les processeurs Celeron sont rputs pour tre facilement surcadenable. Qu'en est-il des systmes doubles Celeron ?
        3.4.4 Et un systme quadruple Celeron ?
        3.4.5 Pourquoi ne pas mlanger Celeron et Pentium II ?

  4. Questions spcifiques  l'architecture Sparc

     4.1 Quellles sont les machines Sparc supportes ?
     4.2 Problmes spcifiques au support SMP Sparc
     4.3 Limites SMP spcifiques au noyau courant (2.2)

  5. Questions spcifiques  l'architecture PowerPC

     5.1 Quellles sont les machines PPC supportes ?
     5.2 Problmes spcifiques concernant le support SMP PPC

  6. Questions spcifiques  l'architecture Alpha

     6.1 Quelles sont les machines Alpha supportes ?
     6.2 Problmes spcifiques au support SMP Alpha

  7. Pointeurs utiles

     7.1 Divers
     7.2 Programmes et librairies multithread
     7.3 Patches spcifiques SMP
     7.4 Compilateurs parallliseurs/optimiseurs pour les machines 586/686 (

  8. Glossary

  9. Quoi de neuf ?

  10. Liste des contributeurs



  ______________________________________________________________________

  11..  IInnttrroodduuccttiioonn

  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 amlior depuis. La gestion est beaucoup plus fine dans la
  srie 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 dernire
  version de ce HOWTO peut tre obtenue 

    http://www.irisa.fr/prive/mentre/smp-howto/ (France)

    http://www.phy.duke.edu/brahma/smp-faq/ (USA)


  Si vous voulez contribuer  ce HOWTO, je prfre les diffs SGML
  version <http://www.irisa.fr/prive/mentre/smp-howto/smp-howto.sgml> de
  ce document, mais toute remarque (en texte pur) sera grandement
  apprci.  Si vous m'envoyez un e-mail  propos de ce document,
  insrez s'il vous plat 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 rponse plus rapide ;)).


  Ce HOWTO reprend et enrichit first draft <http://www.ihoc.net/linux-
  smp-faq-draft.html> crit par CChhrriiss PPiirriihh.


  Toutes les informations contenues dans ce HOWTO sont fournies "tel
  que".  Toute garantie explicite, implicite ou lgale, concernant
  l'exactitude de l'information, de la convenance  quelque usage
  particulier est par la prsente spcifiquement dcline. 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 rsultant de
  l'utilisation des informations contenues dans ce document.


  22..  QQuueessttiioonnss iinnddppeennddaanntteess ddee ll''aarrcchhiitteeccttuurree..



  22..11..  CCtt nnooyyaauu



  1. LLiinnuuxx ssuuppppoorrttee--tt--iill lleess tthhrreeaaddss mmuullttiipplleess ??  SSii jjee llaannccee ddeeuuxx oouu
     pplluussiieeuurrss pprroocceessssuuss,, sseerroonntt--iillss rrppaarrttiiss eennttrree lleess ddiiffffrreennttss
     pprroocceesssseeuurrss ddiissppoonniibblleess ??

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


  2. QQuueelllleess ssoonntt lleess aarrcchhiitteeccttuurreess SSMMPP ssuuppppoorrtteess ??


     DD''aapprrss AAllaann CCooxx :
        Les versions 2.0 du noyau supportent les systmes SMP de type
        hypersparc (SS20, etc...) et Intel 486, Pentium ou machines
        suprieurs compatible avec la norme Intel MP1.1/1.4.  RRiicchhaarrdd
        JJeelliinneekk ajoute : jusqu' prsent, seul des systmes ne
        comprenant pas plus de 4 processeurs ont t tests. La
        spcification MP (et donc Linux) autorise thoriquement jusqu'
        16 processeurs.

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


     DDee RRaallff BBcchhllee :
        MIPS, m68k et ARM ne grent pas le SMP; les deux derniers ne le
        supporteront probablement jamais.
        Ceci tant, je ferai un hack pour MIPS-SMP ds que j'aurais une
        machine SMP...


  3. CCoommmmeenntt ccoonnssttrruuiirree uunn nnooyyaauu LLiinnuuxx ggrraanntt llee SSMMPP ??

     La plupart des distributions ne fournissent pas un noyau adapt au
     SMP.  Vous devrez donc en faire un vous mme. Si vous n'avez encore
     jamais compil de noyau, voila une excellente occasion d'apprendre.
     Expliquer comment compiler un nouveau noyau dpasse le cadre de ce
     document; prfrez-vous au Linux Kernel Howto pour de plus amples
     informations (CC.. PPoolliisshheerr).  Dans la srie 2.0 jusqu' la version
     2.1.132 exclue du noyau, dcommentez la ligne SMP=1 dans le
     Makefile principal (/usr/src/linux/Makefile).


     Dans la version 2.2, configurez le noyau et rpondez "oui"  la
     question "Symetric multi-processing support" (MMiicchhaaeell EElliizzaabbeetthh
     CChhaassttaaiinn).


     Autorisez l'horloge temps rel en cochant l'option "RTC support"
     (RRoobbeerrtt GG..  BBrroowwnn). Notez qu'inclure le support RTC, en ralit,
     pour autant que je sache, n'empche pas le problme connu de la
     drive de l'horloge avec le SMP : activer cette fonctionnalit
     avertit en cas de lecture de l'horloge au dmarrage.  Une note de
     RRiicchhaarrdd JJeelliinneekk signale aussi qu'activer "Enhandced RTC" est
     ncessaire pour activer le deuxime processeur (identification) sur
     certaines cartes mre Intel exotiques.


     Enfin, sur plate-forme Intel, N'ACTIVEZ PAS l'option APM (Advanced
     Power Management)! APM et SMP sont incompatibles et votre systme
     plantera certainement (ou du moins probablement ;)) au dmarrage si
     APM est activ (JJaakkoobb OOeesstteerrggaaaarrdd).  AAllaann CCooxx le confirme :
     dsactivez APM pour les machines SMP en 2.1.x. En gros le
     comportement APM est indfini en prsence de systmes SMP et tout
     peut arriver.  Toujours sur plate-forme Intel, activez "MTRR
     (Memory Type Range Register) support". Certains BIOS sont
     dfectueux et n'activent pas la mmoire cache du second processeur.
     Le support MTRR contient le code pour y remdier.


     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 (AAllaann CCooxx).


     Si vous obtenez des erreurs au chargement des modules, vous n'avez
     probablement pas rinstall vos modules. Nanmoins, avec quelques
     noyaux 2.2.x, certains ont rapport des problmes lors de la
     recompilation d'un noyau SMP en noyau UP (Uni-Processeur). Afin de
     rsoudre cela, sauvegardez votre fichier .config, et faites un _m_a_k_e
     _m_r_p_r_o_p_e_r, restaurez votre fichier _._c_o_n_f_i_g et recompilez votre noyau
     (_m_a_k_e _d_e_p, etc...)  (WWaaddee HHaammppttoonn).  N'oubliez pas de relancer lilo
     aprs avoir recopi votre nouveau noyau.


     Rcapitulation :







     ___________________________________________________________________
     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. CCoommmmeenntt ccoommppiillee--tt--oonn uunn nnooyyaauu LLiinnuuxx nnoonn-SMP ?

     Dans la srie 2.0, ccoommmmeenntteezz la ligne SMP=1 dans le Makefile
     principal (/usr/src/linux/Makefile).

     Pour la srie 2.2, configurez le noyau et rpondez "no"  la
     question "Symmetric multi-processing support" (MMiicchhaaeell EElliizzaabbeetthh
     CChhaassttaaiinn).


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


  5. SSaavvooiirr ssii aa mmaarrcchhee


      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. SSttaattuutt ddee llaa mmiiggrraattiioonn dduu nnooyyaauu vveerrss uunn vveerrrroouuiillllaaggee ffiinn eett llee
     mmuullttiitthhrreeaaddiinngg ??

     La version 2.2 du noyau possde 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 ordonnancs simultanment.


     Les noyaux 2.3 (futur 2.4) possdent vraiment des verrous noyaux
     fins. Dans la srie des noyaux 2.3 l'usage des gros blocages noyau
     a tout simplement disparu.  Tous les sous-systmes majeurs du noyau
     Linux sont compltement cods avec des threads : rseau, VFS, VM,
     ES, block/pages de cache, ordonnancement, interruptions, signaux,
     etc... (IInnggoo MMoollnnaarr)


  7. LLiinnuuxx SSMMPP ssuuppppoorrttee--tt--iill lleess aaffffiinniittss pprroocceesssseeuurr ??



     NNooyyaauuxx ssttaannddaarrdd
        Oui et non. Il n'est pas possible de forcer l'assignation d'un
        processus  un processeur spcifique mais l'ordonnanceur Linux
        possde un parti-pris pour chaque processus qui tend  conserver
        les processus attachs  un processeur spcifique.


     NNooyyaauu ppaattcchh
        Oui. Voir PSET - Processor Sets for the Linux kernel
        <http://isunix.it.ilstu.edu/~thockin/pset/>:

          Ce projet a pour but d'offrir une version compatible au
          niveau sources et fonctionnalits de pset (tel que dfini
          par SGI - partiellement retir de leur noyau 6.4 IRIX)
          pour Linux. Cela autorise les utilisateurs  dterminer
          sur quel processeur ou ensemble de processeurs un proces
          sus peut tourner. Les utilisations possibles incluent
          l'assignement de thread  des processeurs distincts, la
          synchronisation, la scurit (un processeur ddi 
          `root') et srement davantage encore.


     Nous nous sommes attachs  concentrer toutes les fonctionnalits
     autour de l'appel systme sysmp(). Cette routine accepte un certain
     nombre de paramtres qui dterminent la fonctionnalit requise.
     Ces fonctions comprennent:

       affecter un processus/thread  un processeur spcifique;

       interdire un processeur d'excuter certains processus;

       empcher strictement l'utilisation d'un processeur;

       assigner  un processeur un _unique_ processus (et ses fils);

       information sur l'tat du processeur;

       crer/supprimer un ensemble de processeurs, sur lesquels les
        processus peuvent tre limits



  8. AA qquuii rraappppoorrtteerr lleess bboogguueess SSMMPP ??

     Signalez s'il vous plat les bogues  linux-smp@vger.rutgers.edu.


  9. AA pprrooppooss ddeess ppeerrffoorrmmaanncceess SSMMPP

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




  22..22..  CCtt uuttiilliissaatteeuurr


  1. AAii--jjee vvrraaiimmeenntt bbeessooiinn ddee SSMMPP ??


     Si vous vous le demandez, vous n'en avez probablement pas besoin.
     :) En gnral les systmes multiprocesseurs offrent de meilleurs
     performances que les systmes monoprocesseurs, mais pour obtenir un
     gain quelconque vous devez considrer bien d'autres facteurs que le
     seul nombre de processeurs. Par exemple, sur un systme donn, si
     le processeur est en gnral inactif, la plupart du temps  cause
     d'un disque dur lent, alors le systme est bloqu au niveau des
     entres/sorties ("input/output bound"); il ne bnficiera
     probablement pas de la puissance d'un processeur supplmentaire.
     Si, d'un autre cot, un systme doit excuter beaucoup de processus
     simultanment et que l'utilisation processeur est trs forte, alors
     vous tes susceptible d'amliorer les performances de votre
     systme. Les disques dur SCSI peuvent tre trs efficaces en
     utilisation avec plusieurs processeurs. Ils peuvent grer plusieurs
     commandes simultanment sans immobiliser le processeur (CC..
     PPoolliisshheerr).


  2. OObbttiieenntt--oonn lleess mmmmeess ppeerrffoorrmmaanncceess aavveecc uunn bbiipprroocceesssseeuurr 330000 MMHHzz
     qquu''aavveecc uunn pprroocceesssseeuurr 660000 MMHHzz ??

     Tout dpend de l'application, mais gnralement non. Le SMP
     implique quelques "frais de gestion" absents d'une machine
     monoprocesseur.  (WWaaddee HHaammppttoonn).  :)


  3. CCoommmmeenntt aaffffiicchheerr lleess ppeerrffoorrmmaanncceess ddee pplluussiieeuurrss pprroocceesssseeuurrss ??

     Grce  SSaammuueell SS.. CChheessssmmaann, se ici trouvent quelques utilitaires
     pratiques :

     CChhaarraacctteerr bbaasseedd::
        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, GGrreeggoorryy RR.. WWaarrnneess a rendu disponible un patch 
        http://queenbee.fhcrc.org/~warnes/procps


     GGrraapphhiiqquuee::
        xosview-1.5.1 supporte le SMP, les noyaux suprieurs au 2.1.85
        (inclus) et l'entre 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 patche par KKuummssuupp LLeeee pour les
        noyaux 2.2.p :
        http://www.ima.umn.edu/~klee/linux/xosview-1.6.1-5a1.tgz

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

     Nanmoins, vous ne pouvez pas contrler l'ordonnancement de faon
     prcise avec xosview car ce dernier le perturbe (HH.. PPeetteerr AAnnvviinn).


  4. CCoommmmeenntt aauuttoorriisseerr pplluuss dd''uunn pprroocceessssuuss lloorrss ddee llaa ccoommppiillaattiioonn dduu
     nnooyyaauu ??

     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, rfrez vous au fichier
  /usr/src/linux/Documentation/smp.txt pour des instructions prcises.

  Par exemple, comme lancer de multiples compilateurs autorise une
  machine avec suffisamment de mmoire  utiliser le temps processeur
  autrement perdu durant les dlais causs par les E/S, make MAKE="make
  -j 2" -j 2 aide rellement mme sur les machines monoprocesseurs.  (de
  RRaallff BBcchhllee).


  5. PPoouurrqquuooii llee tteemmppss ddoonnnn ppaarr llaa ccoommmmaannddee time est-il erron ?  (de
     JJooeell MMaarrcchhaanndd)

     Dans la srie des 2.0, le rsultat de la commande time est faux.
     La somme utilisateur+systme est juste *mais* 'l'tendue' entre le
     temps utilisateur et le temps systme est faux.

     Plus prcisment : "tout le temps pass sur un processeur autre que
     celui de dmarrage est comptabilis comme temps systme. Si vous
     chronomtrez un programme, ajoutez le temps utilisateur et le temps
     systme. Votre mesure sera alors correcte,  ceci prs qu'elle
     inclura aussi le temps systme qui restera  dcompter" (JJaakkoobb
     sstteerrggaaaarrdd).

     Ce bogue est corrig dans les versions 2.2.



  22..33..  PPrrooggrraammmmaattiioonn SSMMPP

  Section par JJaakkoobb sstteerrggaaaarrdd.

  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.


  22..33..11..  MMtthhooddeess ddee ppaarraalllllliissaattiioonn


  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 gnralement la
  mmoire, mais communiquent au moyen d'IPC ou d'une API de messagerie,
  ils ne seront pas dcrits davantage dans cette section. Ils ne sont
  pas vraiment spcifiques  SMP, puisqu'ils sont tout autant employs -
  sinon plus - avec des ordinateurs monoprocesseurs et des clusters.


  Seuls les threads POSIX fournissent des threads multiples partageant
  certaines ressources telles la mmoire. Cette proprit des machines
  SMP autorise plusieurs processeurs  partager leur mmoire. Pour
  employer deux (ou plus ;) ) processeurs avec un systme SMP, utilisez
  une librairie de thread du noyau.  Une bonne librairie LinuxThreads,
  une librairie de thread crite par Xavier Leroy
  <http://pauillac.inria.fr/~xleroy/linuxthreads/> est maintenant
  intgre avec la glibc2 (aka libc6). Les distributions Linux rcentes
  intgrent toutes cette librairie par dfaut. Vous n'avez donc pas 
  obtenir un paquetage spar 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. Nanmoins, elles sont bonnes pour beaucoup
  d'applications et ont tendance  tre plus rapides que les threads du
  noyau sur des systmes 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
  problmes d'incompatibilits et de non-adaptation aux thread des
  librairies, compilateurs et dbogueurs.  GNU/Linux n'y fait pas
  exception. Esprons que les sections qui suivent apporteront quelques
  lumires sur ce qui est possible et sur ce qui ne l'est pas.


  22..33..22..  LLaa lliibbrraaiirriiee CC

  Les vieilles librairies ne sont pas sres au niveau des threads. Il
  est trs important que vous utilisiez la GNU libc (gglliibbcc), aussi
  connue sous le nom de lliibbcc66. Vous pouvez videmment utiliser des
  versions antrieurs, mais cela vous causera plus de problmes que
  mettre  jour votre systme. Enfin, probablement :)

  Si vous voulez utiliser GDB pour dboguer vos programmes, voyez plus
  bas.


  22..33..33..  LLaannggaaggeess,, ccoommppiillaatteeuurrss eett ddbboogguueeuurrss

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

  Cette section, pour l'instant, ne dcrira que le C et le C++.  Si vous
  avez une exprience 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 (gglliibbcc). Il y a
  nanmoins quelques problmes :


  1. Quand vous compilez en C ou C++, incluez --DD__RREEEENNTTRRAANNTT dans la ligne
     de commande du compilateur. Il est ncessaire 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
     simultanment, le programme retournera une erreur de segmentation.
     Le compilateur gnre un code d'exception inadapt aux threads. Une
     manire de contourner le problme consiste  mettre un
     pthread_mutex_lock(&global_exception_lock) dans le(s)
     constructeur(s) de chaque classe que vous throw() et  insrer le
     pthread_mutex_unlock(...)  correspondant dans le destructeur. Ce
     n'est pas trs beau mais a marche.  Cette solution a t fournie
     par MMaarrkkuuss FFeerrcchh.

  Le dbogueur GNU GGDDBB,  partir de la version 4.18, devrait prendre en
  charge les threads correctement. La plupart des distributions Linux
  comprennent une version patche de gdb qui gre les threads.

  Il n'est pas ncessaire de patcher la gglliibbcc pour qu'elle fonctionne
  avec des threads. Si vous n'avez pas besoin de dboguer le logiciel
  (cela peut-tre vrai pour toutes les machines qui ne sont pas ddies
  au dveloppement), il n'y a pas besoin de patcher la gglliibbcc.

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

  AAssttuuccee :: si vous avez un thread qui perd la tte, se met  utiliser
  100% du temps CPU et que vous ne voyez pas pourquoi, voici une mthode
  lgante de trouver ce qui se passe : lancez le programme depuis la
  ligne de commande, sans GDB. Faites drailler votre thread.  Utilisez
  ttoopp pour obtenir le PID du processus. Lancez GDB tel que ggddbb pprrooggrraamm
  ppiidd. GDB s'attachera lui-mme au processus dont vous avez spcifi le
  PID et arrtera le thread. Vous disposez maintenant d'une session GDB
  avec le thread incrimin et vous pouvez utiliser bbtt ou d'autres
  commandes pour suivre ce qui se passe.


  22..33..44..  AAuuttrreess lliibbrraaiirriieess

  EElleeccttrriiccFFeennccee :: cette librairie n'est pas sre du point de vue SMP.
  Il devrait nanmoins tre possible de la faire fonctionner dans un
  environnement thread en insrant des verrous dans son code source.


  22..33..55..  AAuuttrreess ppooiinnttss ccoonncceerrnnaanntt llaa pprrooggrraammmmaattiioonn SSMMPP


  1. OO ppuuiiss--jjee ttrroouuvveerr pplluuss dd''iinnffoorrmmaattiioonnss ssuurr llaa pprrooggrraammmmaattiioonn
     ppaarraallllllee ??

     Voyez Linux Parallel Processing HOWTO
     <http://yara.ecn.purdue.edu/~pplinux/PPHOWTO/pphowto.html>

     Beaucoup d'informations utiles se trouvent sur Parallel Processing
     using Linux <http://yara.ecn.purdue.edu/~pplinux/>

     Voyez aussi Linux Threads FAQ <http://linas.org/linux/threads-
     faq.html>


  2. EExxiissttee--tt--iill ddeess pprrooggrraammmmeess oouu ddeess lliibbrraaiirriieess uuttiilliissaanntt lleess tthhrreeaaddss
     ??

     Oui. Pour les programmes vous devriez regarder  Multithreaded
     programs on linux <http://www.informatik.uni-
     bremen.de/~hollow/mthread.html> (j'adore les liens hypertextes, le
     saviez vous ? ;))

     En ce qui concerne les librairies :


     OOppeennGGLL MMeessaa lliibbrraarryy
        Grce  DDaavviidd BBuuccccaarreellllii, aannddrreeaass SScchhiifffflleerr et EEmmiill BBrriiggggss, 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 exprimentale. Pour plus
        d'information, voyez Mesa library
        <http://www.ssec.wisc.edu/~brianp/Mesa.html>


     BBLLAASS
        BLAS et FFTs optimiss Pentium pro pour Intel Linux
        <http://www.cs.utk.edu/~ghenry/distrib/>

        Les routines multithread BLAS ne sont pas disponibles pour
        l'instant, mais une librairie multithread est prvue pour
        1998-05-27, voir Blas News
        <http://www.cs.utk.edu/~ghenry/distrib/blasnews> pour plus de
        dtails.


     TThhee GGIIMMPP
        EEmmiill BBrriiggggss, la mme personne qui est implique 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3..  QQuueessttiioonnss ssppcciiffiiqquueess  ll''aarrcchhiitteeccttuurree xx8866


  33..11..  PPoouurrqquuooii cceellaa nnee mmaarrcchhee--tt--iill ppaass aavveecc mmaa mmaacchhiinnee ??


  1. PPuuiiss--jjee uuttiilliisseerr llee mmooddee SSMMPP aavveecc uunn CCPPUU CCyyrriixx//AAMMDD//nnoonn--IInntteell ??

     RRppoonnssee ccoouurrttee:: non.


     RRppoonnssee lloonngguuee Intel rvendique la proprit 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 adhrent au standard non-propritaire
     OpenPIC SMP mais actuellement il n'existe pas de carte mre
     l'utilisant.


  2. PPoouurrqquuooii mmoonn vviieeuuxx CCoommppaaqq nnee ffoonnccttiioonnnnee--tt--iill ppaass ??

     Mettez le en mode compatibilit MP1.1/1.4.

     Vrifiez "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 (DDaanniieell RRooeesseenn).

     AAddrriiaann PPoorrtteellllii :

     a. Pressez F10 quand le serveur dmarre afin d'entrer dans
        l'utilitaire de configuration systme (System Configuration
        Utility)

     b. Pressez Entre pour effacer l'cran de dmarrage

     c. Pressez immdiatement CTRL+A

     d. Un message apparatra vous informant que vous tes maintenant en
        "Advanced Mode"

     e. Slectionnez ensuite "Configure Hardware" -> "View / Edit
        details"

     f. Vous verrez alors les rglages avancs (mlangs avec les
        rglages ordinaires)

     g. Descendez jusqu'au "APIC Mode" et slectionnez alors "Fully
        Mapped"

     h. Sauvegardez les changements et redmarrez


  3. PPoouurrqquuooii mmoonn AALLRR nnee ffoonnccttiioonnnnee--tt--iill ppaass ??

     De RRoobbeerrtt HHyyaatttt: ALR Revolution quad-6 semble  peu prs sre,
     alors que quelques machines Revolution quad plus vieilles sans
     processeurs P6 ne semble pas "fiables"...


  4. PPoouurrqquuooii mmaa mmaacchhiinnee SSMMPP eesstt--eellllee ssii lleennttee ?? ou PPoouurrqquuooii uunn
     pprroocceesssseeuurr mmoonnttrree--tt--iill uunnee vvaalleeuurr bbooggoommiippss bbaassssee eett ppaass ll''aauuttrree ??

     De AAllaann CCooxx: si un de vos processeurs rapporte une valeur bogomips
     trs 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 mre chez un fournisseur comptent.

     Un noyau 2.0 (> 2.0.36) contient un patch MTRR qui devrait rsoudre
     ce problme (slectionnez l'option "handle buggy SMP BIOSes with
     bad MTRR setup" dans le menu "General setup").

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


  5. JJ''aaii eenntteenndduu ddiirree qquuee ddeess mmaacchhiinneess IIBBMM aavvaaiieenntt ddeess pprroobbllmmeess


     Certaines machines IBM possdent 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 base sur des 486SLC. Linux/SMP
     requiert un support FPU matriel.


  6. LLeess ssppcciiffiiccaattiioonn MMPP 11..44 pprrsseenntteenntt--eelllleess uunn qquueellccoonnqquuee aavvaannttaaggee
     vviiss----vviiss ddeess ssppcciiffiiccaattiioonnss 11..11 ??

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


  7. PPoouurrqquuooii ll''hhoorrllooggee ddrriivvee--tt--eellllee ssii rraappiiddeemmeenntt qquuaanndd llaa mmaacchhiinnee
     ffoonnccttiioonnnnee eenn mmooddee SSMMPP ??


     Il s'agit d'un problme connu avec la gestion des IRQ et les
     blocages noyau longs dans la srie 2.0 des noyaux. Pensez  mettre
      jour votre systme vers un 2.2 plus rcent.

     De JJaakkoobb OOeesstteerrggaaaarrdd: ou pensez  utiliser xntpd. Cela devrait
     garder votre horloge  l'heure. Je pense avoir entendu qu'activer
     RTC dans le noyau corrigeait aussi le problme de drive de
     l'horloge. a a march pour moi, mais j'ignore si cela est gnral
     ou si j'ai juste t chanceux !


     Certaines corrections du noyau dans les derniers 2.2.x devraient
     rsoudre ce problme.



  8. PPoouurrqquuooii mmeess pprroocceesssseeuurrss ssoonntt--iillss nnuummrroottss 00 eett 22 aauu lliieeuu ddee 00 eett
     11 ((oouu aauuttrree nnuummrroottaattiioonn bbiizzaarrrree)) ??

     Le numro du processeur est fix par le fabricant de la carte mre
     et ne veut absolument rien dire. Ignorez le.


  9. MMoonn ssyyssttmmee qquuaaddrruuppllee XXeeoonn ppllaannttee ddss qquu''iill aa ddccoommpprreessss llee nnooyyaauu

     (DDoouugg LLeeddffoorrdd) Essayez de recompiler LILO avec le support
     LARGE_EBDA et faites attention  bien toujours utiliser bzImage
     quand vous compilez le noyau. Cela semble avoir rsolu le problme
     de plantage au dmarrage ici sur une carte mre 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 systme
     de fichier racine au dmarrage.


     (RRoobbeerrtt MM.. HHyyaatttt) Avec 3 processeurs, avez-vous un terminateur dans
     le 4me emplacement ?


  10.
     DDuurraanntt llee ddmmaarrrraaggee llaa mmaacchhiinnee ppllaannttee eenn ssiiggnnaallaanntt uunn pprroobbllmmee
     IIOOAAPPIICC

     Essayez l'option de dmarrage "noapic" (JJoohhnn AAllddrriicchh) et/ou
     "reboot=bios" (TTeerrrryy SShhuullll).


  11.
     MMoonn ssyyssttmmee ssee bbllooqquuee lloorrss ddee ttrraaffiicc NNFFSS iinntteennssee

     Essayez le dernier noyau 2.2.x et le patch knfsd. Cela est en cours
     d'investigation.  (WWaaddee HHaammppttoonn)



  12.
     MMoonn ssyyssttmmee bbllooqquuee ssaannss mmeessssaaggee ooooppss

     Si vous utilisez les noyaux 2.2.11 ou 2.2.12, rcuprez le dernier
     noyau. Par exemple 2.2.13 possde de nombreuses corrections SMP.
     Plusieurs personnes ont rapport ces noyaux comme instables pour le
     SMP. Ces mmes noyaux peuvent avoir des problmes NFS qui
     provoqueraient des blocages. Aussi, utilisez une console srie pour
     capturer vos messages oops. (WWaaddee HHaammppttoonn)

     Si le problme 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 prvention contre les blocages durs qui produit des
     oops plus significatifs au lieu de planter en silence (IInnggoo
     MMoollnnaarr).

     (OOssaammuu AAookkii) Vous DEVEZ aussi _d__s_a_c_t_i_v_e_r toutes les fonctionnalits
     du BIOS lies  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 actives, des plantages
  alatoires peuvent se produire


  13.
     DDbboogguueerr ddeess bbllooccaaggeess

     (item par WWaaddee HHaammppttoonn)

     Un bon moyen de dboguer 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 dbogage. N'utilisez PAS l'option de
     blocage logicielle ! Pour des machines SMP rcentes, activez
     l'option kernel debugging et ensuite l'option NMI oopser. Afin de
     vrifier que le NMI oopser fonctionne, aprs avoir dmarr avec
     votre nouveau noyau, excutez un /cat /proc/interrupts et vrifiez
     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 appele.  Quand la machine se bloque, crivez sur un
     papier la premire colonne ordonne 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 srie facilite grandement le
     dbogage des blocages noyau, qu'ils soient SMP ou non !


  14.
     MMeessssaaggeess ""AAPPIICC eerrrroorr iinntteerrrruupptt oonn CCPPUU##nn,, sshhoouulldd nneevveerr hhaappppeenn"" ddaannss
     lleess llooggss

     Un message comme:






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


  indique la rception d'une erreur de calcul de code d'intgrit. Linux
  ne peut en tre responsable car la partie calcul des messages APIC est
  compltement matrielle. Il peut s'agir d'un problme matriel
  marginal. Tant que vous ne percevez pas d'instabilit, ils ne sont pas
  problmatiques. Les messages APIC sont renvoys jusqu' ce qu'il
  soient dlivrs (IInnggoo MMoollnnaarr).



  33..22..  CCaauusseess ppoossssiibblleess ddee ppllaannttaaggeess

  Dans cette section vous trouverez quelques information sur les causes
  ppoossssiibblleess de plantage sur une machine SMP (merci  JJaakkoobb sstteerrggaaaarrdd
  pour cette partie).  Autant que je sache (David), les problmes
  voqus ici sont spcifiques aux plate-formes Intel.



    PPrroobbllmmeess ddee rreeffrrooiiddiisssseemmeenntt

     De RRaallff BBcchhllee: (concernant la taille des botiers et les
     ventilateurs) il est important que l'air circule.  Bien sr, ce
     n'est pas possible quand toutes sortes d'obstacles, tels des
     cbles, l'en empchent dans des botiers par trop exigus.  D'un
     autre ct, j'ai vu des botiers surdimensionns provoquer de gros
     problmes. Il existe des botiers au format tour sur le march qui
     s'avrent actuellement pire  rafrachir que des botiers au format
     bureau.  En bref, la meilleure chose  faire est de penser 
     l'arodynamique dans le botier. Des botiers supplmentaires pour
     les priphriques dgageant de la chaleur sont galement utiles.

     Bien sr vous pouvez toujours aller chez Radio Shack (ou similaire)
     et acheter un ventilateur. Vous pouvez utiliser lm_sensor pour
     surveiller la temprature des processeurs PII et PIII. Cela peut
     vous aider  dterminer si la chaleur est un problme ou non (WWaaddee
     HHaammppttoonn).


    MMaauuvvaaiissee bbaarrrreettttee ddee mmmmooiirree

     N'achetez pas de la RAM bon march et ne mlangez pas des barrettes
     diffrente sur une mme carte mre.

     Les cartes mres Tyan sont tout particulirement connues pour leur
     susceptibilit sur la vitesse de la RAM (voir le paragraphe ci-
     dessous sur Tyan pour une solution ventuelle).

     Il y a eu des rapports sur des mmoire RAM PC 100  10ns vendues
     avec des cartes mres dont le processeur avait vraiment besoin de
     RAM  8ns (WWaaddee HHaammppttoonn).


    MMaauuvvaaiissee ccoommbbiinnaaiissoonn ddee pprroocceesssseeuurrss ddee ffrrqquueenncceess ddiiffffrreenntteess

     Vrifiez /proc/cpuinfo pour voir si vos processeurs fonctionnent 
     la mme cadence.



    SSii vvoottrree ssyyssttmmee eesstt iinnssttaabbllee,, SSUURRTTOOUUTT nnee ll''oovveerrcclloocckkeezz ppaass !!

     D'ailleurs, mme s'il est stable, ne le surcadencez pas.


     De RRaallff BBcchhllee: le surcadencement pose des problmes trs subtils.
     J'ai un bel exemple: une de mes vieilles machines surcadences
     commet des erreurs de calcul pour quelques pixels d'une fractale de
     640 X 400. Le problme est seulement visible quand on les compare
     en utilisant des outils.  Le mieux est donc de ne _j_a_m_a_i_s_, _n_e_v_e_r_,
     _n_u_n_c_a_s_, _n_i_e_m_a_l_s surcadencer.


    NNooyyaauuxx 22..00..xx eett EEtthheerrnneett rraappiiddee (de RRoobbeerrtt GG.. BBrroowwnn)

     Les noyaux 2.0.x sur des systmes Ethernet rapide et hautes
     performances ont des problmes significatifs (et connus) avec les
     conditions de course/inter-blocage (race/deadlock) dans la prise en
     charge des interruptions rseau.


     La solution consiste  obtenir la dernire version des pilotes
     100BT en cours de dveloppement  CESDIS Linux Ethernet device
     drivers site <http://cesdis.gsfc.nasa.gov/linux/drivers/> (ceux qui
     sont au point dfinissent SMPCHECK).


    UUnn bboogguuee ddaannss llee cchhiippsseett 444400FFXX (de EEmmiill BBrriiggggss)

     Si votre systme utilise le chipset 440FX alors les problmes de
     blocage sont peut-tre ds  une erreur (documente) du chipset. En
     voici la rfrence:


     Intel 440FX PCIset 82441FX (PMC) et 82442FX (DBX) Specification
     Update.  pg. 13


     http://www.intel.com/design/pcisets/specupdt/297654.htm


     Le problme peut se rsoudre avec un contournement par le BIOS (ou
     un patch du noyau). David Wragg a crit un patch qui est inclus
     dans le patch MTRR de Richard Gooch's. Pour plus d'informations
     ainsi qu'un descriptif de solution, voyez ici:


     http://nemo.physics.ncsu.edu/~briggs/vfix.html


    NNEE PPAASS llaanncceerr eemmmm338866..eexxee aavvaanntt ddee ddmmaarrrreerr LLiinnuuxx SSMMPP

     De MMaarrkk DDuugguuiidd, Rgle implicite #1 avec une carte mre W6LI. ;)


    SSii llaa mmaacchhiinnee rreeddmmaarrrree//ggllee aauu bboouutt dd''uunn mmoommeenntt,, iill ppeeuutt yy aavvooiirr
     ddeeuuxx bboonnnnee rraaiissoonnss lliieess  llaa mmmmooiirree eett aauu BBIIOOSS (JJaakkoobb sstteerrggaaaarrdd)

    Si le BIOS est muni de rglages comme "memory hole at 16M" et/ou
     "OS/2 memory > 64MB", essayez de les dsactiver tous les deux.
     Linux ne ragit pas toujours trs bien  ces deux options.

    Si vous avez plus de 64 MB de mmoire dans votre machine, et que
     vous spcifiez manuellement le chiffre exact dans la configuration
     de LILO, vous devriez spcifier 1 MB de moins que ce vous avez
     rellement dans votre machine. Si vous avez 128 MB, votre ligne
     dans votre lilo.conf ressemble : append="mem=127M"

    SSooyyeezz aavveerrttiiss ddeess pprroobbllmmeess ccoonncceerrnnaanntt lleess IIRRQQ

     Parfois, certaines cartes ne sont pas reconnues ou peuvent
     dclencher des conflits d'IRQ. Essayez de mettre les cartes sur des
     slots diffrents et si possible de les assigner  des IRQ
     diffrentes.


     Contribution de hhAASSCCIIII : enlever la ligne "append="hisax=9,2,3"
     dans lilo.conf autorisant  utiliser un noyau de la srie 2.1.xx
     avec le support ISDN + Hisax activ. Les noyaux de la srie 2.0.xx
     ne posent pas ce genre de problme.


     Essayez aussi de configurer les option de configuration du BIOS
     comme "MP 1.4 mode" ou "route PCI interrupts through IOAPIC" ou "OS
     Type" configur ni pour DOS ni pour Novell (IInnggoo MMoollnnaarr).



    UUttiilliissaattiioonn ssiimmuullttaannee dduu lleecctteeuurr ddee ddiissqquueetttteess ddee llaa ssoorrttiiee ssoonn

     Si vous bloquez alors que vous essayez d'accder au lecteur de
     disquettes (par exemple pendant que du son est jou) vous devriez
     peut-tre diter le fichier drivers/pci/quirks.c et positionner
     /int isa_dma_bridge_buggy = 1;. Le problme se manifeste avec mon
     Dell WS400 dual PII/300, 2.2.x, SMP (WWaaddee HHaammppttoonn).



  33..33..  IInnffoorrmmaattiioonnss ssppcciiffiiqquueess aauuxx ccaarrtteess mmrreess

  _N_o_t_e_z que des informations plus prcises peuvent tre trouves avec la
  liste des Cartes mre supposes fonctionner sous Linux SMP
  <http://www.nlug.org/smp/>



  33..33..11..  CCaarrtteess mmrreess aavveecc ddeess pprroobbllmmeess ccoonnnnuuss


    Aucune pour l'instant


  33..44..  MMaacchhiinnee SSMMPP LLiinnuuxx  bbaass pprriixx ((mmaacchhiinnee ddoouubbllee CCeelleerroonn))

  (SSttpphhaannee ccoolliivveett)


  Les machines SMP Linux les moins chres avec des processeurs
  disponibles de nos jours sont les systmes double Celeron. Un tel
  systme n'est pas officiellement possible selon Intel. On a intrt 
  vrifier qu'il s'agit bien de Celerons de seconde gnration, ceux
  avec 128 Kb de cache L2.


  33..44..11..  EEsstt--iill ppoossssiibbllee ddee ffaaiirree ffoonnccttiioonnnneerr uunnee mmaacchhiinnee ddoouubbllee
  CCeelleerroonn ??

  RRppoonnssee ooffffiicciieellllee dd''IInntteell :: non, le Celeron ne peut pas fonctionner
  en mode SMP.



  RRppoonnssee pprraattiiqquuee :: c'est possible, mais cela demande une modification
  matrielle pour les processeurs Slot 1. La manipulation est dcrite
  par Tomohiro Kawada sur sa page Dual Celeron System
  <http://kikumaru.w-w.ne.jp/pc/celeron/index_e.html>.  Naturellement,
  de telles modifications annulent la garantie... Certaines versions du
  processeur Celeron sont aussi disponibles au format Socket 370.  Dans
  ce cas, l'altration peut-tre faite sur l'adaptateur Socket 370 
  Slot 1 qui peut mme tre vendu pr-cabl pour une utilisation SMP
  (AAnnddyy PPoolliinngg, HHaannss -- EErriikk SSkkyyttttbbeerrgg, JJaammeess BBeeaarrdd).


  Il existe aussi une carte mre (ABIT BP6) autorisant l'insertion de
  deux Celerons dans le format Socket 370 (MMaarrttiijjnn KKrruuiitthhooff, RRyyaann
  MMccCCuuee), l'ABIT Computer BP6 vrifie, teste et supporte sous linux
  avec deux ppga socket 370 (AAnnddrree HHeeddrriicckk).


  33..44..22..  CCoommmmeenntt LLiinnuuxx ssee ccoommppoorrttee--tt--iill ssuurr lleess ssyyssttmmeess ddoouubbllee CCeelleerroonn
  ??

  Bien, merci.


  33..44..33..  QQuu''eenn eesstt--iill ddeess ssyyssttmmeess ddoouubblleess CCeelleerroonn ??  LLeess pprroocceesssseeuurrss
  CCeelleerroonn ssoonntt rrppuuttss ppoouurr ttrree ffaacciilleemmeenntt ssuurrccaaddeennaabbllee..

  Cela ppeeuutt marcher. Nanmoins, surcadencer un tel systme n'est pas
  aussi facile que pour un monoprocesseur. Ce n'est franchement pas une
  bonne ide pour un systme de production. Pour une utilisation
  personnelle, des systmes double Celeron 300 A fonctionnant
  parfaitement  450 MHz ont t signals (ddee nnoommbbrreeuusseess ppeerrssoonnnneess).


  33..44..44..  EEtt uunn ssyyssttmmee qquuaaddrruuppllee CCeelleerroonn ??

  C'est impossible. Les processeurs Celerons possdent  peu prs les
  mmes fonctionnalits qu'un Pentium II basique. Si vous voulez plus de
  deux processeur dans votre systme, vous devriez regarder du ct des
  machines  base de Pentium Pro, Pentium II Xeon ou Pentium III (?).


  33..44..55..  PPoouurrqquuooii nnee ppaass mmllaannggeerr CCeelleerroonn eett PPeennttiiuumm IIII ??

  Un systme utilisant un Celeron "r-autoris" et un Pentium II  la
  mme cadence ppeeuutt tthhoorriiqquueemmeenntt fonctionner.

  AAlleexxaannddrree CChhaarrbbeeyy  fabriqu un tel systme:

    Carte mre Asus P2B-D, proc 1: Celeron 366, proc 2: Pentium II
     400@266

    Les frquences de bus 66Mhz et 75Mhz furent fonctionnelles

    Le processeur le plus rapide (dans ce cas le Celeron) doit tre
     plac sur le deuxime slot. Inverser les processeurs (le plus
     rapide en premier) conduit rapidement  un chec.


  44..  QQuueessttiioonnss ssppcciiffiiqquueess  ll''aarrcchhiitteeccttuurree SSppaarrcc



  44..11..  QQuueelllllleess ssoonntt lleess mmaacchhiinneess SSppaarrcc ssuuppppoorrtteess ??

  Citation de la page web UltraLinux <http://ultra.linux.cz/> (systmes
  SMP seulement):
    Workstation UltraSPARC  base de PCI: Ultra60, Ultra450

    Serveurs UltraSPARC  base de SBUS: Enterprise 1, 2, 150

    Serveurs large UltraSPARC  base de SBUS: Enterprise 3000, 4000,
     5000, 6000, 10000

    Serveurs UltraSPARC  base de PCI : Enterprise 250, 450

    Machines SPARC sun4m SMP (AAnnttoonn BBllaanncchhaarrdd)

  UltraLinux a fonctionn sur une machine de 14 processeurs (voir la
  sortie dmesg <http://lwn.net/1998/1210/a/dm-sparc.html>).


  44..22..  PPrroobbllmmeess ssppcciiffiiqquueess aauu ssuuppppoorrtt SSMMPP SSppaarrcc

  (DDaavviidd MMiilllleerr) Il ne devrait pas y avoir d'inquitudes.

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


  44..33..  LLiimmiitteess SSMMPP ssppcciiffiiqquueess aauu nnooyyaauu ccoouurraanntt ((22..22))

  DDaavviidd MMiilllleerr: il y a un bug dans le fichier d'en-tte
  include/linux/tasks.h, cela ncessite de dfinir NR_CPUS  64 sur
  UltraSparc puisqu'il s'agit de la limite suprieure pour le matriel
  que nous supportons :-)


  55..  QQuueessttiioonnss ssppcciiffiiqquueess  ll''aarrcchhiitteeccttuurree PPoowweerrPPCC



  55..11..  QQuueelllllleess ssoonntt lleess mmaacchhiinneess PPPPCC ssuuppppoorrtteess ??


    Cartes mres PowerSurge (incluant UMAX s900)

    PowerMac

    Motorola MTX : support en cours de dveloppement. Les patches ne
     sont pas encore inclus dans le noyau principal (TTrrooyy BBeennjjeeggeerrddeess).

  (CCoorrtt DDoouuggaann) Non support: Systmes PPC RS/6000


  55..22..  PPrroobbllmmeess ssppcciiffiiqquueess ccoonncceerrnnaanntt llee ssuuppppoorrtt SSMMPP PPPPCC

  Rien. Compilation SMP normale (voir plus haut). Comme d'habitude,
  soyez attentif. Les modules sont spcifiques pour UP ou pour SMP.
  Recompilez les (PPaauull MMaacckkeerrrraass).


  66..  QQuueessttiioonnss ssppcciiffiiqquueess  ll''aarrcchhiitteeccttuurree AAllpphhaa


  66..11..  QQuueelllleess ssoonntt lleess mmaacchhiinneess AAllpphhaa ssuuppppoorrtteess ??

  GGeeeerrtteenn KKuuiippeerr : le SMP marche pour la plupart des serveurs AXP, sinon
  pour tous.


  JJaayy AA EEssttaabbrrooookk : le SMP semble fonctionner sur la plupart de nos
  machines [Compaq] avec deux processeurs ou plus. La liste de celles-ci
  comprend :

    AS2000/2100 (SABLE)

    AS4000/4100 (RAWHIDE)

    DS20 (DP264)

  En sont exclus :

    AS2100A (LYNX)

    TurboLaser bigboys (8200/8400)


  66..22..  PPrroobbllmmeess ssppcciiffiiqquueess aauu ssuuppppoorrtt SSMMPP AAllpphhaa

  Aucun (vraiment ? :-) ).


  77..  PPooiinntteeuurrss uuttiilleess


  77..11..  DDiivveerrss


    Parallel Processing en utilisant Linux
     <http://yara.ecn.purdue.edu/~pplinux/>

    Linux Parallel Processing HOWTO
     <http://yara.ecn.purdue.edu/~pplinux/PPHOWTO/pphowto.html>

    ((ddppaassss)) Page d'acceuille SMP Linux
     <http://www.uk.linux.org/SMP/title.html>

    linux-smp mailing list

     Pour ssoouussccrriirree, envoyez subscribe linux-smp dans le corps du
     message  majordomo@vger.rutgers.edu

     Pour se ddssiinnssccrriirree, envoyez unsubscribe linux-smp dans le corps du
     message  majordomo@vger.rutgers.edu

     Archives Linux SMP <http://www.linuxhq.com/lnxlists/linux-smp/>

     Archives Linux SMP  progressive-comp.com <http://www.progressive-
     comp.com/Lists/?l=linux-smp&r=1&w=2#linux-smp>

    La librairie pthread de Xavier Leroy
     <http://pauillac.inria.fr/~xleroy/linuxthreads/>

    Les Cartes mres qui parat-il marche avec Linux SMP
     <http://www.nlug.org/smp/>

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

    patch pour procps pour 2.2.x
     <http://queenbee.fhcrc.org/~warnes/procps>

    xosview <http://lore.ece.utexas.edu/~bgrayson/xosview.html>

    xosview pour 2.2.x
     <http://www.ima.umn.edu/~klee/linux/xosview-1.6.1-5a1.tgz>

    Performance SMP de Linux
     <http://www.phy.duke.edu/brahma/benchmarks.smp>

    CESDIS Linux Ethernet device drivers site
     <http://cesdis.gsfc.nasa.gov/linux/drivers/>

    Systmes Double Celeron <http://kikumaru.w-
     w.ne.jp/pc/celeron/index_e.html>



  77..22..  PPrrooggrraammmmeess eett lliibbrraaiirriieess mmuullttiitthhrreeaadd


    Linux Threads FAQ <http://linas.org/linux/threads-faq.html>

    Programmes multithread sur linux <http://www.informatik.uni-
     bremen.de/~hollow/mthread.html>

    BLAS et FFTs optimis Pentium pro pour Intel Linux
     <http://www.cs.utk.edu/~ghenry/distrib/> (pas disponible tout de
     suite, mais une librairie double processeurs est prvue pour le
     5/27/98. Pour plus de dtails, voir Blas News
     <http://www.cs.utk.edu/~ghenry/distrib/blasnews>).

    Librairie Mesa <http://www.ssec.wisc.edu/~brianp/Mesa.html>
     (support multithread exprimental)

    Plugins parallles pour The GIMP
     <http://nemo.physics.ncsu.edu/~briggs/gimp/index.html>



  77..33..  PPaattcchheess ssppcciiffiiqquueess SSMMPP


    Patches noyau de Forissier <http://www-
     isia.cma.fr/~forissie/smp_kernel_patch/>

    Patch pour un bug dans le chipset 440FX
     <http://nemo.physics.ncsu.edu/~briggs/vfix.html>

    Patch MTRR (dernire version: 1.9)
     <http://www.atnf.csiro.au/~rgooch/kernel-patches.html>

    PSET - Processor Sets for the Linux kernel
     <http://isunix.it.ilstu.edu/~thockin/pset/>

    Patches SMP de Ingo Molnar <http://www.redhat.com/~mingo/> (pour
     les esthtes seulement, s'il vous plat lisez linux-
     smp@vger.rutgers.edu)



  77..44..  CCoommppiillaatteeuurrss ppaarraalllllliisseeuurrss//ooppttiimmiisseeuurrss ppoouurr lleess mmaacchhiinneess
  558866//668866 (( SSuummiitt RRooyy ))


    Pentium Compiler Group <http://www.goof.com/pcg/> crateur de pgcc

    Absoft <http://www.absoft.com/> compilateur Fortran 90 et Fortran
     77

    The Portland Group, Inc. <http://www.pgroup.com/> supporte le
     standard OpenMP <http://www.openmp.org> pour la paralllisation
     Fortran sur Linux
    Pacific-Sierra Research Corporation <http://www.psrv.com/> contient
     un compilateur gratuit F90 pour Linux et aussi des compilateurs
     paralllisant pour SMP Linux

    Applied Parallel Research <http://s006.infomall.org/index.html>
     inclut actuellement des compilateurs paralllisant pour NT

    KAI <http://www.kai.com> offre un compilateur C++ pour Linux qui
     inclut OpenMPI. Il s'appelle Guide_OpenMP. Information 
     http://www.kai.com/parallel/kappro/guide (GGeerroo WWeeddeemmaannnn).


  88..  GGlloossssaarryy


    SSMMPP Multi-Processeur Symmtrique

    AAPPIICC Contrleur d'Interruptions Programmable Avanc

    tthhrreeaadd Un thread est l'activit processeur dans un processus.  Un
     mme processus peut avoir de multiples thread. Ces threads
     partagent l'espace adresse du processus et peuvent donc par-l
     partager des donnes.

    pptthhrreeaadd Posix thread, threads dfinie par le standard Posix.

    AAPPMM Gestion avance de l'nergie


  99..  QQuuooii ddee nneeuuff ??



     vv11..99,, 1133 jjaannvviieerr 22000000

       Rappel, dsactivation de toutes les fonctions de gestion
        d'nergie du BIOS (OOssaammuu AAookkii)

       Explication sur la manire d'accder au mode de configuration
        avanc du serveur Compaq (AAddrriiaann PPoorrtteellllii)


     vv11..88,, 88 nnoovveemmbbrree 11999999

       La carte mre quadruple celeron tait un canular, restauration
        de l'ancien paragraphe (SSiimmeenn TTiimmiiaann TThhoorreesseenn)


     vv11..77,, 66 nnoovveemmbbrree 11999999

       Nouvelle introduction (CC.. PPoolliisshheerr aka cp)

       De nombreuses corrections typographiques et grammaticales (cp)

       Paragraphe d'introduction sur la compilation du noyau (cp)

       Paragraphe d'introduction sur les besoins SMP (cp)

       Rfrence sur KAI un compilateur optimis (GGeerroo WWeeddeemmaannnn)

       Les cartes mres quadruple celeron existent (JJeeffffrreeyy HH.. IInnggbbeerr)


     vv11..66,, 2211 ooccttoobbrree 11999999


       Ajout d'information sur la perturbation horaire de xosview

       Ajout du message d'information "Erreur d'interruption APIC sur
        le CPU#n"

       Ajout d'information sur les blocages matriels

       Suppression de la section "Comment obtenir un maximum de
        performance" (obsolte)

       Ajout d'information sur les systmes double processeurs avec
        diffrents processeurs x86 (un Celeron et un PII)


     vv11..55,, 44 ooccttoobbrree 11999999

       Plus de prcision dans la description de PSET


     vv11..44,, 3300 sseepptteemmbbrree 11999999

       Prcision sur l'activation du support MTRR pour les noyaux SMP
        x86 (moi)


     vv11..33,, 2299 sseepptteemmbbrree 11999999

       Beaucoup beaucoup de corrections grammaticales et typographique
        (WWaaddee HHaammppttoonn aka hww)

       Ajout d'information dans la courte introduction  propos des
        diffrences entre 2.2/2.4/2.0 (hww)

       Ajout des choses  faire pas  pas pour recompiler le noyau (hww
        et moi)

       Ajout d'information concernant les problmes lis aux modules
        SMP/UP (hww)

       Ajout de prcision dans la section Threads Posix concernant les
        threads utilisateurs vs. les threads du noyau (hww)

       Nouvel item  propos de NFS et des blocages du noyau (hww)

       Nouvel item  propos des blocage noyau sans message d'alerte
        (hww)

       Nouvel item  propos du dbogage des problmes de blocage (hww)

       Ajout d'information  propos des problmes de dgagement de
        chaleur (hww)

       Divers mise  jour que j'ai oubli (hww)

       Nouvel item  propos des accs disquette et du son (hww)


     vv11..22,, 2277 sseepptteemmbbrree 11999999

       Changement de nom: ce document est maintenant un Howto.  TWD, et
        rapide! (GGuuyyllhheemm AAzznnaarr)


     vv11..11,, 2266 sseepptteemmbbrree 11999999


       Ajout d'un lien vers le premier brouillon de la FAQ de Chris
        Pirish

       Extension des problmes lis aux IRQ


     vv11..0000,, 2255 sseepptteemmbbrree 11999999

       Premire mise  jour depuis bien longtemps !

       Retraitement de toute la FAQ: le 2.2 est l et le 2.4 arrive

       Ajout des informations sur le verrouillage noyau de Ingo Molnar

       Suppression de l'item "Quelle seront les performance de mes
        applications sous SMP" : dpass

       Suppression de l'item "Mon systme SMP se verrouille tout le
        temps." : dpass

       Suppression de l'item "Vous utilisez le 2.0.35, n'est-ce pas
        ?" : dpass

       Suppression de l'item "Certains matriels sont aussi connu pour
        poser des problmes." : dpass

       Effacement de la section "Cartes mre avec des problmes
        connus". Nous devrions recommencer du dbut.

       Suppression de la section "Carte mre sans problmes connus" :
        dpasse

       Mise  jour de la section celeron (de nombreuses personnes)

       Ajout de "Les machines SPARC sun4m SMP" dans les machines Sparc
        supportes (AAnnttoonn BBllaanncchhaarrdd)

       Ajout de l'item "Durant le dmarrage la machine se bloque en
        signalant un problme IOAPIC" dans la section "Pourquoi cela ne
        marche-t-il pas sur ma machine ?"

       Ajout de l'item "A propos des performances SMP ?"

       Mise  jour de l'item "Pourquoi mon vieux Compaq ne marche-t-il
        pas ?"

       Rparation d'un lien dpass

       Ajout d'un pointeur vers les patches de test SMP d'Ingo


     vv00..5544,, 1133 mmaarrss 11999999

       Ajout de la section  propos des systmes SMP Alpha


     vv00..5533,, 0088 mmaarrss 11999999

       Ajout de la section sur les systmes PowerPC SMP


     vv00..5522,, 0077 mmaarrss 11999999

       Ajout de la section sur les systmes Sparc SMP


     vv00..5511,, 0066 mmaarrss 11999999

       Ajout de la section dual-celeron

       Suppression de la section Adaptec

       Mise  jour du lien procps

       Mise  jour du lien xosview

       Ajout d'une rponse pour le plantage du quadri Xeon

       Mise  jour de l'item  propos du patch de la glibc pour gd :
        devrait tre inclus dans la RH 5.2


     vv00..5500,, 0033 ffvvrriieerr 11999999

       Mise  jour du lien "Programmes Multithread sous linux"


     vv00..4499,, 1133 jjaannvviieerr 11999999

       Mise  jour  propos de CONFIG_SMP. Ajout du .txt dans
        Documentation/smp. (MMiicchhaaeell EElliizzaabbeetthh CChhaassttaaiinn)


     vv00..4488,, 1100 ddcceemmbbrree 11999988

       Fautes d'orthographes corrige. Adresses email corrige.


     vv00..4477,, 2200 nnoovveemmbbrree 11999988

       Ajout de la mention du patch MTRR est inclus 2.0.36 (li  des
        problme de BogoMips)


     vv00..4466,, 1100 nnoovveemmbbrree 11999988

       Mise  jour  propos des cartes mre Epox KP6-LS


     vv00..4455,, 2255 ooccttoobbrree 11999988

       Correction d'une erreur concernant le fichier /proc/stat

       Ajout d'un pointeur vers le site CESDIS Ethernet Linux Drivers


     vv00..4444,, 1144 ooccttoobbrree 11999988

       Mise  jour du lien vers la page web :  _C_a_r_t_e_s _m__r_e _s_u_p_p_o_s__e_s
        _f_o_n_c_t_i_o_n_n_e_r _s_o_u_s _L_i_n_u_x _S_M_P

       Ajout de l'explication de Jakob : comment chronomtrer un
        systme SMP avec les noyaux 2.0


     vv00..4433,, 99 sseepptteemmbbrree 11999988

       Mise  jour de la premire question dans la section 3.1

       Mise  jour du lien mt-Mesa : multithread est maintenant inclus
        comme exprimental dans la distribution Mesa

     vv00..4422,, 22 sseepptteemmbbrree 11999988

       Mise  jour cosmtique dans la section 3.3

       Deux liens sont marquer comme obsoltes (Multithreaded Mesa et
        performance SMP)

       Mise  jour de l'item  propos des threads et des exceptions en
        C++ (sect 3.3)


     vv00..4411,, 11 sseepptteemmbbrree 11999988

       Ajout d'une section majeur: "3.3 Programmation SMP" crite par
        Jakob stergaard

       Dplacement de la section "3.2 Cot utilisateur" vers la section
        3.3


     vv00..4400,, 2277 aaoott 11999988

       Mise  jour: section 3.1, item 7: processor affinity


     vv00..3399,, 2277 aaoott 11999988

       Mise  jour ncessaire du BOIS Award pour les cartes mres Tyan
        (hhAASSCCIIII)

       Ajout d'un item sur les IRQ dans la section plantage (moi et
        hhAASSCCIIII)

       Ajout du bon support de l'Asus P2B-DS (UUllff RRoommppee)

       Ajout d'une autre archive smp-list dans la section pointeur
        (HHaannkk LLeeiinniinnggeerr)


     vv00..3388,, 88 aaoott 11999988

       Ajout d'un pointeur vers la FAQ Linux Threads


     vv00..3377,, 3300 JJuuiilllleett 11999988

       EEmmiill BBrriiggggss est en train de travailler sur des plugins
        parallles pour Gimp (voir "Existe-t-il des programmes ou des
        library utilisant les threads ?", section "Cot utilisateur")


     vv00..3366,, 2266 JJuuiilllleett 11999988

       Merci  JJaakkoobb sstteerrggaaaarrdd, deux changement dans "Possible causes
        of Crash"

       Chang le 2.0.33 pour le 2.0.35 (dernier noyau stable)

       Ajout de la section "Les plantages lis au BIOS"


     vv00..3355,, 1144 JJuuiilllleett 11999988

       Ajout des N440BX Server Board dans carte-mre-sans-aucun-
        problme

       Ajout d'une success story pour la carte mre GigaByte avec une
        mise  jour du BIOS

       Ajout de la section "Comment obtenir les performances maximum ?"
        (attend vos suggestions ;)


     vv00..3344,, 1100 jjuuiinn 11999988

       Ajout de la section "Parallelizing/Optimizing Compilers for
        586/686 i machines" dans la section "Useful Pointers", merci 
        SSuummiitt RRooyy

       Correction, "Asus P/I-UP5" est en fait "Asus P/I-P65UP5"


     vv00..3333,, 33 jjuuiinn 11999988

       Encore une success story avec une carte mre GigaByte DLX.

       Une astuce pour les cartes mre Tyan, dsactiver l'option "DRAM
        Fast Leadoff" du BIOS


     vv00..3322,, 2277 mmaaii 11999988

       Asus P/I-UP5 ajouter  la section carte-mre-sans-aucun-problme


     vv00..3311,, 1188 mmaaii 11999988

       Elitegroup P6LX2-A marche avec le 2.1.100 et le 101

       Les bugs doivent tre rapports linux-smp@vger.rutgers.edu


     vv00..3300,, 1122 mmaaii 11999988

       SuperMicro est maintenant une carte mre dans la section carte-
        mre-sans-aucun-problme


     vv00..2299,, 1111 mmaaii 11999988

       La success story d'une carte mre GigaByte 686 avec le 2.1.101

       Ajout d'un nouvel item dans la section "Cot utilisateur" :
        "Existe-t-il des programmes ou des library utilisant les threads
        ?"

       La library OpenGL Mesa library est en train de passer au
        multithread.  Cool! Voir la nouvelle section pour plus de
        dtails.


     vv00..2288,, 0099 mmaaii 11999988

       Un miroir US de cette FAQ est maintenant disponible (voir
        Introduction)

       Fusion de deux entres confuses, Gigabyte 686


     vv00..2277,, 0055 mmaaii 11999988


       Nouvelles informations pour les pilotes Adaptec et TekRam

       Les cartes mres Micronics W6-LI marche avec SMP



  1100..  LLiissttee ddeess ccoonnttrriibbuutteeuurrss

  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 Bchle

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














































