Penguin
Note: You are viewing an old revision of this page. View the current version.

A system with multiple identical CPUs having equal access to memory and to the IO? subsytem(s). Contrast NUMA and AsymmetricMultiProcessing.

StuartYeates writes that they may be only nearly identical. However, such setups are extremly rare to the point of irrelevance. In practice, all SMP systems run with setups such as dual-Opteron, quad-Xeon, dual-PowerPC, or others, where the CPUs are perfectly identical. --AristotlePagaltzis

It is an accepted rule of thumb that due to the InterProcessCommunication "friction" required to synchronize tasks across CPUs, each additional CPU contributes about 1/6 less performance than the previous one. As a result, fitting more than four CPUs in a machine tends to cost heaps of money with surprisingly little to show for it.

On the OperatingSystem level, there is a wide span for the degree of symmetry expressed. On a fully symmetric system, any CPU may run any userland process, any kernel process, and any interrupt handler. This is rare in practice due to limitations in various platforms -- most of the time, the interrupt handler can only be run by the first CPU. In simpler OperatingSystems, this is also the only CPU that may kernel tasks. In yet simpler system designs, even user processes are assigned to a fixed CPU and cannot move among CPUs.

In practice, a less symmetric system OperatingSystem design may not be a drawback. It is desirable to tie processes to a certain CPU as long the system load is evenly distributed among CPUs, because this maximizes the efficiency of CPU caches. Even in a completely symmetric system, an intelligently written scheduler will take this into account and try not to shuffle tasks around needlessly.

Applications have to be explicitly designed to exploit the additional processing power available in an SMP system. This is not often the case. It only commonly applies to multithreaded applications, which are common in the Java world1? where the GUI, GarbageCollection, and application logic will often run on sepreate CPUs.


1? What else can you do when all your IO? is blocking? At least there's nonblocking IO? in more recent versions, but of course the new classes add yet another layer to the already byzantine library.