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.
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.
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.
||273 cycles||183 cycles||104 cycles|
||1008 cycles||699 cycles||266 cycles|
|ARM SA1110||n/a||372 cycles|
For comparison the IPC performance of Hazelnut version RC1:
|Pentium III/450MHz||409 cycles||n/a||201 cycles|
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).
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.