How PAE relates to SMP in the Linux kernel

Reading the latest Linux Mint release post, I noticed the following warning for 32-bit systems with multi-core and multi-cpu:

To guarantee compatibility with non-PAE processors, the 32-bit versions of Linux Mint Debian come with a 486 kernel by default. This kernel does not support SMP, and as a consequence ''is only able to detect one core and one CPU''. If your CPU has multiple cores, or if you have more than one CPU, simply install the 686-PAE kernel and reboot your computer.

The fact that the default kernel bundled with Linux Mint for 32-bit could not detect more than one core and one cpu, stating non-PAE processors as the reason, led me to deep into both PAE and multiprocessor/multicore support.

Understanding PAE

As far as I knew, PAE (Physical Address Extension) was a way of supporting ''more than 4 GB'' in a 32 bit system:

Physical Address Extension (PAE) is a feature to allow (32-bit) x86 processors to access a physical address space (including random access memory and memory mapped devices) larger than 4 gigabytes.

It's very interesting to note that the applications still get ''the same amount'' of virtual memory (What is PAE?):

The applications still get the same amount of virtual memory since the Virtual addresses are still 32 bits while the Physical Addresses are of 36 bits. Therefore PAE is not at all equivalent to a 64 bit system.

When you build the Linux kernel, there is an option called High Memory Support, where PAE support can be enabled by selecting "64GB". The other options are "off", in the case of ram size less or equal to 1GB, and "4GB" if between 1GB and 4GB. As a side note, I wonder what is the difference between "off" and "4GB" options... it's not clear in the documentation.

PAE was first implemented in the Intel Pentium Pro (belonging to the sixth generation of processors, i.e. 686).

Understanding SMP

Symmetric Multiprocessing (SMP) is a type of architecture where several processing units have access to the same memory. Besides, they are controlled by the same OS instance:

SMP systems allow any processor to work on any task no matter where the data for that task are located in memory, provided that each task in the system is not in execution on two or more processors at the same time; with proper operating system support, SMP systems can easily move tasks between processors to balance the workload efficiently.

It seems clear that if you have a multicore/multiprocessor system, the performance of an application will improve. Nevertheless, from Amdahl's Law we can expect an speedup not as big as one could imagine:

A problem that's 10% sequential and, therefore, 90% parallelizable will perform only slightly better with ten processors than with five.

Though, going from one processor to two or four will give you a considerable speedup if the program is parallelizable enough.

SMP support in the linux kernel can be enabled using the SMP option:

To make use of SMP with Linux on SMP-capable hardware, the kernel must be properly configured. The CONFIG_SMP option must be enabled during kernel configuration to make the kernel SMP aware. With an SMP-aware kernel running on a multi-CPU host, you can identify the number of processors and their type using the proc filesystem.

Conclusions