From c33ac6029e37ae63d45c7f0d288cca257c96ce74 Mon Sep 17 00:00:00 2001 From: Stefan Lankes Date: Thu, 31 Mar 2016 09:30:07 +0200 Subject: [PATCH 1/4] add small introduction --- README.md | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index c57347f32..a22e9ab7b 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,11 @@ # HermitCore - A lightweight extreme-scale satellite kernel -The project *HermitCore* has just initiated. -It is a unikernel operating system for high-performance computing. +The project *HermitCore* 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. + 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 @@ -19,19 +23,19 @@ HermitCore is the result of a research project at RWTH Aachen University and is 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. Check if the HermitCore loader is registered to your system. In this case you find an entry `hermit`in the directory `/proc/sys/fs/binfmt_misc/`. Otherwise register the loader with following command: `echo ":hermit:M:7:\\x42:/path2proyxy/proxy:" > /proc/sys/fs/binfmt_misc/register`, in which `path2proxy` defines the path to the loader. You find the loader `proxy` after building the HermiCore sources in the directory `hermit/tools`. -6. 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. -7. HermitCore's kernel messages of `isleX` are available via `cat /sys/hermit/isleX/log`, where `X` represents the isle. -8. 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. -9. Hermit applications are available at `/hermit/usr/{tests,benchmarks}` which is a shared directory between the host and QEmu. +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. +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. ## Building and testing HermitCore on a real machine 1. 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 with `make menuconfig` for your system. Be sure, that the option `CONFIG_HERMIT_CORE` in `Processor type and features` is enabled. 2. 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. 3. Install the Linux kernel and its initial ramdisk on your system (see descriptions of your Linux distribution). -4. 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`. -5. Per default, the IP device uses a static IP address range. Linux has to use `162.168.28.1`, where HermitCore isles start with `192.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: +4. Register the HermitCore loader to your system with following command: `echo ":hermit:M:7:\\x42:/path2proyxy/proxy:" > /proc/sys/fs/binfmt_misc/register`, in which `path2proxy` defines the path to the loader. You find the loader `proxy` after building the HermiCore sources in the subdirectory `hermit/tools` of the directory, which contains this *README*. +5. 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`. +6. Per default, the IP device uses a static IP address range. Linux has to use `162.168.28.1`, where HermitCore isles start with `192.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 From 556dd6d1616d3424381b0ba7f32286392a09ae40 Mon Sep 17 00:00:00 2001 From: Stefan Lankes Date: Thu, 31 Mar 2016 09:32:07 +0200 Subject: [PATCH 2/4] add link to http://www.hermitcore.org --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a22e9ab7b..a1ac05e05 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # HermitCore - A lightweight extreme-scale satellite kernel -The project *HermitCore* has just initiated and is [unikernel](http://unikernel.org) for high-performance computing. +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. From 934c97ade6a7bd7667ed69a84de0ee0bb287d8f7 Mon Sep 17 00:00:00 2001 From: Jens Breitbart Date: Thu, 31 Mar 2016 19:15:41 +0200 Subject: [PATCH 3/4] README rewording. :) --- README.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) 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. From ad3e6045d0bf16ac7bd4a8bca5d36cbd9b6e63db Mon Sep 17 00:00:00 2001 From: Stefan Lankes Date: Thu, 31 Mar 2016 21:48:37 +0200 Subject: [PATCH 4/4] Revise README and delete obsolet parts --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index cdb9df3b9..cb2a0717e 100644 --- a/README.md +++ b/README.md @@ -24,10 +24,10 @@ HermitCore is the result of a research project at RWTH Aachen University and is 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. 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. +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 directories `/hermit/usr/{tests,benchmarks}`. A HermitCore loader is already registered. By starting a HermitCore application, a proxy will be started on the Linux system, while the HermitCore binary will be 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/tests/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. +8. More HermitCore 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