Originally Posted by masenko703
Whats the difference between smp, pae, and hugemem kernels??
SMP means Symmetric Multiprocessing. It is the common (maybe only, I'm not sure) form of Multiprocessing used in Linux. It is used for multiple physical CPUs on one motherboard and/or multiple cores in one cpu and/or hyperthreading. It has so little overhead, that distributions tend to build only SMP versions of the kernel and use them even for single processor systems.
SMP is independent of the memory issues covered by PAE and Hugemem, so in theory a PAE kernel could be SMP or non SMP but in practice almost all kernels are SMP. If a distribution calls their kernels "SMP", "PAE" and "Hugemem" you can be confident that all three are "SMP" and the last two are both "PAE".
PAE is a hardware feature that allows physical addressing to be 36 bits in 32 bit mode, so a system can physically address up to 64GB instead of just 4GB. 4GB of physical addressing supports only about 3.5GB of actual ram, so to use a full 4GB of ram you need more than 4GB of physical addressing, which means you need PAE.
The software support in the kernel for the hardware PAE feature may also be called "PAE". But that naming is not consistent. If your distribution has a kernel named "PAE" I'm sure that includes support for hardware PAE, but it may also include other differences from the non "PAE" version of the kernel, and some other distribution might have an entirely different name for the kernel that has support for hardware PAE.
I have read many contradictory and confusing things about the meaning of "Hugemem". The clearest (but I don't know if it is still valid) explanation is in the discussion of hugemem in this page:
The hardware PAE feature allows use of 36 bit physical addresses, which could support up to 64GB of ram. But it doesn't change the limit of 4GB total virtual memory for the kernel plus any one process. That is normally split as 3GB for the process and 1GB for the kernel.
If you have a lot of RAM, the kernel data structures probably won't fit in 1GB of virtual memory. So you can address 64GB but you can't effectively use it.
There is a kernel option that splits user mode addressing from kernel mode addressing, so they each get 4GB of virtual space rather than splitting a single 4GB. The above page associates the word "Hugemem" with that option.
If you have very high physical and/or virtual memory requirements, way beyond where it would make more sense to switch to a 64 bit kernel, but you have some sufficient reason not to switch to a 64 bit kernel, this split addressing choice in a 32 bit kernel may be an acceptable compromise, but it has a lot of drawbacks and shouldn't be selected without seriously considering the alternatives.