Scalability and Symmetric Multiprocessing

The Linux kernel offers a high scalability level. It's modular and

fast. Additionally, it has a small memory footprint and a clever

virtual memory system. This is why Linux is used on a variety of

platforms, ranging from the smallest embedded systems, through ordinary

PCs, to multi-user servers. One of the most important kernel features

is Symmetric Multiprocessing (SMP) support. Multiprocessing is hardly

new -- multiprocessor machines have been around for decades. However,

it used to be very expensive, asymmetric, and relied on special

hardware architectures. With the emergence of the SMP architecture

several years ago, multiprocessing has become more widespread. SMP is

one of the most challenging aspects in the design of a modern operating

system. In fact, many of the delays in the release of kernel 2.4 were

attributed to SMP enhancements. What is so special about SMP and why is

it so difficult to design a good SMP kernel?

First, let's have a quick overview of this architecture. SMP relies on

three basic principles:

* Multiprocessing: This means that the system consists of multiple

identical CPUs.

* Symmetry: Each CPU has an identical view of the system and has

the same capabilities.

* Singularity: Except for the CPU and their caches, everything else

is single: there's a single memory system, a single kernel, and a

single run queue.

In an SMP-enabled environment, threads and processes have no affinity

to a particular CPU. In one time-slice, the same thread may execute on

CPU #1 and on another time-slice, it may execute on CPU #2. Seemingly,

a two-processor machine can be twice as fast compared to a uniprocessor

machine. In practice, however, the scalability gain is even lower

because other resources such as memory, I/O buses, and the kernel

itself -- are still shared. Furthermore, most algorithms are fully or

partially sequential (single-threaded) by nature, and so are system

calls, memory access routines, and synchronized operations. Therefore,

there is an upper limit to the speedup increase that you can get from

multiprocessing - no matter how many processors your machine has. That

said, with every release, the Linux kernel scales better in terms of

the number of processors supported and the scheduling algorithm.

Release 2.4 will probably support 16 processors. Future releases may

reach 64 and even 256 processors.

Insider: How the basic tech behind the Internet works
Join the discussion
Be the first to comment on this article. Our Commenting Policies