About Jeoss U 8.04 Kernel
Jeoss U 8.04 derives from Ubuntu 8.04 LTS. Ubuntu kernels are patched versions of unmodified mainline Linux kernel sources from kernel.org compiled with Debian build system plus Ubuntu specific configuration files. Every group of configuration files creates a unique combination of build-time defined kernel variables. These variables set kernel parameters as target processor, memory capabilities, I/O scheduler strategies, process preemption, etc. Ultimately every configuration blend defines a kernel "flavor" for the i386 architecture targeting a specific scenarios.
- The Ubuntu Server LTS 8.04 32Bit distribution (kernel 2.6.24) comes with three kernel "flavors"; -server, -generic, and -virtual.
- The Ubuntu Server LTS 10.04 32Bit distribution (kernel 2.6.32) comes with three kernel "flavors": -generic, -generic-pae, and-virtual.
The different flavors are targeted as follows:
- -generic: OS geared toward desktop systems
- -server: OS geared toward server systems
- -virtual: OS geared toward virtual machine guests
- -generic-pae: OS geared toward 32bit desktop systems with more than 4GB RAM
If we now compare the kernel configuration files of the different flavors and versions we get an idea of what Ubuntu considers should define a -server kernel.
Processor Bus width
LTS 8.04 has -server kernel flavor for 32bit processors.
# CONFIG_64BIT is not set CONFIG_X86_32=y # CONFIG_X86_64 is not set
LTS 10.04 has -server kernel flavor only for 64bit processors.
CONFIG_64BIT=y # CONFIG_X86_32 is not set CONFIG_X86_64=y
Processor Instruction Set
The 32Bit LTS 8.04 -server flavor uses the 686 instruction set (Pentium Pro, Pentium II, Pentium III, Athlon, Athlon XP, etc)
# CONFIG_M486 is not set # CONFIG_M586 is not set CONFIG_M686=y
The 32Bit LTS 8.04/10.4 -generic flavor uses the 586 instruction set (Pentium, Pentium MMX, K5, K6, K6-II, K6-III)
# CONFIG_M486 is not set CONFIG_M586=y # CONFIG_M686 is not set
Memory
An x86 32Bit processor can naturally address 4GB (2^32) and "artificially" up to 64GB if it has PAE (Physical Address Extension). Even when this processor feature is included since the Intel Pentium Pro/AMD K6-3 there were not many 32Bit motherboards designed for holding more than 4GB.
From Ubuntu's perspective this feature was decisive for the 32Bit -server flavor definition; all of them requiere processors with PAE enabled.
The 32/64Bit LTS 8.04 -server flavor does requiere PAE
# CONFIG_HIGHMEM4G is not set
CONFIG_HIGHMEM64G=y
The 32Bit LTS 8.04 -generic and -virtual kernels do not requiere PAE
The
32Bit LTS 10.04 -generic kernel does not requiere PAE but the -virtual flavor does
CONFIG_HIGHMEM4G=y # CONFIG_HIGHMEM64G is not set
Preemption
The multitasking Linux kernel allows many user and kernel processes to run concurrently in an ordered way. The scheduler is the kernel piece of code that timely assigns the CPU resource among the several processes at the synchronic rhythm given by a periodic timer interrupt.
Since v2.6 Linux added kernel preemption, which means that kernel and user processes can (under certain conditions) be asyncrhonously interrupted by some high priority process.
Preemption and Scheduling are directly related to OS performance and responsiveness. A preemptive kernel asynchronously interrupting kernel code could negatively impact the overall system performance. In the other hand it will improve the sense of system responsiveness.
In normal situations Desktops prioritizing the user experience turn preemption on while Servers prioritizing proces performance turn it off.
The 32/64Bit LTS 8.04 -server kernels are non-preemptive
The 64Bit LTS 10.04 -server kernel is non-preemptive
CONFIG_PREEMPT_NONE=y
The 32/64Bit LTS 8.04 -generic kernels are preemptive
The
32/64Bit LTS 10.04 -generic kernels are preemptive
CONFIG_PREEMPT_BKL=y CONFIG_PREEMPT_VOLUNTARY=y
Latency
The system latency is related to the number of times per second the timer interrupt is generated. This periodic interrupt is the heart beat that synchronically triggers the kernel scheduler to handle every process context switch. Higher interrupt frequencies implies more process switch per second, lower latencies, but also less performance as the processes are interrupted a higher number of times per second.
The 32/64Bit LTS 8.04 -server kernels have CONFIG_HZ=100
The 64Bit LTS 10.04 -server kernel has CONFIG_HZ=100
CONFIG_HZ=100 CONFIG_HZ_100=y
The 32/64Bit LTS 8.04 -generic kernels have CONFIG_HZ=250
The 32/64Bit LTS 10.04 -generic kernels have CONFIG_HZ=250
CONFIG_HZ=250 CONFIG_HZ_250=y
I/O Scheduler
The I/O Scheduler is the kernel pice of code in charge of optimising disk access considering the different classes of workloads. There are currently four I/O Schedulers strategies available:
- No-op Scheduler (NOOP): Minimalist approach that mainly relies on the I/O scheduling capabilities provided by the hardware layer
- Anticipatory IO Scheduler (AS): Increase the efficiency of disk utilization by "anticipating" synchronous read operations.
- Deadline Scheduler (DEADLINE): Read requests are given a higher priority and a dead line for completion. Suitable for database use.
- Complete Fair Queueing Scheduler (CFQ): Balance read/write requests by extending the process time slice concept to I/O operations.
The 32/64Bit LTS 8.04 -server kernels have DEADLINE I/O Scheduler
The 64Bit LTS 10.04 -server kernel has DEADLINE I/O Scheduler
CONFIG_DEFAULT_DEADLINE=y CONFIG_DEFAULT_IOSCHED="deadline"
The 32/64Bit LTS 8.04 -generic kernels have DEADLINE I/O Scheduler
The 32/64Bit LTS 10.04 -generic kernels have DEADLINE I/O Scheduler
CONFIG_DEFAULT_CFQ=y CONFIG_DEFAULT_IOSCHED="cfq"
Jeoss U 8.04 Kernel
Jeoss 8.04 kernel is identical to the 32Bit LTS 8.04 -server kernel with three exceptions:
- it does not requiere a PAE enabled CPU. This change allows to run CPUs as AMD GEODE LX.
- it has i586 instruction set allowing CPUs from Pentium and higher.
- it is Preemptive with Low Latency allowing Asterisk PBX to run even on low power CPUs.