VAST Data

VAST Architecture: DASE

Intermediate

Disaggregated, Shared-Everything - the storage design that lets compute and capacity scale independently and keeps GPUs fed.

The scaling wall: shared-nothing & shared-disk

For two decades, scale-out storage came in two flavours, and both hit a wall. Shared-nothing systems give each server its own direct-attached drives, so capacity and compute are welded together and nodes must forward east-west traffic for data they do not own. Shared-disk systems let many nodes mount the same storage, but distributed locking and cache coherence become the bottleneck. Flip between them below to see the tradeoffs.

CPUCPUCPUCPUstateless CNodes - any node serves any requestNVMe-oF fabricSCMQLCSCMQLCSCMQLCshared NVMe enclosures - all state lives here

Disaggregated, Shared-Everything: stateless compute (CNodes) reaches all data in shared NVMe enclosures directly over NVMe-oF. Any node serves any request - no node owns data, so no inter-node chatter.

Scaling

Compute & capacity scale independently

Network

No east-west forwarding - remote NVMe ≈ local

Software

No cache coherence - state lives only in enclosures

Failure

Stateless node holds no data - no rebuild on failure

DASE: disaggregated, shared-everything

VAST introduced DASE in 2016. It splits compute logic from persistent capacity: compute runs as stateless containers, while all data, metadata and state live in shared NVMe enclosures that every compute node reaches directly over NVMe-oF. Any node can serve any request, so there is no inter-node chatter and no cache-coherence software. What makes this practical is networking roughly 100× faster than the 2000s - fast enough that remote NVMe behaves like local storage.

Shared-everything, not just shared disk

The “shared-everything” in DASE is the part people underestimate. Older “shared-disk” clusters share the blocks, but each node still keeps its own private cache and coordinates ownership through a distributed lock manager - so they spend their time on cache-coherence chatter, and the lock manager becomes the ceiling. VAST shares four things, not one:

Shared disk

Every CNode mounts every NVMe enclosure directly over NVMe-oF. No node owns a drive; there is no east-west forwarding to reach data on someone else's disk.

Shared data

All data is globally addressable from any node. There are no shards and no data owners - a request never has to be routed to the one node that holds the bytes, because every node holds access to all of them.

Shared metadata

The V-Tree metadata lives in shared SCM and is updated with atomic operations on that persistent media - not via a chatty cache-coherence or lock-manager protocol. Every node reads and writes the one global namespace.

Shared reduction state

The global hash table and dictionary behind dedup and compression also live in shared SCM, so every CNode reduces against the same fingerprints. A block can be deduped or delta-encoded against data any other node wrote, which is what makes reduction global rather than per-node.

Sharing data and metadata is what makes every CNode a perfectly parallel, interchangeable worker. Any CNode can serve any client request for any object at any time, because none of them depend on local state. Throughput scales almost linearly as you add nodes - there is no shared coordinator to bottleneck on.

It is also why failure is a non-event. When a CNode dies, it held no data and no exclusive locks, so surviving nodes keep serving the very same requests with no rebuild, no ownership failover, and no job restart. An in-flight training read or inference query simply continues on another node. The DBoxes below tell the other half of the story: each is fronted by two DNodes, so a DNode failure is a non-event too. Try it below - fail a CNode to watch requests reroute, or fail a DNode to watch its partner keep the drives reachable.

Shared-everything: any node, any request, any time

Every CNode shares the same data and metadata, so all nodes are interchangeable. Click a CNode to fail it and watch its requests reroute. Below, fail a DNode and watch its partner in the same DBox keep the drives reachable - the job never stops.

Every CNode reaches all of this - directly, over NVMe-oF

Shared metadataV-Tree in SCM - one global namespace, atomically updated
Shared dataEvery byte reachable by every node - no ownership, no shards
Shared disk (NVMe-oF)All SCM + QLC enclosures mounted by all CNodes directly
All 4 CNodes serving in parallel. Because every node sees the same shared data and metadata, any node can answer any request for any byte - there is no “owner” to route to.

Fault-tolerant DBoxes - two DNodes per box

Each DBox (JBOF) is reached through two DNodes. Click a DNode to fail it - its partner keeps every drive in that DBox reachable over NVMe-oF.

D1 DBox2 paths
D2 DBox2 paths
All DBoxes have both DNodes active. Each fault-tolerant DBox is reachable through two DNodes - so a DNode is never a single point of failure.

Illustrative model of VAST's stateless-CNode failover and dual-DNode path resiliency. Request distribution and DBox layout are simplified for clarity.

CNodes, DNodes & the NVMe-oF fabric

CNodes and DNodes are logical constructs: both are containers, not fixed hardware roles, and on many deployments they run on the same physical boxes. CNodes (VAST Servers) are the stateless compute containers, they terminate the protocols, run the backend data services, and carry all of the system's compute. DNodes are the lightweight containers that own the NVMe devices, the SCM SSDs and QLC flash inside the enclosures (DBoxes). State lives only on those devices. The fabric between them is NVMe-over-Fabrics running on Ethernet or InfiniBand.

CNodes (VAST Servers)

  • Stateless compute container
  • Terminate NFS / SMB / S3 / S3A / DB protocols
  • Serve SQL, Arrow, and the event broker (Kafka)
  • Run backend data services & all compute
  • Hold no persistent data themselves

DNodes (inside DBoxes)

  • Lightweight container that owns the NVMe devices
  • SCM SSDs (write buffer + metadata)
  • QLC flash (dense capacity tier)
  • No data-path logic - just serves the media over NVMe-oF

Stateless compute = elastic, no-rebuild scaling

Statelessness is the property that pays for itself. Because CNodes hold no data, the cluster scales linearly, survives node loss with no disk rebuild, upgrades fully online, and grows or shrinks on demand.

Linear scaling

Add CNodes for throughput, add enclosures for capacity - independently. The two axes never have to grow together.

No rebuild on CNode failure

A failed CNode held no data, so there is nothing to rebuild. The cluster simply reroutes requests to surviving nodes.

Fully online upgrades

Because logic is containerized and stateless, CNodes can be upgraded in place with no data movement and no downtime.

Elastic add / remove

Spin CNodes up or down with demand. State lives only in the enclosures, so compute is a fluid, disposable layer.

The write path: SCM → reduce → QLC

Every write lands in Storage Class Memory (Optane-class SCM) first and is acked from there. Only later, off the critical path, is the data reduced and flushed to dense QLC flash in very large stripes. That deferral is what lets VAST absorb writes on low-endurance QLC without write amplification or garbage collection. Step through the three stages below.

1Client
2CNode DRAM
3SCM SSDs
4QLC flash

↑ client acked from SCM

Stage 1

DRAM buffer → parity → SCM, ack client

A CNode buffers the incoming write in DRAM. On a full stripe - or after a ~300µs timeout, zero-padded - it computes parity and writes data + parity across the SCM SSDs, then acks the client. All writes land in low-latency SCM first and are acknowledged from there.

client sees the ack here

VAST reports that buffering in SCM, deferring data reduction, and flushing to QLC in very large stripes yields a ~10-year QLC lifespan and HDD-like cost on all-flash.

Locally-decodable erasure coding

Classic Reed-Solomon forces a tradeoff: wide stripes are capacity-efficient but expensive to rebuild, because reconstructing one lost strip means reading the whole stripe. VAST's locally-decodable scheme computes parity strips from different data-strip sets spanning more than one stripe, so with P parity strips you rebuild a lost strip by reading only ~1/P of the data. Compare schemes below.

146D + 4P

VAST-reported

filled = data strips read on rebuild (~37 of 146) · outlined = parity strips

Capacity overhead = P / (D+P)2.7%

lower is better

Rebuild read fraction ≈ 1 / P25.0% (~37/146 strips)

lower is better

VAST locally-decodable wide stripe: parity strips span multiple stripes, so a lost strip is rebuilt by reading only ~1/P of the data.

Wide stripes normally force a rebuild to read the whole stripe. Locally-decodable coding breaks that Reed-Solomon tradeoff: you get wide-stripe efficiency and cheap rebuilds at once.

VAST reports 146+4 reaches ~37 of 150 strips read on rebuild (~¼ the I/O, ~3× faster than 8+2) at 2.7% overhead, with MTTDL of 42M+ years (corroborated independently by Blocks & Files).

Fail-in-place: failures become a non-event

Cheap rebuilds change the operational model entirely. Because a lost strip is reconstructed by reading only ~1/P of the stripe, and because the 146+4 scheme tolerates several concurrent losses with an MTTDL measured in tens of millions of years, VAST does not treat a dead drive as an emergency. Failed media is simply left in place: the system routes around it, keeps serving at full speed, and you swap hardware in planned batches during a maintenance window, or run an enclosure to end of life without ever replacing individual drives. There is no urgent single-drive rebuild race and no degraded-performance window to sweat. Fail drives below and watch the system stay healthy.

Rebuild fleet:more CNodes - faster rebuild
System status: HEALTHY

healthy failed (left in place) absorbing rebuilt data into spare capacity

All drives nominal - data is protected

Every object is split into a wide erasure-coded stripe spread across many drives. Any drive can be lost without losing data. Click a drive, or use the stepper, to simulate a failure.

Absorbed in software

Wide erasure coding tolerates drive loss with no downtime and no data loss. A failure is a non-event for availability.

Many-to-many CNode rebuild

The CNodes do the rebuild, reconstructing lost data into reserved free space across all surviving drives - not a single hot-spare. Shared-everything means every CNode can contribute, so more CNodes rebuild faster and raise resiliency.

Replacement is deferred

The dead drive stays in the chassis. No emergency truck roll: swap failed media in planned batches, or run to end of life.

Illustrative model of fail-in-place behavior. VAST-reported MTTDL exceeds 42M years for a 146+4 wide stripe.

Data reduction: deduplication, compression & similarity

Three techniques stack here, and they are not interchangeable. Deduplication removes blocks that are byte-for-byte identical to one already stored - powerful when whole copies repeat, but coarse: a single changed byte makes two blocks different, so near-duplicates slip straight through. Compression shrinks the bytes within a block using an encoder; it only ever sees one block at a time, a purely local view, so it cannot touch the redundancy that lives between similar blocks.

VAST's differentiator is the third technique: global similarity reduction. A similarity hash returns the same value for blocks that are merely similar, not identical. The first block of a hash becomes a compressed reference holding the full dictionary; every later similar block is stored as a small delta against it (ZSTD, without the dictionary overhead), capturing the mid-size repetitions that dedup and compression alone leave on the table. It runs on fine, dynamic chunks (on the order of 32KB) rather than one fixed block, giving the hash far more chances to match. Crucially the hash table is global across the whole cluster and lives in SCM - so the all-flash DASE design lets the similarity search span the entire namespace as one reduction realm, a vastly larger scope than legacy systems whose dedup tables must fit in controller DRAM. A bigger search space finds more redundancy, which is exactly why “all data reduction is not created equal”. Toggle the techniques to see what each catches.

VAST applies all three

Every write is globally compressed and deduplicated; similarity reduction is an optional layer on top. Toggle the techniques to compare what each one catches - the Similarity reduction view is VAST's full combined result.

Deduplication: Deduplication hashes every block and collapses any block whose hash COLLIDES with one already stored - so byte-for-byte identical copies become a single pointer. It excels on data with many exact copies, but it is coarse: a single changed byte yields a different hash, so near-duplicates slip through and are kept in full.

Storage footprint

1.9:149% smaller

What was written6.0 units
Stored on VAST3.09 units
A

new hash - stored in full as the first copy

stored
A

hash 0xA17F collides with a stored block - keep a pointer

deduped
A

hash 0xA17F collides with a stored block - keep a pointer

deduped
A′

MISSED - different hash (only near-identical), so stored in full

stored full
B

new hash - stored in full as the first copy

stored
B

hash 0xC93D collides with a stored block - keep a pointer

deduped
Deduplication relies on an exact hash collision - one changed byte and the hashes differ. A similarity hash instead returns the same value for blocks that are merely similar. The first block of a similarity group becomes the reference; later similar blocks are stored as ZSTD deltas. Both hash tables are global across the cluster and live in SCM, so reduction works against the entire namespace.

Why VAST's scope is global, not local

Legacy systems confine dedup to a small local domain because the lookup tables have to fit in controller DRAM. VAST keeps all reduction metadata in Storage Class Memory across the enclosures, so any compute node can compare a new chunk against the entire cluster as one reduction realm. That far larger similarity scope, on fine ~32KB chunks, is what finds the near-duplicates legacy systems never see - the core thesis of “all data reduction is not created equal”. Metadata points at bytes, not blocks, so a chunk that reduces to 29,319 bytes occupies 29,319 bytes with no packing waste.

Conceptual illustration; unit sizes are illustrative. Reduction ratios vary by workload (VAST-reported): ~2:1 on CGI/animation, ~4:1 on Splunk, up to ~22:1 on backup data.

The Element Store & the V-Tree

The Element Store maps physical flash into user-facing “Elements”, files, S3 objects, tables and block volumes, in one namespace. The V-Tree is the metadata structure behind it: a wide, shallow B-tree variant whose nodes live on SCM and point to bytes, not blocks. Each level fans out roughly 512×, so a handful of hops can address on the order of 100 trillion elements, and because pointers reference exact byte ranges, copy-on-write snapshots and clones cost almost nothing. Take a snapshot below to see the new root reuse existing subtrees.

metadata in SCM · pointers address bytes, not blocks

Protocol & Data Access Layer

NFS 3/4, RDMA + GDS

Files

SMB 2/3

Files

S3 / RDMA + GDS

Objects

NVMe / TCP

Block

SQL, Python, Arrow, Kafka

Tables

SQL, LangChain

Vectors

DataEngine

Functions, Triggers, Pipelines

Equal performance · Equal data access

Element Store: Unified Data Layer

7

levels deep

512x

wider each level

≤ 7

hops to any element

~100T

elements addressable

Metadata - Shared-Everything V-Trees in Storage Class Memory

V-Tree root
L1
index nodes
x512
L2
index nodes
x512
L3
index nodes
x512
L4
index nodes
x512
L5
index nodes
x512
L6
index nodes
x512
L7
leaf - byte-range pointers

Data - capacity-efficient blocks in hyperscale flash

QLC flash - the leaf pointer addresses an exact byte range, with no block rounding

Wide and shallow

The V-Tree is 7 levels deep and each level fans out ~512x, so any of ~100 trillion elements is reached in 7 or fewer hops - versus the tens or hundreds of redirections a deep B-tree needs. The whole structure lives in SCM as one global, shared-everything namespace, so no cache-coherence chatter between nodes is required.

Copy-on-write snapshots

Take a snapshot to add a second root that reuses every level below it - pointer-based, so no bytes are duplicated.

Simplified from VAST's published Element Store / V-Tree design (VAST-reported: 7 levels, ~512x fan-out per level, ~100 trillion elements). Every protocol resolves to the same Elements with equal performance and equal access.

One namespace, every protocol

Because every protocol resolves to the same Element, NFS, SMB, S3 and GPUDirect Storage clients all reach the same bytes simultaneously, with no copies and no gateway translation layer. That matters for AI because a pipeline rarely speaks one protocol: data is ingested over S3, curated over file, streamed to GPUs over GPUDirect, and served back to inference and RAG, all against a single copy. Step through the stages to see which protocol each uses and why a unified namespace removes an entire class of copy-and-sync work.

One AI pipeline, one copy of the data

One unified namespace - the same bytes, no copies, no sync, no gateway
IngestS3

Apps, sensors, and data pipelines land raw data over S3, the lingua franca of cloud-native ingest. It arrives directly in the namespace, with no landing-zone bucket to later copy out of.

Without multi-protocol access, each stage needs its own silo and you copy or sync data between an object store, a file store, and a training cache, paying for the capacity several times and fighting drift. VAST serves NFS, SMB, S3, and GPUDirect Storage against one set of bytes, so the whole loop, ingest to inference, runs on a single copy.

Why this matters for AI / GPU workloads

AI infrastructure has an asymmetric appetite: training and inference want enormous, steady throughput to keep GPUs fed, while datasets grow into the petabytes on a different curve. DASE matches that shape.

Asymmetric scaling

Scale GPU-facing throughput by adding CNodes without buying more petabytes - and grow capacity without buying more compute. That is exactly the asymmetry AI pipelines need.

Cheap snapshots & clones

Pointer-based, copy-on-write snapshots cost almost nothing, so reproducible training datasets and experiment branches are practically free.

Near-zero capacity tax at PB scale

Wide locally-decodable erasure coding keeps overhead near 2-3% even on huge drives, with rebuilds cheap enough to run on multi-PB clusters.