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 is a CMake-based project. You can build it from source or use Spack package manager.

Prerequisites

Ensure you have the following packages installed before compilation:

  • CMake >= 3.5
  • UCX >= 1.15
  • Glib
  • MPI (MPICH or OpenMPI)
  • 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

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 to launch deployments easily based from 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
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

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) 0

Scientific Publications

Last research papers detailing the HERCULES architecture.