VAST Data
VAST Architecture: DASE
IntermediateDisaggregated, 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.
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
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.
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.
↑ 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.
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-reportedfilled = data strips read on rebuild (~37 of 146) · outlined = parity strips
lower is better
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.
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
new hash - stored in full as the first copy
storedhash 0xA17F collides with a stored block - keep a pointer
dedupedhash 0xA17F collides with a stored block - keep a pointer
dedupedMISSED - different hash (only near-identical), so stored in full
stored fullnew hash - stored in full as the first copy
storedhash 0xC93D collides with a stored block - keep a pointer
dedupedWhy 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.
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
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
Data - capacity-efficient blocks in hyperscale flash
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
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.