Penguin
Diff: HowToSMPHOWTO
EditPageHistoryDiffInfoLikePages

Differences between current version and predecessor to the previous major change of HowToSMPHOWTO.

Other diffs: Previous Revision, Previous Author, or view the Annotated Edit History

Newer page: version 3 Last edited on Sunday, October 31, 2004 1:34:51 am by AristotlePagaltzis
Older page: version 2 Last edited on Friday, June 7, 2002 1:07:27 am by perry Revert
@@ -1,3237 +1 @@
-  
-  
-  
-Linux SMP HOWTO  
-  
-  
-  
-----  
-  
-!!!Linux SMP HOWTO  
-  
-!!David Mentreacute, David.Mentre@irisa.fr v1.12.1, 25 october 2000  
-  
-  
-----  
-''This HOWTO reviews main issues (and I hope solutions) related to SMP  
-configuration under Linux.''  
-----  
-  
-  
-  
-  
-!!1. Licensing  
-  
-  
-  
-  
-!!2. Introduction  
-  
-  
-  
-  
-!!3. Questions related to any architectures  
-  
-  
-*3.1 Kernel Side  
-  
-*3.2 User Side  
-  
-*3.3 SMP Programming  
-  
-  
-  
-  
-  
-!!4. x86 architecture specific questions  
-  
-  
-*4.1 Why it doesn't work on my machine?  
-  
-*4.2 Possible causes of crash  
-  
-*4.3 Motherboard specific information  
-  
-*4.4 Low cost SMP Linux box (dual Celeron box)  
-  
-  
-  
-  
-  
-!!5. Sparc architecture specific questions  
-  
-  
-*5.1 Which Sparc machines are supported ?  
-  
-*5.2 Specific problem related to Sparc SMP support  
-  
-*5.3 SMP specific limit with current kernel (2.2)  
-  
-  
-  
-  
-  
-!!6. PowerPC architecture specific questions  
-  
-  
-*6.1 Which PPC machines are supported ?  
-  
-*6.2 Specific problem related to PPC SMP support  
-  
-  
-  
-  
-  
-!!7. Alpha architecture specific questions  
-  
-  
-*7.1 Which Alpha machines are supported ?  
-  
-*7.2 Specific problem related to Alpha SMP support  
-  
-  
-  
-  
-  
-!!8. Useful pointers  
-  
-  
-*8.1 Various  
-  
-*8.2 Multithreaded programs and library  
-  
-*8.3 SMP specific patches  
-  
-*8.4 Parallelizing/Optimizing Compilers for 586/686 machines  
-  
-  
-  
-  
-  
-!!9. Glossary  
-  
-  
-*9.1 Definitions  
-  
-*9.2 Concepts  
-  
-  
-  
-  
-  
-!!10. What's new ?  
-  
-  
-  
-  
-!!11. List of contributors  
-----  
-  
-!!1. Licensing  
-  
-  
-This document is made available under the terms of the GNU Free Documentation License.  
-You should have received a copy with it. If not, it is available online at  
-http://www.fsf.org/licenses/fdl.html.  
-  
-  
-  
-----  
-  
-!!2. Introduction  
-  
-  
-Linux works on SMP (Symmetric Multi-Processors) machines. SMP support  
-was introduced with kernel version 2., and has improved steadily ever  
-since. The kernel locking granularity is much finer in 2.2.x than in  
-2..x, which enables better performance when processes are accessing the  
-kernel!  
-  
-  
-  
-  
-  
-HOWTO maintained by David Mentreacute (  
-David.Mentre@irisa.fr). The latest  
-edition of this HOWTO can be found at  
-  
-  
-*  
-http://www.irisa.fr/prive/mentre/smp-howto/ (France)  
-*  
-  
-*  
-http://www.phy.duke.edu/brahma/smp-faq/ (USA)  
-*  
-  
-  
-  
-  
-  
-  
-If you want to contribute to this HOWTO, I would prefer a diff against the  
-SGML version of this  
-document, but any remarks (in plain text) will be greatly  
-appreciated. If you send me an email about this HOWTO, please include a  
-tag like [[Linux SMP HOWTO ] in the Subject: field of your  
-e-mail. It helps me to automatically sort mails (and you will have a faster  
-reply ;)).  
-  
-  
-  
-  
-  
-This HOWTO is an improvement of a  
-first draft made by __Chris  
-Pirih__.  
-  
-  
-  
-  
-  
-All information contained in this HOWTO is provided "as is." All  
-warranties, expressed, implied or statutory, concerning the accuracy of  
-the information of the suitability for any particular use are hereby  
-specifically disclaimed. While every effort has been taken to ensure the  
-accuracy of the information contained in this HOWTO, the authors assume  
-no responsibility for errors or omissions, or for damages resulting from  
-the use of the information contained herein.  
-  
-  
-  
-----  
-  
-!!3. Questions related to any architectures  
-  
-  
-  
-  
-!!3.1 Kernel Side  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-# __Does Linux support multi-threading? If I start two or more  
-processes, will they be distributed among the available CPUs?__  
-  
-  
-Yes. Processes and kernel-threads are distributed among processors.  
-User-space threads are not.  
-  
-  
-  
-  
-#  
-  
-# __What kind of architectures are supported in SMP?__  
-  
-  
-  
-  
-; __From __Alan Cox__:__:  
-  
-SMP is supported in 2.0 on the hypersparc (SS20, etc.) systems and Intel  
-486, Pentium or higher machines which are Intel MP1.1/1.4  
-compliant. __Richard Jelinek__ adds: right now, systems have been  
-tested up to 4 CPUs and the MP standard (and so Linux) theoretically  
-allows up to 16 CPUs.  
-  
-  
-SMP support for !UltraSparc, !SparcServer, Alpha and PowerPC machines is  
-in available in 2.2.x.  
-  
-  
-  
-; __From __Ralf Baumlchle__:__:  
-  
-MIPS, m68k and ARM does not  
-support SMP; the latter two probly won't ever.  
-  
-  
-That is, I'm going to hack on MIPS-SMP as soon as I get a SMP box ...  
-  
-  
-  
-  
-  
-#  
-  
-# __How do I make a Linux SMP kernel?__  
-  
-  
-Most Linux distributions don't provide a ready-made SMP-aware kernel,  
-which means that you'll have to make one yourself. If you haven't made  
-your own kernel yet, this is a great reason to learn how. Explaining  
-how to make a new kernel is beyond the scope of this document; refer to  
-the Linux Kernel Howto for more information. (__C. Polisher__)  
-  
-  
-In kernel series 2.0 up to but not including 2.1.132, uncomment the  
-SMP=1 line in the main Makefile (/usr/src/linux/Makefile).  
-  
-  
-In the 2.2 version, configure the kernel and answer "yes" to the  
-question "Symmetric multi-processing support" (__Michael Elizabeth  
-Chastain__).  
-  
-  
-AND  
-  
-  
-enable real time clock support by configuring the "RTC support" item (in  
-"Character Devices" menu) (from __Robert G. Brown__). Note that  
-inserting RTC support actually doesn't afaik prevent the known problem  
-with SMP clock drift, but enabling this feature prevents lockup when the  
-clock is read at boot time. A note from __Richard Jelinek__ says  
-also that activating the Enhanced RTC is necessary to get the second CPU  
-working (identified) on some original Intel Mainboards.  
-  
-  
-AND  
-  
-  
-(x86 kernel) do NOT enable APM (advanced power management)! APM and SMP  
-are not compatible, and your  
-system will almost certainly (or at least probably ;)) crash  
-while booting if APM is enabled (__Jakob Oestergaard__). __Alan  
-Cox__ confirms this : 2.1.x turns APM off for SMP boxes. Basically  
-APM is undefined in the presence of SMP systems, and anything could  
-occur.  
-  
-  
-AND  
-  
-  
-(x86 kernel) enable "MTRR (Memory Type Range Register) support". Some  
-BIOS are buggy as they do not activate cache memory for the second  
-processor. The MTRR support contains code that solves such processor  
-misconfiguration.  
-  
-  
-  
-  
-  
-  
-  
-  
-You must rebuild all your kernel and kernel modules when changing to and  
-from SMP mode. Remember to make modules and make  
-modules_install (from __Alan Cox__).  
-  
-  
-  
-  
-  
-If you get module load errors, you probably did not rebuild and/or  
-re-install your modules. Also with some 2.2.x kernels people have  
-reported problems when changing the compile from SMP back to UP  
-(uni-processor). To fix this, save your .config file, do ''make  
-mrproper'', restore your ''.config'' file, then remake your  
-kernel (''make dep'', etc.) (__Wade Hampton__). Do not forget  
-to run lilo after copying your new kernel.  
-  
-  
-Recap:  
-----  
-  
-make config # or menuconfig or xconfig  
-make dep  
-make clean  
-make bzImage # or whatever you want  
-# copy the kernel image manually then RUN LILO  
-# or make lilo  
-make modules  
-make modules_install  
-  
-----  
-  
-  
-  
-  
-  
-  
-  
-#  
-  
-# __How do I make a Linux __non__-SMP kernel?__  
-  
-  
-In the 2.0 series, __comment__ the SMP=1 line in the main  
-Makefile (/usr/src/linux/Makefile).  
-  
-  
-In the 2.2 series, configure the kernel and answer "no" to the question  
-"Symmetric multi-processing support" (__Michael Elizabeth  
-Chastain__).  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-You must rebuild all your kernel and kernel modules when changing to and  
-from SMP mode. Remember to make modules and make  
-modules_install and remember to run lilo. See notes above about  
-possible configuration problems.  
-  
-  
-  
-  
-  
-  
-  
-#  
-  
-# __How can I tell if it worked?__  
-  
-  
-  
-  
-cat /proc/cpuinfo  
-  
-  
-  
-  
-  
-  
-Typical output (dual PentiumII):  
-----  
-  
-processor :  
-cpu : 686  
-model : 3  
-vendor_id : !GenuineIntel  
-[[...]  
-bogomips : 267.06  
-processor : 1  
-cpu : 686  
-model : 3  
-vendor_id : !GenuineIntel  
-[[...]  
-bogomips : 267.06  
-  
-----  
-  
-  
-  
-  
-#  
-  
-# __What is the status of converting the kernel toward finer  
-grained locking and multithreading?__  
-  
-  
-Linux kernel version 2.2 has signal handling, interrupts and some I/O stuff fine grain  
-locked. The rest is gradually migrating. All the scheduling is SMP  
-safe.  
-  
-  
-  
-  
-  
-Kernel version 2.3 (next 2.4) has really fine grained locking. In the 2.3 kernels  
-the usage of the big kernel lock has basically disappeared, all major  
-Linux kernel subsystems are fully threaded: networking, VFS, VM, IO,  
-block/page caches, scheduling, interrupts, signals, etc. (__Ingo  
-Molnar__)  
-  
-  
-  
-  
-#  
-  
-# __Does Linux SMP support processor affinity?__  
-  
-  
-  
-  
-  
-  
-  
-; __Standard kernel__:  
-  
-No and Yes. There is no way to force a process onto specific CPU's but  
-the linux scheduler has a processor bias for each process, which tends  
-to keep processes tied to a specific CPU.  
-  
-  
-  
-; __Patch__:  
-  
-Yes. Look at  
-PSET - Processor Sets for the Linux kernel:  
-  
-The goal of this project is to make a source compatible and functionally  
-equivalent version of pset (as defined by SGI - partially removed from  
-their IRIX 6.4 kernel) for Linux. This enables users to determine which  
-processor or set of processors a process may run on. Possible uses  
-include forcing threads to separate processors, timings, security (a  
-`root' only CPU?) and probably more.  
-  
-  
-  
-It is focused around the syscall sysmp(). This function takes a number of  
-parameters that determine which function is requested. Functions  
-include:  
-  
-  
-#* binding a process/thread to a specific CPU  
-#*  
-  
-#* restricting a CPU's ability to execute some processes  
-#*  
-  
-#* restricting a CPU from running at all  
-#*  
-  
-#* forcing a cpu to run _only_ one process (and its children)  
-#*  
-  
-#* getting information about a CPU's state  
-#*  
-  
-#* creating/destroying sets of processors, to which processes may be  
-bound  
-#*  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-#  
-  
-# __Where should one report SMP bugs to?__  
-  
-  
-Please report bugs to linux-smp@vger.kernel.org.  
-  
-  
-  
-  
-#  
-  
-# __What about SMP performance?__  
-  
-  
-If you want to gauge the performance of your SMP system, you can run some tests made by  
-Cameron !MacKinnon and available at  
-http://www.phy.duke.edu/brahma/benchmarks.smp.  
-  
-  
-Also have a look at this article by Bryant, Hartner, Qi and  
-Venkitachalam that compares 2.2 and 2.3/2.4 UP and SMP kernels :  
-SMP Scalability Comparisons of Linux¨ Kernels 2.2.14 and 2.3.99  
-(__Ray Bryant__) (You'll find also a copy  
- here)  
-  
-  
-  
-  
-#  
-  
-  
-  
-  
-  
-  
-  
-  
-!!3.2 User Side  
-  
-  
-  
-  
-  
-  
-# __Do I really need SMP?__  
-  
-  
-If you have to ask, you probably don't. :)  
-Generally, multi-processor systems can provide better performance  
-than uni-processor systems, but to realize any gains you need  
-to consider many other factors besides the number of CPU's.  
-For instance, on a given system, if the processor is generally  
-idle much of the time due to a slow disk drive, then this system  
-is "input/output bound", and probably won't benefit from additional  
-processing power. If, on the other hand, a system has many  
-simultaneously executing processes, and CPU utilization is very  
-high, then you are likely to realize increased system performance.  
-SCSI disk drives can be very effective when used with multiple  
-processors, due to the way they can process multiple commands  
-without tying up the CPU. (__C. Polisher__)  
-  
-  
-  
-  
-#  
-  
-# __Do I get the same performance from 2-300 MHz processors  
-as from one 600 MHz processor?__  
-  
-  
-This depends on the application, but most likely not. SMP adds  
-some overhead that a faster uniprocessor box would not incur  
-(__Wade Hampton__).  
-:)  
-  
-  
-  
-  
-#  
-  
-# __How does one display mutiple cpu performance?__  
-  
-  
-Thanks to __Samuel S. Chessman__, here are some useful utilities:  
-  
-; __Character based:__:  
-  
-  
-http://www.cs.inf.ethz.ch/~rauch/procps.html  
-  
-Basically, it's procps v1.12.2 (top, ps, et. al.) and some patches to  
-support SMP.  
-  
-  
-For 2.2.x, __Gregory R. Warnes__ as made a patch available at  
-http://queenbee.fhcrc.org/~warnes/procps  
-  
-  
-  
-; __Graphic:__:  
-  
-xosview-1.5.1 supports SMP. And kernels above 2.1.85 (included) the cpuX  
-entry in /proc/stat file.  
-  
-  
-The official homepage for xosview is:  
-http://lore.ece.utexas.edu/~bgrayson/xosview.html  
-  
-  
-You'll find a version patched for 2.2.x kernels by __Kumsup Lee__ :  
-http://www.ima.umn.edu/~klee/linux/xosview-1.6.1-5a1.tgz  
-  
-  
-By the way, you can't monitor processor scheduling precisely with xosview,  
-as xosview itself causes a scheduling perturbation. (__H. Peter  
-Anvin__)  
-  
-  
-And __Rik van Riel__ tell us why:  
-  
-The answer is pretty simple. Basically there are 3  
-processes involved:  
-  
-  
-## the cpu hog (low scheduling priority because it eats CPU)  
-##  
-  
-## xosview  
-##  
-  
-## X  
-##  
-  
-  
-  
-The CPU hog is running on one CPU. Then xosview wakes up  
-(on the other CPU) and starts sending commands to X, which  
-wakes up as well.  
-  
-  
-Since both X and xosview have a much higher priority than  
-the CPU hog, xosview will run on one CPU and X on the other.  
-  
-  
-Then xosview stops running and we have an idle CPU --> Linux  
-moves the CPU hog over to the newly idle CPU (X is still  
-running on the CPU our hog was running on just before).  
-  
-  
-  
-  
-  
-  
-  
-  
-#  
-  
-# __How can I enable more than 1 process for my kernel compile?__  
-  
-  
-use:  
-----  
-  
-# make [[modules|zImage|bzImages] MAKE="make -jX"  
-where X=max number of processes.  
-WARNING: This won't work for "make dep".  
-  
-----  
-  
-  
-With a 2.2 like kernel, see also the file  
-/usr/src/linux/Documentation/smp.txt for specific instruction.  
-  
-  
-BTW, since running multiple compilers allows a machine with sufficient  
-memory to use use the otherwise wasted CPU time during I/O caused delays,  
-make MAKE="make -j 2" -j 2 actually helps even on uniprocessor  
-boxes (from __Ralf Baumlchle__).  
-  
-  
-  
-  
-#  
-  
-# __Why is the time given by the time command inaccurate?__  
-(from __Joel Marchand__)  
-  
-  
-In the 2.0 series, the result given by the time command is  
-false. The sum user+system is right *but* the spreading between user and  
-system time is false.  
-  
-  
-More precisely: "The explanation is, that all time spent in processors  
-other than the boot cpu is accounted as system time. If you time a  
-program, add the user time and the system time, then you timing will be  
-almost right, except for also including the system time that is  
-correctly accounted for" (__Jakob Oslashstergaard__).  
-  
-  
-This bug is corrected in 2.2 kernels.  
-  
-  
-  
-  
-  
-  
-  
-#  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-!!3.3 SMP Programming  
-  
-  
-  
-Section by __Jakob Oslashstergaard__.  
-  
-  
-This section is intended to outline what works, and what doesn't when  
-it comes to programming multi-threaded software for SMP Linux.  
-  
-  
-  
-  
-!Parallelization methods  
-  
-  
-  
-  
-  
-# POSIX Threads  
-#  
-  
-# PVM / MPI Message Passing Libraries  
-#  
-  
-# fork() -- Multiple processes  
-#  
-  
-  
-  
-Since both fork() and PVM/MPI processes usually do not share memory,  
-but either communicate by means of IPC or a messaging API, they will  
-not be described further in this section. They are not very specific  
-to SMP, since they are used just as much - or more - on uniprocessor  
-computers, and clusters thereof.  
-  
-  
-  
-  
-  
-Only POSIX Threads provide us with multiple threads sharing ressources  
-like - especially - memory. This is the thing that makes a SMP  
-machine special, allowing many processors to share their memory. To  
-use both (or more ;) processors of an SMP, use a kernel-thread  
-library. A good library is the  
-!LinuxThreads, a pthread library made by Xavier Leroy which is now  
-integrated with glibc2 (aka libc6). Newer Linux distributions  
-include this library by default, hence you do not have to  
-obtain a separate package to use kernel threads.  
-  
-  
-There are implementations of threads (and POSIX threads) that are  
-application-level, and do not take advantage of the kernel-threading.  
-These thread packages keep the threading in a single process,  
-hence do not take advantage of SMP. However, they are good for  
-many applications and tend to actually run faster than kernel-threads  
-on single processor systems.  
-  
-  
-Multi-threading has never been really popular in the UN*X world  
-though. For some reason, applications requiring multiple processes or  
-threads, have mostly been written using fork(). Therefore, when using  
-the thread approach, one runs into problems of incompatible (not  
-thread-ready) libraries, compilers, and debuggers. GNU/Linux is no  
-exception to this. Hopefully the next few sections will sched a little  
-light over what is currently possible, and what is not.  
-  
-  
-  
-  
-  
-  
-  
-!The C Library  
-  
-  
-Older C libraries are not thread-safe. It is very important that you  
-use GNU LibC (__glibc__), also known as __libc6__. Earlier  
-versions are, of course possible to use, but it will cause you much more  
-trouble than upgrading your system will, well probably :)  
-  
-  
-If you want to use GDB to debug your programs, see below.  
-  
-  
-  
-  
-!Languages, Compilers and debuggers  
-  
-  
-There is a wealth of programming languages available for GNU/Linux,  
-and many of them can be made to use threads one way or the other  
-(some languages like Ada and Java even have threads as primitives in  
-the language).  
-  
-  
-This section will, however, currently only describe C and C++. If you  
-have experience in SMP Programming with other languages, please  
-enlighten us.  
-  
-  
-GNU C and C++, as well as the EGCS C and C++ compilers work with the  
-thread support from the standard C library (__glibc__). There are  
-however a few issues:  
-  
-  
-  
-  
-  
-# When compiling C or C++, use the __-D_REENTRANT__ define  
-in the compiler command line. This is necessary to make certain  
-error-handling functions work like the errno variable.  
-  
-#  
-  
-# When using C++, If two threads throw exceptions concurrently, the  
-program will segfault. The compiler does not generate thread-safe  
-exception code.  
-The workaround is to put a  
-pthread_mutex_lock(&global_exception_lock) in the constructor(s) of  
-every class you throw(), and to put the corresponding  
-pthread_mutex_unlock(...) in the destructor. It's ugly, but it works.  
-This solution was given by __Markus Ferch__.  
-  
-#  
-  
-  
-  
-The GNU Debugger __GDB__ as of version 4.18, should handle threads  
-correctly. Most Linux distribution offer a patched, thread-aware gdb.  
-  
-  
-It is not necessary to patch __glibc__ in any way just to make it  
-work with threads. If you do not need to debug the software (this  
-could be true for all machines that are not development workstations),  
-there is no need to patch __glibc__.  
-  
-  
-Note that core-dumps are of no use when using multiple  
-threads. Somehow, the core dump is attached to one of the currently  
-running threads, and not to the program as a whole. Therefore,  
-whenever you are debugging anything, run it from the debugger.  
-  
-  
-__Hint:__ If you have a thread running haywire, like eating 100%  
-CPU time, and you cannot seem to figure out why, here is a nice way to  
-find out what's going on: Run the program straight from the shell, no  
-GDB. Make the thread go haywire. Use __top__ to get the PID of  
-the process. Run GDB like __gdb program pid__. This will make  
-GDB attach itself to the process with the PID you specified, and stop  
-the thead. Now you have a GDB session with the offending thread, and  
-can use __bt__ and the like to see what is happening.  
-  
-  
-  
-  
-!Other libraries  
-  
-  
-__!ElectricFence:__ This library is not thread safe. It should  
-be possible, however, to make it work in SMP environments by inserting  
-mutex locks in the !ElectricFence code.  
-  
-  
-  
-  
-  
-  
-  
-!Other points about SMP Programming  
-  
-  
-  
-  
-  
-# __Where can I found more information about parallel  
-programming?__  
-  
-  
-Look at the  
-Linux Parallel Processing HOWTO  
-  
-Lots of useful information can be found at  
-Parallel Processing using Linux  
-  
-Look also at the  
-Linux Threads FAQ  
-  
-  
-  
-#  
-  
-# __Are there any threaded programs or libraries?__  
-  
-  
-Yes. For programs, you should look at:  
-Multithreaded programs on linux (I love hyperlinks, did  
-you know that ? ;))  
-  
-  
-As far as library are concerned, there are:  
-  
-  
-  
-  
-; __OpenGL Mesa library__:  
-  
-Thanks to __David Buccarelli__,  
-__Andreas Schiffler__ and __Emil Briggs__, it exists in a  
-multithreaded version (right now [[1998-05-11], there is a working  
-version that provides speedups of 5-30% on some OpenGL benchmarks). The  
-multithreaded stuff is now included in the regular Mesa distribution as  
-an experimental option. For more information, look at the  
-Mesa library  
-  
-  
-; __BLAS__:  
-  
-  
-Pentium Pro Optimized BLAS and FFTs for Intel Linux  
-  
-Multithreaded BLAS routines are not available right now, but a dual proc  
-library is planned for 1998-05-27, see  
-Blas News for details.  
-  
-  
-  
-; __The GIMP__:  
-  
-__Emil Briggs__, the same guy who is involved in  
-multithreaded Mesa, is also working on multithreaded The GIMP  
-plugins. Look at  
-http://nemo.physics.ncsu.edu/~briggs/gimp/index.html for more  
-info.  
-  
-  
-  
-  
-  
-  
-  
-  
-#  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-----  
-  
-!!4. x86 architecture specific questions  
-  
-  
-  
-  
-!!4.1 Why it doesn't work on my machine?  
-  
-  
-  
-  
-  
-  
-# __Can I use my Cyrix/AMD/non-Intel CPU in SMP?__  
-  
-  
-__Short answer:__ no.  
-  
-  
-__Long answer:__ Intel claims ownership to the APIC SMP scheme, and  
-unless a company licenses it from Intel they may not use it. There are  
-currently no companies that have done so. (This of course can change in  
-the future) FYI - Both Cyrix and AMD support the non-proprietary OpenPIC  
-SMP standard but currently there are no motherboards that use it.  
-  
-  
-  
-  
-#  
-  
-# __Why doesn't my old Compaq work?__  
-  
-  
-Put it into MP1.1/1.4 compliant mode.  
-  
-  
-check "Configure Hardware" -> "View / Edit details" -> "Advanced mode"  
-(F7 I think) for a configuration option "APIC mode" and set this to  
-"full Table mode". This is an official Compaq  
-recommandation. (__Daniel Roesen__)  
-  
-  
-(__Adrian Portelli__)To do this:  
-  
-  
-## Press F10 when the server boots to enter the System Configuration Utility  
-##  
-  
-## Press Enter to dismiss the splash screen  
-##  
-  
-## Immediately press CTRL+A  
-##  
-  
-## A message will appear informing you that you are now in "Advanced Mode"  
-##  
-  
-## Then select "Configure Hardware" -> "View / Edit details"  
-##  
-  
-## You will then see the advanced settings (intermixed with the ordinary ones)  
-##  
-  
-## Stroll down to "APIC Mode" and then select "Fully Mapped"  
-##  
-  
-## Save changes and reboot  
-##  
-  
-  
-  
-  
-  
-#  
-  
-# __Why doesnt my ALR work?__  
-  
-  
->From __Robert Hyatt__ : ALR Revolution quad-6 seems quite safe,  
-while some older revolution quad machines without P6 processors seem  
-"iffy"...  
-  
-  
-  
-  
-#  
-  
-# __Why does SMP go so slowly?__ or __Why does one CPU show  
-a very low bogomips value while the first one is normal?__  
-  
-  
->From __Alan Cox__: If one of your CPU's is reporting a very low  
-bogomips value the cache is not enabled on it. Your vendor probably  
-provides a buggy BIOS. Get the patch to work around this or better yet  
-send it back and buy a board from a competent supplier.  
-  
-  
-A 2.0 kernel (> 2..36) contains the MTRR patch which should solve this  
-problem (select option "Handle buggy SMP BIOSes with bad MTRR setup" in  
-the "General setup" menu).  
-  
-  
-I think buggy SMP BIOS handling is automatic in latest 2.2 kernels.  
-  
-  
-  
-  
-#  
-  
-# __I've heard IBM machines have problems__  
-  
-  
-Some IBM machines have the MP1.4 bios block in the EBDA, allowed but not  
-supported below 2.2 kernels.  
-  
-  
-There is an old 486SLC based IBM SMP box. Linux/SMP requires hardware  
-FPU support.  
-  
-  
-  
-  
-#  
-  
-# __Is there any advantage of Intel MP 1.4 over 1.1 specification?__  
-  
-  
-Nope (according to Alan :) ), 1.4 is just a stricker specs of 1.1.  
-  
-  
-  
-  
-#  
-  
-# __Why does the clock drift so rapidly when I run linux SMP?__  
-  
-  
-  
-This is known problem with IRQ handling and long kernel locks in  
-the 2.0 series kernels. Consider upgrading to a later 2.2 kernel.  
-  
-  
->From __Jakob Oestergaard__: Or, consider running xntpd. That should  
-keep your clock right on time. (I think that I've heard that enabling  
-RTC in the kernel also fixes the clock drift. It works for me! but I'm  
-not sure whether that's general or I'm just being lucky)  
-  
-  
-  
-  
-  
-There are some kernel fixes in the later 2.2.x series that may  
-fix this.  
-  
-  
-  
-  
-  
-  
-  
-#  
-  
-# __Why are my CPU's numbered 0 and 2 instead of 0 and 1 (or some other odd  
-numbering)?__  
-  
-  
-The CPU number is assigned by the MB manufacturer and doesn't mean  
-anything. Ignore it.  
-  
-  
-  
-  
-  
-  
-  
-#  
-  
-# __My quad-Xeon system hangs as soon as it has decompressed the  
-kernel__  
-  
-  
-(__Doug Ledford__) Try recompiling LILO with LARGE_EBDA support  
-and then making sure to always use make bzImage when compiling the  
-kernel. That appears to have fixed the SMP boot hangs here on Intel  
-multi-Xeon boards. However, please note that this also appears to break  
-LILO in that the root= option no longer works, so make sure you rdev  
-your kernel image at the same time you run lilo to make sure that the  
-kernel loads the correct root filesystem at boot.  
-  
-  
-(__Robert M. Hyatt__) With 3 cpus, do you have a terminator in the  
-4th slot?  
-  
-  
-  
-  
-#  
-  
-# __During boot machine hang signaling an IOAPIC problem__  
-  
-  
-Try boot options "noapic" (__John Aldrich__) and/or "reboot=bios" (__Terry Shull__).  
-  
-  
-  
-  
-#  
-  
-# __My system locks up during heavy NFS traffic__  
-  
-  
-Try the later 2.2.x kernels and the knfsd patches. This is  
-currently under investigation. (__Wade Hampton__)  
-  
-  
-  
-  
-  
-  
-  
-#  
-  
-# __My system locks up with no oops messages__  
-  
-  
-If you are using kernels 2.2.11 or 2.2.12, get the latest kernel. For  
-example 2.2.13 has a number of SMP fixes. Several people have reported  
-these kernels to be unstable for SMP. These same kernels may have NFS  
-problems that can cause lockups. Also, use a serial console to capture  
-your oops messages. (__Wade Hampton__)  
-  
-  
-If the problem remains (and the other suggestions on this list didn't  
-help either), then you could try the latest 2.3 kernels. They have more  
-verbose (and more robust) SMP/APIC code, and automatic  
-hard-lockup-prevention code which will produce meaningful oopses instead  
-of a silent hang. (__Ingo Molnar__)  
-  
-  
-(__Osamu Aoki__) You MUST also ''disable'' all BIOS related  
-power save features. Example of good configuration (Dual Celeron 466  
-Abit BP6):  
-----  
-  
-POWER MANAGEMENT SETUP.  
-ACPI: Disabled  
-POWER MANAGEMENT: Disabled  
-PM CONTROL by APM: No  
-  
-----  
-If power management features are activated, some random freeze can occur.  
-  
-  
-  
-  
-#  
-  
-# __Debugging lockups__  
-  
-  
-(item by __Wade Hampton__)  
-  
-  
-A good means of debugging lockups is to get the ikd patch from  
-Andrea Arcangeli:  
-ftp://ftp.suse.com/pub/people/andrea/kernel-patches  
-  
-There are several of debug options, but do NOT use the  
-soft lockup option! For newer SMP boxes,  
-turn kernel debugging then turn on the NMI oopser.  
-To verify that the NMI oopser is working, after booting the  
-new kernel,  
-/cat /proc/interrupts and verify that you are getting  
-NMIs. When the box locks up, you should get an OOPS.  
-  
-  
-You may also try the %eip option. This allows the kernel  
-to print on the console the %eip address every time a kernel function  
-is called. When the box locks up, write down the first column  
-ordered by the second column then lookup the addresses in the  
-System.map file. This works only in console mode.  
-  
-  
-Also note that the use of a serial console can greatly facilitate  
-debugging kernel lockups, not just SMP kernel lockups!  
-  
-  
-  
-  
-#  
-  
-# __"APIC error interrupt on CPU#n, should never happen" messages  
-in logs__  
-  
-  
-A message like:  
-----  
-  
-APIC error interrupt on CPU#, should never happen.  
-... APIC ESR0: 00000002  
-... APIC ESR1: 00000000  
-  
-----  
-indicates a 'receive checksum error'. This cannot be caused by Linux as  
-the APIC message checksumming part is completely in hardware. It might  
-be marginal hardware. As long as you dont see any instability, they are  
-not a problem - APIC messages are retried until delivered. (__Ingo  
-Molnar__)  
-  
-  
-  
-  
-#  
-  
-  
-  
-  
-  
-  
-  
-  
-!!4.2 Possible causes of crash  
-  
-  
-  
-In this section you'll find some __possible__ reasons for a crash  
-of an SMP machine (credits are due to __Jakob Oslashstergaard__ for  
-this part). As far as I (David) know, theses problems are Intel  
-specific.  
-  
-  
-  
-  
-  
-  
-  
-  
-* __Cooling problems__  
-  
-  
->From __Ralf Baumlchle__: [[Related to case size and fans]  
-It's important that the air is flowing. It of course can't where cables  
-etc. are preventing this like in too small cases. On the other side  
-I've seen oversized cases causing big problems. There are some tower  
-cases on the market that actually are worse for cooling than desktops.  
-In short, the right thing is thinking about aerodynamics in the case.  
-Extra cases for hot peripherals are usefull as well.  
-  
-  
-Of course you can always go to Radio Shack (or similar) and get another fan.  
-You can use the lm_sensors to monitor the CPU temperature of newer PII  
-and PIII processors. This might help you to determine if heat is  
-a problem. (__Wade Hampton__)  
-  
-  
-  
-  
-  
-  
-  
-*  
-  
-* __Bad memory__  
-  
-  
-Don't buy cheap RAM and don't use mixed RAM modules on a motherboard  
-that is picky about it.  
-  
-  
-Especially Tyan motherboards are known to be picky about RAM speed.  
-  
-  
-  
-  
-  
-There have been some report of 10ns PC100 RAM being sold with  
-motherboards where the CPU really needs 8ns RAM. (__Wade Hampton__)  
-  
-  
-  
-  
-  
-  
-  
-*  
-  
-* __Bad combination of different stepping CPUs__  
-  
-  
-Check /proc/cpuinfo to see that your CPUs are same stepping.  
-  
-  
-  
-  
-*  
-  
-* __If your system is unstable, then DON'T overclock it!__  
-  
-  
-...and even if it is stable, DON'T overclock.  
-  
-  
->From __Ralf Baumlchle__: Overclocking causes very subtle  
-problems. I have a nice example, one of my overclocked old machines  
-misscomputes a couple of pixels of a 640 x 400 fractal. The problem is  
-only visible when comparing them using tools. So better say ''never,  
-nuncas, jamais, niemals'' overclock.  
-  
-  
-  
-  
-  
-  
-  
-*  
-  
-* __2..x kernel and fast ethernet__ (from __Robert G. Brown__)  
-  
-  
-2..x kernels on high performance fast ethernet systems have significant  
-(and known) problems with a race/deadlock condition in the networking  
-interrupt handler.  
-  
-  
-The solution is to get the latest 100BT development drivers from  
-CESDIS Linux Ethernet device drivers site (ones that define  
-SMPCHECK).  
-  
-  
-  
-  
-*  
-  
-* __A bug in the 440FX chipset__ (from __Emil Briggs__)  
-  
-  
-If you had a system using the 440FX chipset then your problem with the  
-lockups was possibly due to a documented errata in the chipset. Here is  
-a reference  
-  
-  
-References:  
-Intel 440FX PCIset 82441FX (PMC) and 82442FX (DBX) Specification Update.  
-pg. 13  
-  
-  
-  
-http://www.intel.com/design/pcisets/specupdt/297654.htm  
-  
-The problem can be fixed with a BIOS workaround (Or a kernel patch) and  
-in fact David Wragg wrote a patch that's included with Richard Gooch's  
-MTTR patch. For more information and a fix look here:  
-  
-  
-  
-http://nemo.physics.ncsu.edu/~briggs/vfix.html  
-  
-  
-  
-*  
-  
-* __DONT run emm386.exe before booting linux SMP__  
-  
-  
->From __Mark Duguid__, dumb rule #1 with W6LI  
-motherboards. ;)  
-  
-  
-  
-  
-*  
-  
-* __If the machine reboots/freezes after a while, there can be two good  
-BIOS + memory related reasons__ (from __Jakob Oslashstergaard__)  
-  
-  
-** If the BIOS has settings like "memory hole at 16M" and/or  
-"OS/2 memory > 64MB", try disabling them both. Linux does  
-not always react well with theese options.  
-**  
-  
-** If you have more than 64 MB of memory in the machine, and you  
-specified the exact number manually in the LILO configuration,  
-you should specify one MB less than you actually have in the  
-machine. If you have 128 MB, you lilo.conf line looks like:  
-append="mem=127M"  
-**  
-  
-  
-*  
-  
-* __Be aware of IRQ related problems__  
-  
-  
-Sometime, some cards are not recognized or can trigger IRQ  
-conflicts. Try shuffling cards on slots in different ways and  
-possibly moving them to different IRQs.  
-  
-  
-Contributed by __hASCII__ : removing an " append="hisax=9,2,3""  
-line in lilo.conf allowed using a kernel from the 2.1.xx series with  
-activated ISDN + Hisax support. Kernels from the 2..xx series doesn't  
-make problems like this.  
-  
-  
-Try also to set BIOS setup option like "MP 1.4 mode" or "route PCI  
-interrupts through IOAPIC", or "OS Type" not set to DOS neither  
-Novell (__Ingo Molnar__).  
-  
-  
-  
-  
-  
-  
-  
-*  
-  
-* __Floppy access while sound is active__  
-  
-  
-If you lockup when trying to access the floppy (for example  
-while sound is playing) you may have to edit drivers/pci/quirks.c  
-and set /int isa_dma_bridge_buggy = 1;  
-This is a problem with my Dell WS400 dual PII/300, 2.2.x, SMP  
-(__Wade Hampton__).  
-  
-  
-  
-  
-*  
-  
-  
-  
-  
-  
-  
-  
-  
-!!4.3 Motherboard specific information  
-  
-  
-  
-''Please note'': Some more specific information can be found with  
-the list of  
-Motherboards rumored to run Linux SMP  
-  
-  
-  
-!Motherboards with known problems  
-  
-  
-  
-  
-  
-* none right now  
-*  
-  
-  
-  
-  
-  
-  
-  
-  
-!!4.4 Low cost SMP Linux box (dual Celeron box)  
-  
-  
-  
-(__Steacutephane Eacutecolivet__)  
-  
-  
-  
-  
-  
-The lowest cost SMP Linux boxes with nowadays buyable processors are  
-dual Celeron systems. Such a system is not officially possible  
-according to Intel. Better think about the second generation of  
-Celeron, those with 128 Kb L2 cache.  
-  
-  
-  
-  
-!Is it possible to run a dual Intel Celeron box ?  
-  
-  
-__Official answer from Intel:__ no, Celeron cannot work in SMP mode.  
-  
-  
-__Practical answer:__ it is possible, but requires hardware  
-alteration for Slot 1 processors. Alteration is described by Tomohiro  
-Kawada on his  
-Dual Celeron System page. Of  
-course, this kind of modification removes warranties... Some versions  
-of Celeron processor are also available in Socket 370 format. In that  
-case, alteration may just be done on the Socket 370 to Slot 1 adapter or  
-may even be sold pre-wired for SMP use. (__Andy Poling__, __Hans  
-- Erik Skyttberg__, __James Beard__)  
-  
-  
-There is also a motherboard (ABIT BP6) allowing two Celerons in Socket  
-370 format to be inserted (__Martijn Kruithof__, __Ryan  
-!McCue__). ABIT Computer BP6 verified tested and native to linux with  
-dual ppga socket 370 (__Andre Hedrick__).  
-  
-  
-  
-  
-!How does Linux behave on a dual Celeron system ?  
-  
-  
-Fine, thank you.  
-  
-  
-  
-  
-!Celeron processors are known to be easily overclockable. And dualCeleron system ?  
-  
-  
-It __may__ work. However, overclocking this kind of system is not  
-as easy as overclocking a mono-processor one. It is definitly not a good  
-idea for a production system. For personal use, dual Celeron 300A  
-systems running rock-solid at 450 MHz have been reported. (__numerous  
-people__)  
-  
-  
-  
-  
-!And making a quad Celeron system ?  
-  
-  
-It is impossible. Celeron processors have nearly the same features as  
-basic Pentium II chips. If you want more than 2 processors in your  
-system, you'll have to look at Pentium Pro, Pentium II Xeon or Pentium  
-III (?) boxes.  
-  
-  
-  
-  
-  
-  
-  
-!What about mixing Celeron and Pentium II processor ?  
-  
-  
-A system using a "re-enable" Celeron processor and a Pentium II  
-processor with the same steppings __may theorically__ work.  
-  
-  
-__Alexandre Charbey__ as made such a system:  
-  
-  
-* Asus P2B-D motherboard, proc 1: Celeron 366, proc 2: Pentium II  
-400@266  
-*  
-  
-* 66Mhz and 75Mhz bus frenquencies where functionnal  
-*  
-  
-* the fastest processor (in this case the Celeron) should be put on  
-the second slot. Swapping processors (fatest first) leads to quick  
-failure.  
-*  
-  
-  
-  
-  
-----  
-  
-!!5. Sparc architecture specific questions  
-  
-  
-  
-  
-  
-  
-  
-!!5.1 Which Sparc machines are supported ?  
-  
-  
-  
-Quoting the  
-!UltraLinux web  
-page (only SMP systems):  
-  
-  
-* UltraSPARC PCI based workstations: Ultra60, Ultra450  
-*  
-  
-* UltraSPARC SBUS based servers: Enterprise 1, 2, 150  
-*  
-  
-* UltraSPARC SBUS based large servers: Enterprise 3000, 4000, 5000, 6000, 10000  
-*  
-  
-* UltraSPARC PCI based servers: Enterprise 250, 450  
-*  
-  
-* SPARC sun4m SMP machines (__Anton Blanchard__)  
-*  
-  
-*  
-Starfire E10000  
-*  
-  
-  
-  
-!UltraLinux has ran on a 14 CPUs machine (see the  
-dmesg output) and on a  
-Starfire E10000 with 24 CPUs (see the  
-dmesg output).  
-  
-  
-  
-  
-!!5.2 Specific problem related to Sparc SMP support  
-  
-  
-  
-(__David Miller__)  
-There should not be any worries.  
-  
-  
-The only known problem, and one we don't intend to fix, is that if you  
-build an SMP kernel for 32-bit (ie. non-ultrasparc) systems, this kernel  
-will not work on sun4c systems.  
-  
-  
-  
-  
-!!5.3 SMP specific limit with current kernel (2.2)  
-  
-  
-  
-(__David Miller__) There is a bug in the include/linux/tasks.h  
-header file, it needs to define NR_CPUS to 64 on !UltraSparc as this is  
-the upper limit for the hardware we support :-)  
-  
-  
-  
-----  
-  
-!!6. PowerPC architecture specific questions  
-  
-  
-  
-  
-  
-  
-  
-!!6.1 Which PPC machines are supported ?  
-  
-  
-  
-  
-  
-  
-* !PowerSurge boards (including UMAX s900)  
-*  
-  
-* !PowerMac  
-*  
-  
-* Motorola MTX: support under developement. Patches not yet  
-integrated into the main kernel (__Troy Benjegerdes__)  
-*  
-  
-  
-  
-(__Cort Dougan__) Not supported: PPC RS/6000 systems  
-  
-  
-  
-  
-  
-  
-  
-!!6.2 Specific problem related to PPC SMP support  
-  
-  
-  
-Nothing. Usual SMP compiling (see above). As usual, be aware, modules  
-are specific either for UP or SMP. Recompile them. (__Paul  
-Mackerras__)  
-  
-  
-  
-----  
-  
-!!7. Alpha architecture specific questions  
-  
-  
-  
-  
-  
-  
-  
-!!7.1 Which Alpha machines are supported ?  
-  
-  
-  
-(__Geerten Kuiper__) SMP works for most, if not all, AXP servers.  
-  
-  
-(__Jay A Estabrook__) SMP does seem to work on most of our [[Compaq]  
-boxes with 2 or more CPUs. That includes :  
-  
-  
-* AS2000/2100 (SABLE)  
-*  
-  
-* AS4000/4100 (RAWHIDE)  
-*  
-  
-* DS20 (DP264)  
-*  
-  
-* GS320 (see the  
-bootlog for a 31 CPUs machine)  
-*  
-  
-  
-  
-It does not include :  
-  
-  
-* AS2100A (LYNX)  
-*  
-  
-* !TurboLaser bigboys (8200/8400)  
-*  
-  
-  
-  
-(__Alpha Processor Inc__) SMP support has been qualified for all API  
-SMP systems starting from later 2.2-series kernels (approximately kernel  
-2.2.7).  
-At the time of writing, that is :  
-  
-  
-* DP264  
-*  
-  
-* UP2000  
-*  
-  
-See  
-API's support website for more info.  
-  
-  
-  
-  
-!!7.2 Specific problem related to Alpha SMP support  
-  
-  
-  
-None (really ? :-)  
-  
-  
-  
-  
-  
-  
-----  
-  
-!!8. Useful pointers  
-  
-  
-  
-  
-!!8.1 Various  
-  
-  
-  
-  
-  
-  
-*  
-Parallel Processing using Linux  
-  
-*  
-  
-*  
-Linux Parallel Processing HOWTO  
-  
-*  
-  
-* __(outdated)__  
-Linux SMP home page  
-  
-*  
-  
-* linux-smp mailing list  
-  
-  
-To __subscribe__, send subscribe linux-smp in the message body  
-at  
-majordomo@vger.kernel.org  
-  
-To __unsubscribe__, send unsubscribe linux-smp in the message body at  
-majordomo@vger.kernel.org  
-  
-  
-Linux SMP archives  
-  
-  
-Linux SMP archives at progressive-comp.com  
-  
-  
-  
-  
-  
-  
-*  
-  
-*  
-pthread library made by Xavier Leroy  
-  
-*  
-  
-*  
-Motherboards rumored to run Linux SMP  
-  
-*  
-  
-*  
-procps  
-  
-*  
-  
-*  
-procps patch for 2.2.x  
-  
-*  
-  
-*  
-xosview  
-  
-*  
-  
-*  
-xosview for 2.2.x  
-  
-*  
-  
-*  
-SMP Performance of Linux  
-  
-*  
-  
-*  
-CESDIS Linux Ethernet device drivers site  
-  
-*  
-  
-*  
-Dual Celeron System  
-  
-*  
-  
-  
-  
-  
-  
-  
-  
-  
-!!8.2 Multithreaded programs and library  
-  
-  
-  
-  
-  
-  
-*  
-Linux Threads FAQ  
-  
-*  
-  
-*  
-Multithreaded programs on linux  
-  
-*  
-  
-*  
-Pentium Pro Optimized BLAS and FFTs for Intel Linux (not available right now,  
-but a dual proc library is planned for 5/27/98, see  
-Blas News for details)  
-  
-*  
-  
-*  
-Mesa library (with experimental  
-multi-threading)  
-  
-*  
-  
-*  
-Parallel plugins for The GIMP  
-  
-*  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-!!8.3 SMP specific patches  
-  
-  
-  
-  
-  
-  
-*  
-Patch for a bug in the 440FX chipset  
-  
-*  
-  
-*  
-PSET - Processor Sets for the Linux kernel  
-  
-*  
-  
-*  
-Ingo Molnar SMP patches (for experts only, please read  
-linux-smp@vger.kernel.org)  
-  
-*  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-!!8.4 Parallelizing/Optimizing Compilers for 586/686 machines  
-(__Sumit Roy__)  
-  
-  
-  
-  
-  
-*  
-Pentium Compiler Group creators of pgcc  
-  
-*  
-  
-*  
-Absoft , Fortran 90 and  
-Fortran 77 compilers  
-  
-*  
-  
-*  
-The Portland Group, Inc., supports the  
-OpenMP standard for Fortran parallelization on  
-Linux  
-  
-*  
-  
-*  
-Pacific-Sierra Research Corporation, has a free F90 compiler for Linux, as well  
-as parallelizing compilers for SMP Linux  
-  
-*  
-  
-*  
-Applied Parallel Research, currently have parallelizing  
-compilers for WinNT  
-  
-*  
-  
-*  
-KAI has a C++-Compiler for  
-Linux, that understands OpenMPI. It is called Guide_OpenMP. Info  
-under  
-http://www.kai.com/parallel/kappro/guide. (__Gero Wedemann__)  
-  
-*  
-  
-  
-  
-  
-  
-  
-  
-----  
-  
-!!9. Glossary  
-  
-!!9.1 Definitions  
-  
-  
-  
-  
-  
-  
-* __SMP__ Symmetric Multi-Processors.  
-  
-*  
-  
-* __UP__ Uni-Processor: system with one processor.  
-  
-*  
-  
-* __APIC__ Advanced Programmable Interrupt Controler.  
-  
-*  
-  
-* __thread__ A thread is a processor activity in a  
-process. The same process can have multiple threads. Those threads share  
-the process address space and can therefore share data.  
-  
-*  
-  
-* __pthread__ Posix thread, threads defined by the Posix  
-standard.  
-  
-*  
-  
-* __process__ Program in execution, with its environment.  
-  
-*  
-  
-* __MTRR__ Memory Type Range Register  
-  
-*  
-  
-* __APM__ Advanced Power Management.  
-  
-*  
-  
-* __FPU__ Floating Point Unit. Also called arithmetic  
-co-processor.  
-  
-*  
-  
-* __IRQ__ Interrupt !ReQuest.  
-  
-*  
-  
-* __EBDA__ ??  
-  
-*  
-  
-* __oops__ Internal kernel error.  
-  
-*  
-  
-* __Cluster__ Group of computers that achieve a common  
-computation (also known as Beowulf within the Linux community).  
-  
-*  
-  
-  
-  
-  
-  
-!!9.2 Concepts  
-  
-  
-  
-  
-  
-  
-* __Data Races__  
-  
-  
-A data race happens when to processes want to modify a shared variable  
-concurrently without protecting themselves from the effect of the other  
-process.  
-  
-  
-Let A a shared variable. Let P1 and P2 two processes that access this  
-variable. Those two processes are making the same following operation:  
-"read A in tmp variable (local to the precess); do tmp = tmp + 1 ; write  
-tmp in A". If the A variable is not protected by a lock, resulting  
-executions could not correspond to what is espected. For example, here  
-is two examples if one do not lock A:  
-  
-case #1:  
-A=  
-P1: read A -> tmp1 (so tmp1 is )  
-P2: read A -> tmp2 (so tmp2 is )  
-P1: tmp1 = tmp1 + 1 (so tmp1 is 1)  
-P2: tmp2 = tmp2 + 1 (so tmp2 is 1)  
-P1: tmp1 -> write A (so A is 1)  
-P2: tmp2 -> write A (so A is 1)  
-  
-  
-  
-  
-  
-case #2:  
-A=  
-P1: read A -> tmp1 (so tmp1 is )  
-P1: tmp1 = tmp1 + 1 (so tmp1 is 1)  
-P1: tmp1 -> write A (so A is 1)  
-P2: read A -> tmp2 (so tmp2 is 1)  
-P2: tmp2 = tmp2 + 1 (so tmp2 is 2)  
-P2: tmp2 -> write A (so A is 2)  
-  
-  
-  
-To avoid this kind of problem, one uses a lock:  
-  
-A=:  
-P1: lock A  
-P1: read A -> tmp1 (so tmp1 is )  
-P2: lock A (so P2 is blocked)  
-P1: tmp1 = tmp1 + 1 (so tmp1 is 1)  
-P1: tmp1 -> write A (so A is 1)  
-P1: unlock A (so P2 is unblocked)  
-P2: read A -> tmp2 (so tmp2 is 1)  
-P2: tmp2 = tmp2 + 1 (so tmp2 is 2)  
-P2: tmp2 -> write A (so A is 2)  
-P2: unlock A  
-  
-  
-  
-  
-  
-*  
-  
-* __Deadlock__  
-  
-  
-This is an inter-blocking that occurs when two processes want to access  
-at shared variables mutually locked. For example, let A and B two locks  
-and P1 and P2 two processes:  
-  
-  
-  
-  
-P1: lock A  
-P2: lock B  
-P1: lock B (so P1 is blocked by P2)  
-P2: lock A (so P2 is blocked by P1)  
-  
-Process P1 is blocked because it is waiting for the unlocking of B  
-variable by P2. However P2 also needs the A variable to finish its  
-computation and free B. So we have a deadlock.  
-  
-  
-In this example, the problem is very simple. But imagine what can happen  
-in a 2 millions of lines of code (like the linux kernel) with hundreds  
-of locks. :-)  
-  
-*  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-----  
-  
-!!10. What's new ?  
-  
-  
-  
-  
-  
-  
-  
-; __v1.12.1, 25 october 2000__:  
-  
-  
-  
-  
-* Put all authors in Bryant, Hartner, Qi and Venkitachalam paper  
-*  
-  
-  
-  
-  
-; __v1.12, 22 october 2000__:  
-  
-  
-  
-  
-* Explanation on why not trust Xosview on scheduling (__Rik van Riel__)  
-*  
-  
-* A pointer to an article that compares 2.2 and 2.4 kernels (__Ray Bryant__)  
-*  
-  
-  
-  
-  
-; __v1.11, 8 october 2000__:  
-  
-  
-  
-  
-* Linux boots on a Sun E1000 with 24 CPUs  
-*  
-  
-* Linux boots on a !AlphaServer with 31 CPUs  
-*  
-  
-  
-  
-  
-; __v1.10, 5 october 2000__:  
-  
-  
-  
-  
-* New linux-smp mailing-list adress : linux-smp@vger.kernel.org  
-(me)  
-*  
-  
-* Tell where to find RTC setting in kernel config (__Patrick  
-Doyle__)  
-*  
-  
-* glossary updated and concepts added (from a french version made  
-by __Ludovic Danigo__)  
-*  
-  
-* Fixed an inconsistency (__Matthias Schniedermeyer__)  
-*  
-  
-* Deleted wrong links (__Johan Ekenberg__)  
-*  
-  
-  
-  
-  
-; __v1.9.1, 28 September 2000__:  
-  
-  
-  
-  
-* updated with a submission from __Stig Telfer__ detailing SMP support  
-on API Alpha systems  
-*  
-  
-  
-  
-  
-  
-  
-  
-; __v1.9, 13 january 2000__:  
-  
-  
-  
-  
-* Remember to disable all BIOS power-save features (__Osamu  
-Aoki__)  
-*  
-  
-* Explain how to access to Compaq server into advanced  
-configuration mode (__Adrian Portelli__)  
-*  
-  
-  
-  
-  
-; __v1.8, 8 november 1999__:  
-  
-  
-  
-  
-* quad-celeron motherboard was a hoax, restored old paragraph  
-(__Simen Timian Thoresen__)  
-*  
-  
-  
-  
-  
-; __v1.7, 6 november 1999__:  
-  
-  
-  
-  
-* new introduction (__C. Polisher__ aka cp)  
-*  
-  
-* numerous typo and grammatical fixes (cp)  
-*  
-  
-* introductory paragraph on kernel compilation (cp)  
-*  
-  
-* introductory paragraph on SMP need (cp)  
-*  
-  
-* reference on KAI optimizing compiler (__Gero Wedemann__)  
-*  
-  
-* quad-celeron motherboard exists (__Jeffrey H. Ingber__)  
-*  
-  
-  
-  
-  
-; __v1.6, 21 october 1999__:  
-  
-  
-  
-  
-* added information on xosview scheduling perturbation  
-*  
-  
-* added "APIC error interrupt on CPU#n" message information  
-*  
-  
-* added information on hard lockup  
-*  
-  
-* deleted section "How to optain maximum performance" (was  
-obsolete)  
-*  
-  
-* added info on dual systems with different x86 procs (a Celeron  
-and a P-II)  
-*  
-  
-  
-  
-  
-; __v1.5, 4 october 1999__:  
-  
-  
-  
-  
-* more precision in PSET description  
-*  
-  
-  
-  
-  
-; __v1.4, 30 september 1999__:  
-  
-  
-  
-  
-* precize to enable MTRR support for an x86 SMP kernel (me)  
-*  
-  
-  
-  
-  
-; __v1.3, 29 september 1999__:  
-  
-  
-  
-  
-* many many grammar and typographical fixes (__Wade Hampton__  
-aka hww)  
-*  
-  
-* added info in short introduction related to 2.2/2.4/2.0 diffs (hww)  
-*  
-  
-* added step by step things to do to recompile a kernel (hww and me)  
-*  
-  
-* added info related to SMP/UP modules problems (hww)  
-*  
-  
-* added precision in Posix Threads section related to user (hww)  
-vs. kernel threads (hww)  
-*  
-  
-* new item about NFS and kernel lock (hww)  
-*  
-  
-* new item about kernel lock without message (hww)  
-*  
-  
-* new item about debugging lockup problems (hww)  
-*  
-  
-* added info about heating problems (hww)  
-*  
-  
-* miscellaneous updates I've forget about (hww)  
-*  
-  
-* new item about floppy access and sound (hww)  
-*  
-  
-  
-  
-  
-; __v1.2, 27 septembre 1999__:  
-  
-  
-  
-  
-* name change: this document is now a HOWTO. TWD, and fast! (__Guylhem Aznar__)  
-*  
-  
-  
-  
-  
-; __v1.1, 26 septembre 1999__:  
-  
-  
-  
-  
-* added a link to first Chris Pirih FAQ draft  
-*  
-  
-* expanted an IRQ related problems  
-*  
-  
-  
-  
-  
-; __v1.00, 25 septembre 1999__:  
-  
-  
-  
-  
-* first upgrade in a long long time!  
-*  
-  
-* reprocessed the whole FAQ: 2.2 is here and 2.4 soon  
-*  
-  
-* added kernel locking information from Ingo Molnar  
-*  
-  
-* deleted item "How will my application perform under SMP?": outdated  
-*  
-  
-* deleted item "My SMP system is locking up all the time.":  
-outdated  
-*  
-  
-* deleted item "You are running 2..35 aren't you ?": outdated  
-*  
-  
-* deleted item "Some hardware is also known to cause problems.":  
-outdated  
-*  
-  
-* blanked section "Motherboards with known problems". We should  
-restart from scratch  
-*  
-  
-* deleted section "Motherboards with NO known problems": outdated  
-*  
-  
-* updated dual celeron section (numerous people)  
-*  
-  
-* added "SPARC sun4m SMP machines" to supported SMP sparc machines  
-(__Anton Blanchard__)  
-*  
-  
-* added a "During boot machine hang signaling an IOAPIC problem"  
-item in "Why it doesn't work on my machine?" section  
-*  
-  
-* added a "What about SMP performances?" item  
-*  
-  
-* updated "Why doesn't my old Compaq work?" item  
-*  
-  
-* fixed an outdated pointer  
-*  
-  
-* added a pointer to Ingo test SMP patches  
-*  
-  
-  
-  
-  
-; __v0.54, 13 march 1999__:  
-  
-  
-  
-  
-* Added a section about SMP Alpha systems  
-*  
-  
-  
-  
-  
-; __v0.53, 08 march 1999__:  
-  
-  
-  
-  
-* Added a section about SMP PowerPC systems  
-*  
-  
-  
-  
-  
-; __v0.52, 07 march 1999__:  
-  
-  
-  
-  
-* Added a section about SMP Sparc systems  
-*  
-  
-  
-  
-  
-; __v0.51, 06 march 1999__:  
-  
-  
-  
-  
-* Added a dual-celeron section  
-*  
-  
-* Deleted Adaptec section  
-*  
-  
-* Updated procps link  
-*  
-  
-* Updated xosview link  
-*  
-  
-* Added an answer for quad Xeon boot hang  
-*  
-  
-* Updated item about glibc patch for gd: should be included in RH 5.2  
-*  
-  
-  
-  
-  
-; __v0.50, 03 february 1999__:  
-  
-  
-  
-  
-* Updated "Multithreaded programs on linux" link  
-*  
-  
-  
-  
-  
-; __v0.49, 13 january 1999__:  
-  
-  
-  
-  
-* Update about CONFIG_SMP. Added .txt to  
-Documentation/smp. (__Michael Elizabeth Chastain__)  
-*  
-  
-  
-  
-  
-; __v0.48, 10 december 1998__:  
-  
-  
-  
-  
-* Mispelled corrected. Email address corrected.  
-*  
-  
-  
-  
-  
-; __v0.47, 20 november 1998__:  
-  
-  
-  
-  
-* Added that 2..36 as the MTRR patch (related to the !BogoMips problem)  
-*  
-  
-  
-  
-  
-; __v0.46, 10 november 1998__:  
-  
-  
-  
-  
-* Update about Epox KP6-LS motherboards  
-*  
-  
-  
-  
-  
-; __v0.45, 25 october 1998__:  
-  
-  
-  
-  
-* Corrected an error regarding /proc/stat file  
-*  
-  
-* Added a pointer to CESDIS Ethernet Linux Drivers site  
-*  
-  
-  
-  
-  
-; __v0.44, 14 october 1998__:  
-  
-  
-  
-  
-* Updated the link to the web page: ''Motherboards rumored to run  
-Linux SMP''  
-*  
-  
-* Added Jakob explanation how to time SMP systems with 2.0 kernels  
-*  
-  
-  
-  
-  
-; __v0.43, 9 september 1998__:  
-  
-  
-  
-  
-* Updated first question in section 3.1  
-*  
-  
-* Updated mt-Mesa link: multi-threaded is now included as  
-experimental in the Mesa distribution  
-*  
-  
-  
-  
-  
-; __v0.42, 2 september 1998__:  
-  
-  
-  
-  
-* Minor cosmetic update in sect 3.3  
-*  
-  
-* Two links (multithreaded Mesa and SMP performance) marked  
-outdated  
-*  
-  
-* Updated the item about threads and exceptions in C++ (sect 3.3)  
-*  
-  
-  
-  
-  
-; __v0.41, 1 september 1998__:  
-  
-  
-  
-  
-* Added a major section: "3.3 SMP Programming" written by Jakob  
-Oslashstergaard  
-*  
-  
-* moved some item of section "3.2 User side" in sect 3.3  
-*  
-  
-  
-  
-  
-; __v0.40, 27 august 1998__:  
-  
-  
-  
-  
-* Updated section 3.1, item 7: processor affinity  
-*  
-  
-  
-  
-  
-; __v0.39, 27 august 1998__:  
-  
-  
-  
-  
-* Updated needed Award BIOS version for Tyan motherboards  
-(__hASCII__)  
-*  
-  
-* Added an item on IRQ in the crash section (me and  
-__hASCII__)  
-*  
-  
-* Added good support of Asus P2B-DS (__Ulf Rompe__)  
-*  
-  
-* Added another smp-list archive in pointer section (__Hank Leininger__)  
-*  
-  
-  
-  
-  
-; __v0.38, 8 august 1998__:  
-  
-  
-  
-  
-* Added a pointer to the Linux Threads FAQ  
-*  
-  
-  
-  
-  
-; __v0.37, 30 July 1998__:  
-  
-  
-  
-  
-* __Emil Briggs__ is working on parallel plugins for Gimp (see  
-"Is there any threaded programs or library?", sect. "User side")  
-*  
-  
-  
-  
-  
-; __v0.36, 26 July 1998__:  
-  
-  
-  
-  
-* Thanks to __Jakob Oslashstergaard__, two changes in "Possible  
-causes of Crash"  
-  
-  
-** Changed 2..33 to 2..35 (latest stable)  
-**  
-  
-** Added a "BIOS related causes of failure"  
-**  
-  
-  
-*  
-  
-  
-  
-  
-; __v0.35, 14 July 1998__:  
-  
-  
-  
-  
-* Added N440BX Server Board in Motherboards with NO problems  
-*  
-  
-* Added a succes story for !GigaByte motherboard with BIOS upgrade  
-*  
-  
-* Added a "How to obtain maximum performance ?" section (waiting  
-for your contributions ;)  
-*  
-  
-  
-  
-  
-; __v0.34, 10 june 1998__:  
-  
-  
-  
-  
-* Added a "Parallelizing/Optimizing Compilers for 586/686 machines"  
-section in section "Useful Pointers", thanks to __Sumit Roy__  
-*  
-  
-* Corrected a mispelling, "Asus P/I-UP5" is in fact "Asus  
-P/I-P65UP5"  
-*  
-  
-  
-  
-  
-; __v0.33, 3 june 1998__:  
-  
-  
-  
-  
-* Yet another success story for a !GigaByte DLX Motherboard.  
-*  
-  
-* A tip for Tyan motherboards, disable the "DRAM Fast Leadoff" BIOS  
-option  
-*  
-  
-  
-  
-  
-; __v0.32, 27 may 1998__:  
-  
-  
-  
-  
-* Asus P/I-UP5 added in the motherboard-with-NO-problem section  
-*  
-  
-  
-  
-  
-; __v0.31, 18 may 1998__:  
-  
-  
-  
-  
-* Elitegroup P6LX2-A works with 2.1.100 and 101  
-*  
-  
-* Bugs should be reported to linux-smp@vger.rutgers.edu  
-*  
-  
-  
-  
-  
-; __v0.30, 12 may 1998__:  
-  
-  
-  
-  
-* !SuperMicro is now in the motherboard-with-NO-problem section  
-*  
-  
-  
-  
-  
-; __v0.29, 11 may 1998__:  
-  
-  
-  
-  
-* A success story for a !GigaByte 686 motherboard with 2.1.101  
-*  
-  
-* Added a new item in the "User Side" section: "Is there any  
-threaded programs or library?"  
-*  
-  
-* OpenGL Mesa library is beeing multithreaded. Cool! See the new  
-section for details.  
-*  
-  
-  
-  
-  
-; __v0.28, 09 may 1998__:  
-  
-  
-  
-  
-* A US mirror of this FAQ is now available (see Introduction)  
-*  
-  
-* Merge of the two confusing Gigabyte 686 entries  
-*  
-  
-  
-  
-  
-; __v0.27, 05 may 1998__:  
-  
-  
-  
-  
-* New info for the Adaptec and !TekRam drivers  
-*  
-  
-* Micronics W6-LI motherboard works under SMP  
-*  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-----  
-  
-!!11. List of contributors  
-  
-  
-Many thanks to those who help me to maintain this HOWTO:  
-  
-  
-  
-  
-  
-# Tigran A. Aivazian  
-#  
-  
-# John Aldrich  
-#  
-  
-# Niels Ammerlaan  
-#  
-  
-# H. Peter Anvin  
-#  
-  
-# Osamu Aoki  
-#  
-  
-# Guylhem Aznar  
-#  
-  
-# Ralf Baumlchle  
-#  
-  
-# James Beard  
-#  
-  
-# Troy Benjegerdes  
-#  
-  
-# Anton Blanchard  
-#  
-  
-# Emil Briggs  
-#  
-  
-# Robert G. Brown  
-#  
-  
-# Ray Bryant  
-#  
-  
-# Alexandre Charbey  
-#  
-  
-# Michael Elizabeth Chastain  
-#  
-  
-# Samuel S. Chessman  
-#  
-  
-# Alan Cox  
-#  
-  
-# Andrew Crane  
-#  
-  
-# Cort Dougan  
-#  
-  
-# Patrick Doyle  
-#  
-  
-# Mark Duguid  
-#  
-  
-# Steacutephane Eacutecolivet  
-#  
-  
-# Johan Ekenberg  
-#  
-  
-# Jocelyne Erhel  
-#  
-  
-# Jay A Estabrook  
-#  
-  
-# Byron Faber  
-#  
-  
-# Mark Garlanger  
-#  
-  
-# hASCII  
-#  
-  
-# Wade Hampton  
-#  
-  
-# Andre Hedrick  
-#  
-  
-# Claus-Justus Heine  
-#  
-  
-# Benedikt Heinen  
-#  
-  
-# Florian Hinzmann  
-#  
-  
-# Moni Hollmann  
-#  
-  
-# Robert M. Hyatt  
-#  
-  
-# Jeffrey H. Ingber  
-#  
-  
-# Richard Jelinek  
-#  
-  
-# Tony Kocurko  
-#  
-  
-# Geerten Kuiper  
-#  
-  
-# Martijn Kruithof  
-#  
-  
-# Doug Ledford  
-#  
-  
-# Kumsup Lee  
-#  
-  
-# Hank Leininger  
-#  
-  
-# Ryan !McCue  
-#  
-  
-# Paul Mackerras  
-#  
-  
-# Cameron !MacKinnon  
-#  
-  
-# Joel Marchand  
-#  
-  
-# David Maslen  
-#  
-  
-# Chris Mauritz  
-#  
-  
-# Jean-Francois Micouleau  
-#  
-  
-# David Miller  
-#  
-  
-# Ingo Molnar  
-#  
-  
-# Ulf Nielsen  
-#  
-  
-# Jakob Oestergaard  
-#  
-  
-# C Polisher  
-#  
-  
-# Adrian Portelli  
-#  
-  
-# Matt Ranney  
-#  
-  
-# Daniel Roesen  
-#  
-  
-# Ulf Rompe  
-#  
-  
-# Jean-Michel Rouet  
-#  
-  
-# Volker Reichelt  
-#  
-  
-# Sean Reifschneider  
-#  
-  
-# Rik van Riel  
-#  
-  
-# Sumit Roy  
-#  
-  
-# Thomas Schenk  
-#  
-  
-# Matthias Schniedermeyer  
-#  
-  
-# Terry Shull  
-#  
-  
-# Chris K. Skinner  
-#  
-  
-# Hans - Erik Skyttberg  
-#  
-  
-# Szakacsits Szabolcs  
-#  
-  
-# Jukka Tainio  
-#  
-  
-# Stig Telfer  
-#  
-  
-# Simen Timian Thoresen  
-#  
-  
-# El Warren  
-#  
-  
-# Gregory R. Warnes  
-#  
-  
-# Gero Wedemann  
-#  
-  
-# Christopher Allen Wing  
-#  
-  
-# Leonard N . Zubkoff  
-#  
-  
-  
-  
-  
-----  
+Describe [HowToSMPHOWTO ] here.