diff --git a/README.md b/README.md index a1ac05e05..cdb9df3b9 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,12 @@ # HermitCore - A lightweight extreme-scale satellite kernel -The project [HermitCore](http://www.hermitcore.org) has just initiated and is [unikernel](http://unikernel.org) 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. +The project [HermitCore](http://www.hermitcore.org) is new [unikernel](http://unikernel.org) targeting high-performance computing. +HermitCore extends on the multi-kernel approach with unikernel features to provide better programmability and scalability for hierarchical systems. +By starting HermitCore applications, cores will be split off from the Linux system and the applications run bare-metal on these cores. +This approach achieves a lower OS jitter and a better scalability. +HermitCore applications and the Linux system can communicate via an IP interface (e.g. 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. +HermitCore is the result of a research project at RWTH Aachen University and is currently an experimental approach, i.e. not production ready. Please use it carefully. ## Requirements @@ -19,11 +19,12 @@ HermitCore is the result of a research project at RWTH Aachen University and is ## Building and testing HermitCore within a virtual machine +0. Please make sure that you cloned this repository and all its submodules. 1. The build process works currently only on x86-based Linux systems. 2. 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. 3. The command `make` build the Linux kernel, the HermitCore kernel, the corss-compiler and the demo applications. 4. 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 label `qemu` in the Makefile has to be modified. -5. 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 directory `isleX` created, where `X` 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 variable `HERMIT_ISLE` is used to specify the (memory) location of the isle, while the environment variable `HERMIT_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. +5. Inside the VM runs a small Linux system, which already includes the patches for HermitCore. For each NUMA node (= HermitCore isle) is a directory called `isleX` in `/sys/hermit` , where `X` 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 variable `HERMIT_ISLE` is used to specify the (memory) location of the isle, while the environment variable `HERMIT_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. 6. HermitCore's kernel messages of `isleX` are available via `cat /sys/hermit/isleX/log`, where `X` represents the isle. 7. 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 address `192.168.28.1`. The HermitCore isles starts with the IP address `192.168.28.2` for isle 0 and is increased by one for every isle. 8. Hermit applications are available at `/hermit/usr/{tests,benchmarks}` which is a shared directory between the host and QEmu.