Skip to main content

IoWarp

IoWarp is a powerful cutting-edge data management platform designed to streamline and accelerate scientific workflows, especially those intensified by the rise of artificial intelligence (AI). It optimizes data flow throughout the research process, ensuring efficient handling of diverse data types, formats, and the exponential growth of data. IOWarp aims to significantly reduce data access times, accelerate the pace of scientific discovery, and foster a collaborative research environment.

Dependencies

Currently, IoWarp is Linux-only. We are working on extending portability.

Spack is the easiest way to install iowarp as of right now.

Install Spack

cd ${HOME}
git clone https://github.com/spack/spack.git
cd spack
git checkout tags/v0.22.2
echo ". ${PWD}/share/spack/setup-env.sh" >> ~/.bashrc
source ~/.bashrc

Clone the IoWarp Spack Repo

cd ${HOME}
git clone https://github.com/iowarp/iowarp-install.git
spack repo add iowarp-install/iowarp-spack

Install IOWARP: USERS

For general users of IOWARP, use the following command:

spack install iowarp

Install IOWARP: DEVS

Project Environment

Decide on where you want to place your iowarp repos. This guide will assume you have set a variable named IOWARP_PKGS.

export IOWARP_PKGS="${HOME}"

Set IOWARP_PKGs to where you want your packages.

NOTE: This variable needs to be reset for every new terminal. On Linux, you could add the above command to your ~/.bashrc to automate.

Clone the repos

cd ${IOWARP_PKGS}
git clone https://github.com/iowarp/cte-hermes-shm.git
git clone https://github.com/iowarp/iowarp-runtime
git clone https://github.com/iowarp/content-transfer-engine.git

IoWarp has three main repos actively developed right now. For the ones you are contributing to, fork them first and replace the git clone urls above with your personal fork.

Option 1: Install Dependencies on Native Machine

IoWarp is currently only compatible with Linux. This section is for those who plan to develop iowarp on their Linux machine.

To install iowarp dependencies:

spack install iowarp +nocompile

For developer installations, we will use a tool named scspkg. scspkg is installed automatically by iowarp. It is a tool for managing modulefiles, which set various environment variables that streamline the installation of our tools.

Option 2: Use Docker to Install Dependencies

For those that don't want to install Linux or would rather not mess with their environment, we maintain a development container. We provide an Ubuntu contianer where iowarp's dependencies are already installed.

Here is the docker compose:

services:
iowarp:
image: lukemartinlogan/chimaera-deps:latest
container_name: iowarp
shm_size: 8g
mem_limit: 8g
volumes:
- ~/.ssh:/root/.ssh
- ${IOWARP_PKGS}/cte-hermes-shm:/cte-hermes-shm
- ${IOWARP_PKGS}/iowarp-runtime:/iowarp-runtime
- ${IOWARP_PKGS}/content-transfer-engine:/content-transfer-engine
stdin_open: true
tty: true
network_mode: host

To launch container:

mkdir -p ${IOWARP_PKGS}/docker/develop
cd ${IOWARP_PKGS}/docker/develop
touch ${IOWARP_PKGS}/docker/develop/docker-compose.yml
# Copy-paste the above into the file
docker compose up -d # Only for recent dockers
docker-compose up -d # Only for older dockers

To interact with the container:

docker exec -it iowarp bash

To stop container:

cd ${IOWARP_PKGS}/docker/develop
docker compose down # Only for recent dockers
docker-compose down # Only for older dockers

NOTE: shm_size and mem_limit are set to 8GB. Feel free to increase or decrease that value.

For Pull Requests

You may find the github command line useful for making PRs.

gh auth login
gh repo set-default
gh pr create --title "Your pull request title" --body "Your pull request description"

Load Basic Packages

spack load iowarp

Make sure to understand your environment. If you get errors like package X was not found, it is most likely you forgot to do either spack load X or module load X.

Hermes-SHM

cd ${IOWARP_PKGS}/cte-hermes-shm
scspkg create hermes_shm
mkdir build
cd build
cmake ../ \
-DCMAKE_INSTALL_PREFIX=$(scspkg pkg root hermes_shm) \
-DHSHM_ENABLE_COMPRESS=ON \
-DHSHM_ENABLE_ENCRYPT=ON \
-DHSHM_RPC_THALLIUM=ON \
-DHSHM_USE_ELF=ON
make -j32 install

If you will be working on hermes-shm, create your own personal fork instead of cloning directly. The following will allow you to keep your fork updated with changes to the global repo.

cd ${IOWARP_PKGS}/cte-hermes-shm
git remote add iowarp https://github.com/iowarp/cte-hermes-shm.git
git pull iowarp

IoWarp Runtime: Chimaera

cd ${IOWARP_PKGS}/iowarp-runtime
scspkg create iowarp_runtime
module unload iowarp_runtime
module load hermes_shm
mkdir build
cd build
cmake ../ \
-DCMAKE_INSTALL_PREFIX=$(scspkg pkg root iowarp_runtime)
make -j32 install

NOTE: If you will be working on iowarp-runtime, create your own personal fork instead of cloning directly. The following will allow you to keep your fork updated with changes to the global repo.

cd ${IOWARP_PKGS}/iowarp-runtime
git remote add iowarp https://github.com/iowarp/iowarp-runtime
git pull iowarp

Content-Transfer-Engine: Hermes

cd ${IOWARP_PKGS}/content-transfer-engine
scspkg create cte
module unload cte
module load hermes_shm iowarp_runtime
mkdir build
cd build
cmake ../ \
-DCMAKE_INSTALL_PREFIX=$(scspkg pkg root cte)
make -j32 install

NOTE: If you will be working on the cte, create your own personal fork instead of cloning directly. The following will allow you to keep your fork updated with changes to the global repo.

cd ${IOWARP_PKGS}/content-transfer-engine
git remote add iowarp https://github.com/iowarp/content-transfer-engine.git
git pull iowarp

Another note on environments

By the end of this installation, you will have the following spack:

spack load iowarp

And the following modules:

module load hermes_shm iowarp_runtime cte

Understanding how your environment works is important. When compiling you must make sure that only the necessary modules are loaded. For example, the iowarp_runtime install only requires spack load iowarp and module load hermes_shm.

If you have module load iowarp_runtime as well, there is a chance the compiler will find header files in the module's directory, instead of the build directory. This can lead to compilation errors since the module directory will likely be outdated compared to the code you just wrote.