HERCULES

High-Performance In-Memory & Ad-hoc File System designed for modern large-scale, data-intensive computing in HPC and AI environments.

Hercules Architecture

developed by

Main Characteristics

Designed to alleviate the strain on traditional HPC storage systems by dynamically utilizing local storage resources.

High Performance

Uses main memory (DRAM) and optionally NVMe to establish a high-performance, temporary storage layer with UCX integration.

Elasticity

Implements runtime elasticity, allowing storage services to dynamically adjust capacity based on application needs.

Data Migration

Supports transparent migration of data to efficiently utilize and redistribute available resources across the cluster.

Fault Tolerance

Achieves resilience through sophisticated replication management techniques and a relaxed consistency model.

Integrated with

Unified Communication X

System Design & Architecture

HERCULES follows a client-server design model where the client itself is responsible for the server entities deployment.

Multi-threaded

Dispatcher thread and a pool of worker threads to balance workload.

POSIX Compliant

Ensuring compatibility with most standard HPC applications.

Low-Latency

Exploits RDMA-capable protocols for zero-copy data transfers.

Decentralized

Two-tier metadata structure distributed across nodes.

Hercules Architecture

Core Components of HERCULES

The architecture is built on a classic client-server design model with distinct, distributed entities.

Shared Library

frontend bash icon
  • Frontend
  • Create Dataset Operations
  • Data Deployment Handling

Metadata Server

  • Orchestration
  • Handles Metadata Operations
  • Distributed Structure

Data Server

  • Backend Storage
  • Manages Raw Data Storage
  • Dispatcher & Worker Threads

Download & Installation

HERCULES can be built from source using CMake, installed via the Spack package manager, or containerized using Docker.

Prerequisites

Ensure you have the following packages installed before compilation:

  • CMake >= 3.5
  • UCX >= 1.15
  • Glib
  • Method 1: Standard Installation

    Clone the repo and run the following commands:

    git clone https://github.com/arcos-uc3m-hercules/hercules.git
    mkdir build
    cd build
    cmake ..
    make
    make install
  • Method 2: Spack Installation

    Add the repository under the admire namespace and install:

    git clone https://gitlab.arcos.inf.uc3m.es/admire/spack.git
    cd hercules
    spack repo add spack
    spack install hercules
    spack load hercules
  • Method 3: Docker Installation

    Clone the repository and build the Docker container image:

    git clone https://github.com/arcos-uc3m-hercules/hercules.git
    cd hercules
    docker build -t hercules .

After compilation, the project generates key binaries like libhercules_posix.so (for I/O interception), and hercules_server.

How to Run & Use HERCULES

Hercules enables access via API library or LD_PRELOAD.

We provide scripts and Dockerfiles to launch deployments easily based on a configuration file (see below).

Slurm

With Slurm (recommended)

Use the script "scripts/hercules". It reads initialization parameters from hercules.conf.


hercules start -f <CONF_PATH>

  • Intercept calls: export LD_PRELOAD=build/tools/libhercules_posix.so
  • Stop deployment: scripts/hercules stop -f <CONF_PATH>
Manual

Without Slurm

Requires specifying hostfiles for metadata and data servers manually.


hercules start -m <meta_host> -d <data_host> -f <CONF>

  • meta_server_hostfile: Hostnames of metadata servers
  • data_server_hostfile: Hostnames of data servers
Containerized

With Docker

Easily test Hercules inside single or multi-container environments.


docker run -it --rm hercules

  • Interactive test: hrun ls -la /mnt/hercules/
  • Multi-node Compose: docker compose up -d
  • Client interaction: docker attach hercules-client

Running with Docker

Hercules can be easily deployed and tested using Docker containers or Docker Compose.

Single Container (Interactive)

Run the container interactively. This automatically starts the Hercules services and opens an interactive shell:

docker run -it --rm hercules

Inside the container, execute commands through Hercules using the hrun shortcut:

hrun touch /mnt/hercules/file.txt
hrun ls -la /mnt/hercules/

Alternatively, intercept I/O manually:

export HERCULES_CONF=/hercules/conf/hercules.conf
export LD_PRELOAD=/hercules/code/build/tools/libhercules_posix.so
ls -la /mnt/hercules/
Client-Server with Docker Compose

To deploy a separated server and client environment across isolated services:

docker compose up -d
docker attach hercules-client

Inside hercules-client, use hrun <command> to interact with the storage servers:

hrun ls -la /mnt/hercules/

To stop the deployment and clean up containers:

docker compose down

Configuration Parameters

Key fields for the hercules.conf file.

Parameter Description Default / Example
MOUNT_POINT Mount point used in the client side /mnt/hercules/
BLOCK_SIZE Block size in KB 512
METADATA_PORT Port listening in the metadata node service 7500
DATA_PORT Port listening in the data node service 8500
REPL_FACTOR Replication factor for fault tolerance 1, 2, or 3
POLICY Data distribution policy RR, BUCKETS, HASH, LOCAL
STORAGE_SIZE Max size in GB used by data nodes (0 = No limit) 1
MALLEABILITY Enables malleability functions (1 = On) — See demo video 0

Malleability Demo

Malleability in Action

Demonstration of HERCULES ad-hoc file system malleability running with the wacomm++ simulation under the European ADMIRE (EuroHPC) project.

  • Runtime Elasticity: Dynamic node scaling and capacity adaptation on-the-fly.
  • Data Redistribution: Seamless migration of in-memory data blocks across nodes.
  • Zero Interruption: Preserves data consistency without stopping applications.

Scientific Publications

Last research papers detailing the HERCULES architecture.