|
1 year ago | |
---|---|---|
.gitignore | 1 year ago | |
CONTRIBUTORS | 1 year ago | |
COPYING | 2 years ago | |
Makefile | 1 year ago | |
README.md | 1 year ago | |
client.c | 1 year ago | |
extractglibc.sh | 1 year ago | |
interface.c | 1 year ago | |
libc.a | 1 year ago | |
libpthread.a | 1 year ago | |
multithreadedserver.c | 1 year ago | |
printer.c | 1 year ago | |
tcpsingle.c | 1 year ago | |
ukl.c | 1 year ago |
Unikernels: The Next Stage of Linux’s Dominance
Bibtex entry
@inproceedings{raza2019unikernels,
title={Unikernels: The Next Stage of Linux's Dominance},
author={Raza, Ali and Sohal, Parul and Cadden, James and Appavoo, Jonathan and Drepper, Ulrich and Jones, Richard and Krieger, Orran and Mancuso, Renato and Woodman, Larry},
booktitle={Proceedings of the Workshop on Hot Topics in Operating Systems},
pages={7--13},
year={2019},
organization={ACM}
}
Assuming you are running Fedora, you need the following packages. Run the following command to install them.
sudo dnf install bc elfutils-devel git hostname kernel-devel openssl-devel qemu supermin
sudo dnf groupinstall "C Development Tools and Libraries"
UKL requires other Git repos as well. Follow the directions below to download and build them.
This Makefile assumes that you have a main directory in which you have three further sub directories. Follow the commands below to get the correct directory layout. (This will not be necessary as we update the Makefile)
mkdir unikernel
cd unikernel
git clone https://github.com/razaaliraza/linux.git
git clone https://github.com/razaaliraza/ukl.git
git clone https://github.com/razaaliraza/min-initrd.git
Build Linux
Note: This will fail at the very end (linking step). Thats ok.
cd linux
make olddefconfig
make -j `nproc`
Build the application
cd ../ukl
make singlethreaded-tcp-server
cd ../ukl
make multithreaded-tcp-server
cd ../ukl
make multithreaded-printing
This step will build application code and link everything together in a single bzImageRun UKL. This step might take a while because supermin has to create an initrd.
make run
If this step fails because you dont have KVM enabled on your machine, go to min-initrd directory and open Makefile. Delete enable-kvm flag from run command.
If you get messages about module version mismatch when the kernel boots up, you might want to look at this Supermin page.
telnet 127.0.0.1 5555
make client
./client 127.0.0.1
This is a work under development. If something does not work or breaks, either open an issue, or if you have an easy fix, create a pull request. Or please let me know and I will try to fix it.
If you have any comments suggestions, email me! [email protected]