LangChain agent benchmark · Part 2 · The write path · 5 platforms · 3 independent runs · 18 timed runsLangChain

Your agents. Read and write faster.

Part 1 measured reads: ABS was 14–17% faster. Then we measured writes, where the lead is bigger still — 24–28% faster at sustained load and first in all 18 runs.

Part 1 · Reads14–17%

faster task completion vs AWS io2 · cold reads, 100k tasks

Read Part 1
Part 2 · Writes24–28%

faster end-to-end vs the best AWS platform · 100k checkpoints

The workload
Checkpoint commits
PostgresRedisQdrant

WAL fsync · AOF append · vector upserts · every commit waits on disk

Reproducibility
18/18runs won
Concurrency
1,000 agents × 100 tasks

100,000 checkpoints total

One benchmark · Two paths

Agents read context and write state. Part 1 measures the read path: cold vector search, cache and checkpoint reads at 100k tasks. Part 2 measures the write path: state-serialization checkpoints that fsync after every agent step. ABS finishes first on both, and the lead grows with load.

Read Part 1 · The read path
Key findings · the write path

Summary · Every checkpoint waits on disk. ABS waits the least.

Agent runtimes serialize state and commit a checkpoint after every step: small synchronous writes that must fsync before the agent proceeds. We benchmarked that write path on the same five platforms as Part 1 — pure checkpoint cycles (write) and read-context-then-commit (mixed), three scales, three runs each. The four numbers that matter:

Task completion
18/18runs won end-to-end

ABS finishes first in all 9 write and all 9 mixed runs , with the margin growing from ~10% at moderate load to 24–28% at sustained load.

Commit latency
lower Postgres commit p99

105–107 ms vs 210–232 ms at 100k checkpoints (write, steady state). 79–82 ms vs 158–175 ms in mixed mode.

Task p99
33–34%lower task p99 at scale

918–925 ms vs 1,332 ms+ (write) · 980–1,132 ms vs 1,487 ms+ (mixed) at 100k checkpoints.

Worst window
429–536ms worst 10s-window p99

Lower than every AWS platform’s worst (566–744 ms) in steady state, while its typical window is roughly half theirs.

Background · why the write path decides agent latency

Background · Your agent doesn’t proceed until the disk says so.

A LangGraph-style runtime commits a checkpoint after every step: serialize agent state, INSERT + COMMIT to the checkpointer, update the latest-state pointer, persist new memories. Each is a small synchronous write that must reach disk — the agent’s next step is blocked on fsync.

Part 1 measured the read side: ABS was fastest end-to-end in all 9 runs. The open question this suite answers: does that hold on the write path, and does dynamic IOPS hold predictable latency bounds under sustained write pressure? Checkpoint payloads grow with step count (2 KB base + 2 KB per step, capped at 64 KB), mimicking accumulating message history.

Durability is pinned, not tuned

On a write benchmark the fsync policy is the result, so it’s identical on all five platforms and documented: Postgres synchronous_commit=on (every COMMIT waits on WAL fsync), Redis appendonly yes (AOF, everysec default with an always variant), Qdrant WAL defaults with wait=true upserts. No platform gets a durability discount.

What we’re testing · same five platforms as Part 1

The setup · One checkpoint cycle. Three disk-bound commits.

Same five platforms and VM shapes as the read suite (4 vCPU · 16 GB · 256 GB), same preloaded 5M-vector dataset across 50 Qdrant collections, so writes land on realistically filled volumes. Each task is one checkpoint cycle:

Postgres INSERT + COMMIT
What it models
Serialize agent state to the checkpointer
Disk path
WAL fsync · commit waits on disk
Redis SETEX
What it models
Latest-state pointer
Disk path
AOF append
Qdrant upsert · 5 vectors · wait=true
What it models
Agent memory write, random tenant
Disk path
Qdrant WAL

Two modes run back-to-back — write: pure checkpoint cycles, commit-latency bound; mixed: each task first reads context (1 Qdrant query, 1 Redis get, 1 Postgres select), then commits — the realistic agent-runtime shape. 10 concurrent workers, matching Part 1. Upsert IDs are deterministic per (agent, task), so repeat runs overwrite the same points instead of growing the dataset.

Test 1 · Raw disk write floor (fio)

1  FIO · Writes are a closer contest than reads. io2 wins raw fsync.

4K random write (O_DIRECT, QD=64×4) plus a QD=1 --fsync=1 test; fsync latency is the number that predicts checkpoint commit latency. Two honest signals: ABS’s write floor (35K–104K IOPS) is a far closer contest than its 261–313K read floor, and io2 beats ABS on raw fsync latency (~1.0 ms vs 1.1–1.9 ms) while gp3’s ~2.7 ms fsync handicaps it at any provisioned IOPS.

Nirvana ABS
Random write IOPS (range, 3 runs)
35,079–104,083
Fsync latency (range)
1.13–1.91 ms
io2-32k
Random write IOPS (range, 3 runs)
33,052–33,071
Fsync latency (range)
0.97–1.06 ms
io2-64k
Random write IOPS (range, 3 runs)
40,321–40,342
Fsync latency (range)
0.99–1.08 ms
gp3-16k
Random write IOPS (range, 3 runs)
16,507–16,530
Fsync latency (range)
2.73–2.80 ms
gp3-3k
Random write IOPS (range, 3 runs)
3,083–3,097
Fsync latency (range)
2.73–2.75 ms

AWS floors are pinned by provisioned IOPS and reproduce within ±0.1% across all 9 runs. ABS has no fixed provisioned cap, so its floor swings run to run, yet its application-level results are the most stable of any platform (≤2% duration spread in steady state). The raw-disk floor is a ceiling, not a guarantee; the checkpoint results below are what your agents actually feel.

Test 2 · Checkpoint cycles at three scales · write + mixed · ×3 runs

2  ABS finishes first in all 18 runs. The lead grows with load.

Three scales (1k, 10k, 100k checkpoints), two modes, three runs each. ABS wins end-to-end duration in every single run — ~10% margin at moderate load, 24–28% (write) and 25–27% (mixed) at sustained load, where task p99 is 33–34% lower too.

Two write regimes: compare like with like

R1 of the 10k and 100k scales is the first-insert run: Qdrant upserts create new points, triggering HNSW index growth and segment merges — a much heavier disk workload. R2/R3 are steady-state overwrite runs (deterministic IDs re-write the same points). Both are legitimate: first-insert is what ingest looks like; steady-state is what checkpointing looks like. gp3-3k collapses in first-insert at 10k checkpoints (606 s vs ~402 s steady): index-growth I/O saturates its 3,000-IOPS ceiling.

Scale
Mode
Run · R1 = first-insert at 10k/100k

1,000 agents × 100 tasks · 100,000 checkpoints · write · run R3

Nirvana ABS
Duration
75 min
Task p99
919
io2-32k
Duration
105 min
Task p99
1,392
io2-64k
Duration
111 min
Task p99
1,449
gp3-16k
Duration
107 min
Task p99
1,389
gp3-3k
Duration
102 min
Task p99
1,392

Durations are VM-side wall clock for the whole workload; task p99 in ms. ABS leads duration in every scale, mode, and run.

2.1  At sustained scale, everything flips to ABS.

At 10k checkpoints, io2-32k and gp3-16k hold the best per-op Postgres commit tail (78–88 ms vs ABS’s 95–105 ms): io2’s ~1.0 ms fsync floor showing through, the same moderate-load pattern as Part 1. Crank to 100k and it inverts: ABS holds half the Postgres commit p99 and the lowest Qdrant upsert p99. AWS’s fixed IOPS ceilings become the constraint; dynamic IOPS absorbs the load.

Postgres commit · write
gp3-3k
217–219 ms
gp3-16k
212 ms
io2-32k
210–213 ms
io2-64k
224–232 ms
Nirvana ABS· winner
105–107 ms
Qdrant upsert · write
gp3-3k
667–699 ms
gp3-16k
374–386 ms
io2-32k
371–381 ms
io2-64k
395–398 ms
Nirvana ABS· winner
254–282 ms
Postgres commit · mixed
gp3-3k
166–175 ms
gp3-16k
165 ms
io2-32k
158–163 ms
io2-64k
170–171 ms
Nirvana ABS· winner
79–82 ms

100,000 checkpoints, steady-state runs (R2/R3). gp3-3k is the only platform where mixed is slower than pure write: the added read IOPS push it past its ceiling (8,600–8,800 s, 2.6 s task p99). And one AWS-side surprise: all four AWS platforms get ~13% slower in steady-state overwrites vs first-insert (segment rewrite amplification); ABS absorbs the same shift with +6%.

2.2  Does dynamic IOPS hold predictable bounds? Read this both ways.

The question this suite exists to answer. A single aggregate p99 can’t distinguish "consistently 170 ms" from "150 ms with periodic 400 ms spikes," so we tracked p99 in 10-second windows across every 100k-checkpoint run.

Nirvana ABS · steady state (R2/R3)
Median window p99
73–97 ms
Worst window p99
429–536 ms
Worst / median
4.4–7.4×
Nirvana ABS · first-insert (R1)
Median window p99
80–99 ms
Worst window p99
735–964 ms
Worst / median
9.2–9.7×
io2-32k
Median window p99
133–182 ms
Worst window p99
600–678 ms
Worst / median
3.4–4.9×
io2-64k
Median window p99
142–193 ms
Worst window p99
620–744 ms
Worst / median
3.5–4.9×
gp3-16k
Median window p99
140–181 ms
Worst window p99
611–715 ms
Worst / median
3.4–5.1×
gp3-3k
Median window p99
142–193 ms
Worst window p99
566–664 ms
Worst / median
3.0–4.5×

100,000 checkpoints. Median vs worst per-10s-window Postgres commit p99. Read both ways: EBS keeps a flatter ratio, ABS keeps the lower absolute worst window.

In relative terms, EBS is flatter

Worst-window / median ratio is 3–5× on every AWS platform vs 4.4–9.7× on ABS. If your SLO is written as "p99 never exceeds N× typical," EBS is easier to reason about.

In absolute terms, ABS bounds are as good or better

In steady state, ABS’s worst 10-second window (429–536 ms) is lower than every AWS platform’s worst (566–744 ms), while its typical window is roughly half theirs. The high ratio is an artifact of the low baseline, not of taller spikes.

The genuinely wide ABS tail (735–964 ms worst windows) appears only in the first-insert regime — the run where HNSW index-growth bursts make the disk workload heaviest, the same run-to-run variance pattern observed in Part 1’s 100k-task runs. In steady-state checkpointing it does not recur.

Takeaways · what to do with this

3  Six things the write path taught us.

01

ABS wins end-to-end in all 18 runs.

Margin grows from ~10% at moderate load to 24–28% (write) and 25–27% (mixed) at sustained 100k-checkpoint load. Task p99: 33–34% lower.

02

Moderate load mirrors Part 1.

io2/gp3-16k hold the best per-op commit tail at 10k checkpoints (io2’s ~1.0 ms fsync floor showing through) while ABS wins throughput. At 100k everything flips to ABS: half the commit p99.

03

First-insert vs overwrite matters more than platform for some workloads.

Index-growth bursts cost 1.5× steady state on constrained platforms (gp3-3k: 606 s vs ~402 s at 10k checkpoints). Capacity-plan for ingest, not steady state.

04

gp3-3k is fine until it isn’t.

Indistinguishable from io2 at 1k checkpoints, survivable at 10k steady state, and 1.7× worse than everything at sustained mixed load (2.6 s task p99).

05

io2-64k again buys nothing over io2-32k.

Instance-capped at 40k IOPS, and marginally slower in most write runs. Provisioning more IOPS than the instance can push is pure spend.

06

Durability was never traded for speed.

Every platform ran synchronous_commit=on, AOF persistence, and wait=true upserts. The ABS margin is measured with every commit waiting on disk.

Methodology & reproducibility

Open source. Run it yourself.

Same repo as Part 1, state-serialization-writes branch. All five VMs run identical instance size and workload code; storage is the only variable. Every step from terraform apply to the results JSON, including the per-10s-window timeseries, is in the repo.

Compute (identical across platforms)

AWS instance
m6i.xlarge
Nirvana instance
n1-standard-4
vCPU · RAM
4 · 16 GB
Disk size
256 GB (all)

Benchmark parameters

Pre-loaded vectors
5,000,000 · 50 collections
Checkpoint payload
2 KB + 2 KB/step · cap 64 KB
Agents × tasks
100×10 · 500×20 · 1000×100
Workers
10 concurrent
Durability configuration

Postgres synchronous_commit=on · Redis appendonly yes (appendfsync everysec default, always variant available via redis_appendfsync) · Qdrant WAL defaults, upserts with wait=true. Workload shape and mode flags live in ansible/roles/benchmark-runner/defaults/main.yml.

In closing

Every step commits. Your agents read and write faster.

Reads (Part 1): fastest end-to-end in all 9 runs. Writes: fastest end-to-end in all 18 runs, with half the Postgres commit p99 at sustained scale and the lowest absolute worst-window latency — measured with every commit waiting on disk.

Nirvana Labs · LangChain benchmark · Part 2 · state-serialization writes · final results · July 2026

Powering AI, blockchain, and
databases

Talk to Sales