Skip to the content.

StrataBench Architecture

Overview

StrataBench follows a layered architecture: agent intelligence on top, orchestration in the middle, pluggable engines at the bottom, unified results throughout.

┌─────────────────────────────────────────────────────────────────┐
│                     User Interfaces                              │
│              CLI  ·  REST API  ·  Natural Language               │
└────────────────────────────┬────────────────────────────────────┘
                             │
┌────────────────────────────▼────────────────────────────────────┐
│                      Agent Layer                                 │
│  ┌──────────┐  ┌───────────┐  ┌─────────┐  ┌──────────┐        │
│  │ Planner  │→ │ Validator │→ │ Analyst │→ │ Reporter │        │
│  └──────────┘  └───────────┘  └─────────┘  └──────────┘        │
│  LLM (Ollama) for NL · Rule engine for validation (deterministic)│
└────────────────────────────┬────────────────────────────────────┘
                             │
┌────────────────────────────▼────────────────────────────────────┐
│                   Orchestration Core                             │
│  Workload Profiles (YAML) · Scheduler · Engine Router            │
│  Hardware Discovery · Run State Machine                          │
└────────────────────────────┬────────────────────────────────────┘
                             │
         ┌───────────────────┼───────────────────┐
         │                   │                   │
┌────────▼────────┐ ┌────────▼────────┐ ┌───────▼────────┐
│ StrataBench     │ │ External        │ │ StrataBench    │
│ Engine (Rust)   │ │ Engines         │ │ Agent (nodes)  │
│                 │ │ fio·SPDK·Warp   │ │                │
│ block·file·s3   │ │ GOSBench·SBK    │ │ deploy·collect │
└────────┬────────┘ └────────┬────────┘ └───────┬────────┘
         │                   │                   │
         └───────────────────┼───────────────────┘
                             │
┌────────────────────────────▼────────────────────────────────────┐
│                    Result Pipeline                               │
│  Normalizer → SQLite/PostgreSQL → Comparator → Report Generator  │
│  Prometheus metrics · Grafana dashboards                         │
└─────────────────────────────────────────────────────────────────┘

Implementation status (2026)

Component Shipped Notes
Orchestration + agents Go HTTP (:7777) Bearer token + optional mTLS
Native StrataBench engine Rust block I/O (Linux) STRATABENCH_ENGINE_BIN; Docker ships Rust binary
Result store SQLite or PostgreSQL STRATABENCH_DATABASE_URL for Postgres
Engines fio, warp, vdbench, spdk, elbencho, sbk, gosbench, stratabench Native Rust engine for block (opt-in profiles)
Mid-run monitoring Partial mock, fio, warp, native, gosbench, sbk, elbencho, vdbench, spdk live intervals + Prometheus/SSE
Reports HTML + Excel + PDF PDF is executive summary; charts remain in HTML

Components

1. User interfaces

Interface Purpose Phase
stratabench CLI Primary interface for run, plan, validate, report 1
REST API Automation, CI/CD integration 2
Natural language Agent-driven planning via Ollama 1 (basic) / 4 (full)

2. Agent layer

Planner Agent

Validator Agent (rule-based, not LLM)

Deterministic checks:

Rule Example failure
dataset > cache 10GB test on 2TB cache array
steady_state runtime < ramp_time + 300s
tail_latency percentile_list missing p99
direct_io direct=0 for block device test
workload_match 4K random for declared “streaming” workload

Runner (execution, not LLM)

Analyst Agent

Reporter Agent

3. Orchestration core

Workload profiles (profiles/*.yaml)

Declarative test definitions. See profiles/README.md.

Engine router

Selects engine based on profile layer and engine fields:

match profile.engine {
    Engine::StrataBench => run_stratabench_engine(profile),
    Engine::Fio         => run_fio_wrapper(profile),
    Engine::Spdk        => run_spdk_wrapper(profile),
    Engine::Warp        => run_warp_wrapper(profile),
    Engine::Gosbench    => run_gosbench_wrapper(profile),
}

Hardware discovery

Collects before each run:

4. StrataBench engine (Rust)

Our own I/O engine — lean code, heavy load capability.

stratabench-engine/
├── block/     # O_DIRECT, libaio, multi-thread, high QD
├── file/      # POSIX file I/O, directory tree workloads
├── s3/        # S3 HTTP (AWS SDK / reqwest)
└── metrics/   # Per-op latency histogram, throughput

Design constraints:

Does not replace fio/SPDK for edge cases — covers 80% of block/file/S3 HTTP workloads natively.

5. External engine wrappers

Thin adapters that:

  1. Translate StrataBench profile → engine-native config
  2. Execute subprocess
  3. Parse output → normalized schema
Engine Wrapper input Parser output
fio .fio job file JSON (--output-format=json)
SPDK perf CLI args stdout regex
Warp CLI args JSON report
GOSBench config file Prometheus / JSON
SBK CSV import existing CSV format

6. StrataBench agent

Lightweight daemon deployed on benchmark nodes:

stratabench-agent --listen :7777

Responsibilities:

Multi-node pattern (similar to Warp coordinator + clients):

Orchestrator
    ├── agent@node1  → fio on /dev/nvme0n1
    ├── agent@node2  → fio on /dev/nvme0n1
    └── agent@node3  → warp client → S3 endpoint

7. Result pipeline

Normalizer

All engine outputs → RESULT_SCHEMA.md JSON.

Storage

Comparator

Reports


Data flow (single run)

1. User:  stratabench plan "OLTP on NVMe"
2. Planner: hardware discovery → select nvme-random-oltp profile
3. Validator: dataset 200GB > cache ✓, runtime 600s ✓, p99 ✓
4. Router:  engine=fio (block layer)
5. Agent:   deploy fio job on target node
6. fio:     runs 600s, outputs JSON
7. Normalizer: JSON → StrataBench result schema
8. Analyst:  no anomalies, within baseline
9. Reporter: HTML report + "185K IOPS, p99=450µs"
10. Store:  SQLite, run_id=uuid

Technology stack

Component Technology Rationale
Core engine Rust Performance, safety, single binary
Orchestrator + agent Go Concurrency, easy deploy, gRPC
Agent LLM Ollama (local) On-premise, no data leaves network
Validator Rule engine (Go/Rust) Deterministic, fast, no hallucination
Profiles YAML Human-readable, version-controllable
Result DB SQLite → PostgreSQL Start simple, scale later
Metrics Prometheus + Grafana Industry standard
Packaging Docker + deb/rpm Storage teams expect bare-metal deploy

Repository structure (target)

StrataBench/
├── README.md
├── LICENSE
├── CONTRIBUTING.md
├── docs/
│   ├── VISION.md
│   ├── ARCHITECTURE.md
│   ├── ROADMAP.md
│   ├── LANDSCAPE.md
│   └── RESULT_SCHEMA.md
├── profiles/              # Workload profile library
├── crates/
│   └── stratabench-engine/   # Rust I/O engine
├── cmd/
│   ├── stratabench/          # CLI (Go)
│   └── stratabench-agent/    # Node agent (Go)
├── internal/
│   ├── orchestrator/
│   ├── validator/
│   ├── discovery/
│   ├── normalizer/
│   └── wrappers/             # fio, spdk, warp adapters
├── agents/                   # Agent prompts + state machine
└── deploy/
    ├── docker-compose.yml
    └── grafana/

Security considerations


Non-goals (v1)