config | ||
hermit | ||
.clang-format | ||
.clang_complete | ||
.gitignore | ||
.gitmodules | ||
configure | ||
configure.ac | ||
Makefile.in | ||
README.md |
HermitCore - A lightweight extreme-scale satellite kernel
The project HermitCore has just initiated and is unikernel for high-performance computing. HermitCore extends the multi-kernel approach and combines it with unikernel features while providing better programmability and scalability for hierarchical systems. By starting a HermitCore applications, cores will be split off from the Linux system and the applications run bare-metal on these cores. This promise a lower OS jitter and a better scalability. Between HermitCore applications and the Linux system exist an IP interface, which could be used for inter-kernel communication.
HermitCore is the result of a research project at RWTH Aachen University and is currently an experimental approach and not production ready. Please use it carefully.
Requirements
- Netwide Assembler (NASM)
- GNU Make, GNU Binutils
- Tools and libraries to build linux, binutils and gcc (e.g. flex, bison, MPFR library, GMP library, MPC library, ISL library)
- libelf
- texinfo
- Qemu
Building and testing HermitCore within a virtual machine
- The build process works currently only on x86-based Linux systems.
- To configure the system, run the configure script in the directory, which contains this README. Fine tuning of the installation directories e.g. with the flag
--prefix
is currently not supported. HermitCore, the cross-compiler and the demo applications will be installed in subdirectories of this repository. - The command
make
build the Linux kernel, the HermitCore kernel, the corss-compiler and the demo applications. - To start a virtual machine and to boot a small Linux version use the command
make qemu
. Per default, the virtual machine has 10 cores, 2 NUMA nodes and 8 GByte RAM. To increase or to decrease the machine size, the labelqemu
in the Makefile has to be modified. - Afterwards, a small Linux system should run, which already includes the patches for HermitCore. For each NUMA node (= HermitCore isle) is in
/sys/hermit
a directoryisleX
created, whereX
represents the number of the NUMA node. The demo applications are located in the directory/hermit
and possess the file extension_proxy
. These applications are Linux proxies, in which the HermitCore binaries are embedded. By starting the Linux proxies, the embedded HermitCore binaries will be automatically started on isle 0 with cpu 1. To change the default behavior, the environment variableHERMIT_ISLE
is used to specify the (memory) location of the isle, while the environment variableHERMIT_CPUS
is used to specify the cores. For instance,HERMIT_ISLE=1 HERMIT_CPUS="3-5" /hermit/usr/hello
starts a HelloWorld demo on the HermitCore isle 1, which used the cores 3 to 5. The output messages are forwarded to the Linux proxy and printed on the Linux system. - HermitCore's kernel messages of
isleX
are available viacat /sys/hermit/isleX/log
, whereX
represents the isle. - It exists an virtual IP devices between HermitCore isles and the Linux system (see output of
ifconfig
). Per default, the Linux system has the IP address192.168.28.1
. The HermitCore isles starts with the IP address192.168.28.2
for isle 0 and is increased by one for every isle. - Hermit applications are available at
/hermit/usr/{tests,benchmarks}
which is a shared directory between the host and QEmu.
Building and testing HermitCore on a real machine
- In principle you have to follow the tutorial above. After the configuration (step 2 in the above tutorial) go to the subdirectory
linux
, which contains the source code of the Linux kernel. Configure the kernel withmake menuconfig
for your system. Be sure, that the optionCONFIG_HERMIT_CORE
inProcessor type and features
is enabled. - Go back to the root directory of this repository and build with
make
the Linux kernel, the HermitCore kernel, the cross-compiler and the demo applications. - Install the Linux kernel and its initial ramdisk on your system (see descriptions of your Linux distribution).
- Register the HermitCore loader to your system with following command:
echo ":hermit:M:7:\\x42:/path2proyxy/proxy:" > /proc/sys/fs/binfmt_misc/register
, in whichpath2proxy
defines the path to the loader. You find the loaderproxy
after building the HermiCore sources in the subdirectoryhermit/tools
of the directory, which contains this README. - The IP device between HermitCore and Linux does currently not support IPv6. Consequently, disable IPv6 by adding following line to
/etc/sysctl.conf
:net.ipv6.conf.eth0.disable_ipv6 = 1
. - Per default, the IP device uses a static IP address range. Linux has to use
162.168.28.1
, where HermitCore isles start with192.168.28.2
(isle 0). The network manager must be configured accordingly and consequently the file/etc/sysconfig/network-scripts/ifcfg-mmnif
must be created with following contents:
DEVICE=mmnif
BOOTPROTO=none
ONBOOT=yes
NETWORK=192.168.28.0
NETMASK=255.255.255.0
IPADDR=192.168.28.1
NM_CONTROLLED=yes
Finally, boot your system with the new Linux kernel and follow the above tutorial (Building and testing HermitCore within a virtual machine) from point 5.
The demo applications are stored in their subdirectories hermit/usr/{tests,benchmarks}
of the directory, which contains this README.