Skip to content

bbThemis/ThemisIO

Repository files navigation

ThemisIO

ThemisIO is a first of its kind software-defined I/O system for supercomputers. It enables policy-driven I/O capacity sharing on supercomputers. At its core, ThemisIO disassociates I/O control (i.e., I/O request processing order) from processing by incorporating job metadata such as user, job id, and job size (i.e., node count) ThemisIO can precisely balance the I/O cycles between applications via time slicing to enforce processing isolation, enabling a variety of fair sharing policies. ThemisIO can precisely allocate I/O resources to jobs so that every job gets at least its fair share of the I/O capacity as defined by the sharing policy. ThemisIO can decrease the slowdown of real applications due to I/O interference by two to three orders of magnitude when using fair sharing polices compared to the first-in-first-out (FIFO) baseline.

Fig.1 - Size-fair, 4-node job competing with 1-node job

Fig.2 - Job-fair, 4-node job competing with 1-node job

Fig.3 - User-fair, Two 2-node jobs competing with a 1-node job

Benchmark

Fig.4 - IOR benchmark for one server

Fig.5 - IOR benchmark for multiple servers

Build Instruction

Compile server and wrapper.so,
git clone https://github.com/bbThemis/ThemisIO
cd ThemisIO
mkdir obj
make
cd src/client
./compile.sh

You need to revise the impi path in Makefile.

Run a server,
cd ThemisIO
./server

Run on client side
export MYFS_CONF="/full_path/ThemisIO/myfs.param"
export LD_PRELOAD="/full_path/ThemisIO/wrapper.so"

ls -l /myfs
touch /myfs/a
ls -l /myfs


There are still many bugs. You can "unset LD_PRELOAD" whenever you get issues. I normally add "LD_PRELOAD=xxxx" before the command I need to test.

Run Client within a container

Assume you are on a system with the server running already (see above for instructions of launching a server), you may run the client within our pre-built container. To pull the container with Docker, run:

docker pull ghcr.io/bbthemis/themisio:client

This can also be done with other container runtimes, for example the Apptainer:

apptainer pull themisio.sif docker://ghcr.io/bbthemis/themisio:client

Then, you may run a shell within the container (using apptainer as example here):

apptainer run themisio.sif bash

You can then access the filesystem with:

export MYFS_CONF="/full_path/ThemisIO/myfs.param"
export LD_PRELOAD="/ThemisIO-client/wrapper.so"
ls -l /myfs
touch /myfs/a
ls -l /myfs

You may also build a new container using our client container as the base to run any applications with ThemisIO support.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 6