This page keeps only the latest public benchmark summaries. Raw benchmark logs and one-off profiling runs are intentionally not committed.

Use these numbers as reproducible reference points, not universal hardware claims. Throughput and latency depend on VM type, local NVMe availability, shard count, client concurrency, pipeline depth, payload size, and resource guards.

FerricFlow: latest Azure runs

Workload shape:

1,000,000 flows
single FerricStore server VM
single Python SDK client VM
Flow queue/workflow workers
live mode: create and process run together

The best balanced 16-vCPU server result was with 32 Flow shards.

ModeAPI shapeServer shardsCreate rateProcess/complete rateEnd-to-end rate
Sync liveQueue worker32--53,790 flows/s
Sync liveWorkflow worker32--54,060 workflows/s
Async liveQueue worker3295,896 flows/s-45,608 flows/s
Async liveWorkflow worker3297,196 workflows/s-47,888 workflows/s

Server CPU scale

These runs used default server behavior and live 1M-flow workloads.

Server sizeSync queueSync workflowAsync queueAsync workflow
4 vCPU15,854/s16,005/sfailed under write timeoutfailed under write timeout
8 vCPU30,113/s27,674/s23,882/s24,712/s
16 vCPU46,964/s45,375/s41,131/s41,121/s

16-vCPU shard sweep

Sync live runs:

Server shardsQueue end-to-endWorkflow end-to-end
1646,964/s45,375/s
2451,644/s51,977/s
3253,790/s54,060/s
6454,287/s53,736/s

Async live runs:

Server shardsQueue createQueue end-to-endWorkflow createWorkflow end-to-end
1686,892/s41,131/s90,504/s41,121/s
3295,896/s45,608/s97,196/s47,888/s
6496,219/s43,997/s95,195/s45,137/s

Interpretation: 32 shards was the best balanced setting in these Azure runs. 64 shards slightly improved queue-only sync throughput, but 32 shards was better for the workflow mix.

External Reference: DBOS Published Numbers

DBOS publishes Postgres-backed durable workflow benchmark numbers that are useful as an external reference point. These are not an apples-to-apples comparison with the FerricFlow tables above: DBOS used a single AWS RDS Postgres db.m7i.24xlarge instance with 96 vCPUs, 384 GB RAM, and 120K provisioned IOPS on io2 storage, while the FerricFlow numbers above are from separate Azure server/client VM runs with FerricStore's native storage engine.

Source: DBOS, "Does Postgres Scale?", April 23, 2026.

DBOS workloadPublished resultNotes
Raw Postgres point writes144,000 writes/sSingle-row inserts from async Python clients, one transaction per row.
Direct no-op durable workflows43,000 workflows/sDBOS says each workflow performs two Postgres writes, so this is about 86,000 workflow-status writes/s.

DBOS docs summarize the same scale as >40K workflows or steps per second for a DBOS application using one Postgres database: DBOS Architecture and DBOS Production Checklist.

Older DBOS workflow-latency benchmarks against AWS Step Functions are a different workload shape, but they give another public DBOS reference: DBOS vs. AWS Step Functions Performance Benchmark reports DBOS Transact as 25x faster than standard Step Functions in their tests, with a 5-step workflow around 40 ms in DBOS versus over 1 second in Step Functions, and Express Step Functions around 3x slower than DBOS.

KV SET/GET: native protocol baseline pending

The older KV benchmark shape is no longer valid because the standalone server now exposes the Ferric native binary protocol. Publish KV SET/GET numbers only after rerunning them through a native SDK or native protocol benchmark client.

The replacement benchmark should report at least:

FieldRequired shape
TransportFerric native TCP/TLS protocol
WorkloadSET and GET with fixed value size
Client concurrencyConnections, lanes, in-flight requests per lane
Durability modeQuorum durable writes vs any async mode being tested
HardwareServer/client VM size, storage type, filesystem
MetricsThroughput, p50, p95, p99, p99.9

Reproducing the shapes

FerricFlow benchmarks are run from the Python SDK repository with the optimized queue/workflow benchmark scripts. KV benchmarks should use a native-protocol SDK/client shape for current FerricStore releases.

For public reporting, prefer the 1M-flow live results. Add KV tables only after native-protocol SET/GET runs are available.