L4Ka::Hazelnut
L4Ka::Hazelnut was designed to be portable across 32bit platforms. We separated general code like IPC, thread management, and scheduling from platform dependent code like pagetable management and exception handling. L4Ka::Hazelnut is (almost) completely written in C++. For the first steps of a performance analysis refer to the evaluation section. (IPC Performance)
We see IA32 as our reference platform since we know this platform best and have the original L4/IA32 kernel for comparison (performance and functionality).
The L4Ka::Hazelnut microkernel is currently available for the following processor families:
For testing purposes L4Ka::Hazelnut/x86 can be used on a VMWare system.
Licensing
L4Ka::Hazelnut is published under the GNU General Public License.
For different licensing schemes please contact licensing. ∂ l4ka org
Support
With the release of L4Ka::Pistachio we will discontinue further development of L4Ka::Hazelnut (besides bug fixes). We consider the Version 2 and Version X.0 API as deprecated. It is possible to software-emulate the system behaviour of V2 and X.0 on top of Version 4; IDL4 makes this transition even easier.
IPC Performance
Hazelnut's IPC performance is world leading.
Measurements are performed with the provided ping-pong benchmark, no debug features enabled and with the fast-path option turned on.
Processor | Short IPC inter-AS large AS |
Short IPC inter-AS small AS |
Short IPC intra-AS |
---|---|---|---|
Pentium II/400MHz |
273 cycles | 183 cycles | 104 cycles |
Pentium 4/1400MHz |
1008 cycles | 699 cycles | 266 cycles |
ARM SA1110 | n/a | 372 cycles |
For comparison the IPC performance of Hazelnut version RC1:
Processor | Short IPC inter-AS large AS |
Short IPC inter-AS small AS |
Short IPC intra-AS |
---|---|---|---|
Pentium III/450MHz | 409 cycles | n/a | 201 cycles |
L4Ka::Hazelnut/ia32
The L4Ka Hazelnut kernel runs on all commodity x86 systems (Intel Pentium or higher, AMD Athlon or higher) and on VMWare.
We make use of the following x86 features:
We started adding SMP support for x86 systems. Currently, we can migrate threads and send IPC. ex_regs and task deletion are still open problems.
Minimum memory requirement is 64 MByte and we support up to 256 MByte of RAM (currently hard coded but no design limit).
L4Ka::Hazelnut/ARM
Supported Hardware
The L4Ka::Hazelnut kernel runs on StrongARM (SA1100,SA110) and ARM7 (EP7211) processors.
For ARM development we use these evaluation boards:
Unfortunately we have no real ARM-based killer applications (like L4Linux on x86). Thus all testing still has a quite academic touch.
Although the system call path for ARM is not optimized yet, first rough performance measurements look promising.
Booting L4Ka::Hazelnut on ARM-evaluation boards (EP7211, Brutus)
Most ARM evaluation boards use the Angel boot loader. Angel supports downloading binary images to physical memory and jumping to a certain address via a serial line protocol.
To boot L4Ka::Hazelnut we generate one binary image containing an elf-decoder and all images which have to be started. At startup the decoder copies the sections of all binaries into memory, configures the kernel info page and starts the kernel.
Angelboot can be downloaded here.