ElasticOS is a Linux OS with a set of operating system primitives which provides a scaling abstraction to cloud applications in which they can transparently be enabled to support scaled execution across multiple physical nodes as resource needs to go beyond that available on a single machine.
These primitives include:
Stretch: extend the address space of an application to a new node.
Push and Pull: to move pages between nodes as needed for execution and optimization.
Jump: to transfer execution in a very lightweight manner between nodes.
This joint disaggregation of memory and computing allows for transparent elasticity, improving an application’s performance by capitalizing on the underlying dynamic infrastructure without needing an application re-write. We have implemented these primitives in a Linux 2.6 Kernel.
For more details please see:
How to Use ElasticOS
To run ElasticOS you will need two physical machines (x86-64), with 1Gb Ethernet connection, and at least 2GB RAM.
Both machines should have Linux 2.x installed. (Linux 2.6.38 is recommended)
Both machines must have ssh public key authentication enabled, and keys copied to both machines.
1. Clone ElasticOS source code.
git clone https://github.com/zaid-alali/ElasticOS-2.6.git
2. Install prerequisites to compile and install new kernel.
./prereq.sh #(reqiures root privelage)
3. Compile and install new kernel.
cp /boot/config-$(uname -r) .config
Customize kernel (Optional,recommended):
make menuconfig #follow menu configuration to customize kernel name, save and exit
sudo dpkg -i linux-image-184.108.40.206-(your kernel custom name).deb
sudo dpkg -i linux-headers-220.127.116.11-(your kernel custom name).debsudo reboot
4. Configure both machines.
Make sure to setup both machines with static IP addresses.
setup environment variables by modifying the file “/etc/environment” (requires root privilege), add the following variables, save and exit:
EOS_REMOTE_MACHINE= (other machines IPv4 address)
EOS_LOCAL_ADDRESS= (local IPv4 static address)
EOS_DIR= (absolute path to ElasticOS cloned directory)
place you test application in ElasticOS home directory “~/ElasticOS-2.6”, and make sure to have an exact copy of the binary file on both machines.
./setup-dest.sh #prepare first machine to allow stretch
./setup-src.sh “executable file name”
machine2 will start your application, and when it runs out of resources, it will use remote resources from machine1.
running setup-dest.sh and setup-src.sh scripts must be done with minimum delay between the two, and in the same order mentioned above.
ElasticOS is still under development , and can run only single threaded applications, and does not support files or IO.
ElasticOS was tested on the following algorithms, implemented in C/C++, with memory foot print of ~16GB:
Depth First Search.
Dijkstra’s Shortest Path.