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
Fig.4 - IOR benchmark for one server
Fig.5 - IOR benchmark for multiple servers
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.