UmweltDocs
Reference/Performance

Performance

Measured on a laptop, against a generated town of 40 characters over 3,360 days. These are local measurements of release 0.1.0, not a promise for your machine: run them yourself with the commands at the end.

At a glance

55–65µsholds: does one character know this?
1.35msa page of 50 Holdings about one entity
464msa night of 2,000 conversations, in one batch
398MiB504,040 Holdings in one file

Against the targets

Each bar is the sample p99 of warm-cache runs, as a share of the target set before measuring. The white line is the target. All four are met.

holds p9998 µs · target 200 µs
holdings (about, 50) p991.51 ms · target 2 ms
transmitBatch (2,000) p99493 ms · target 500 ms
file size of the town397.9 MiB (417 MB) · target 450 MB

The machine

CPUAMD Ryzen 5 5625U, 12 threads
Memory15.4 GiB
SystemWindows 11
Buildrelease, rustc 1.97.1
Datasettown, seed 42
Holdings504,040
Durabilitynormal
Noiseabout ±10% run to run

The town has 40 agents over 3,360 days, a day per tick. Each day adds 100 authored Holdings and 50 tellings through commitBatch and transmitBatch. It is generated from a seed, with a fixed clock and fixed ids, so every run measures the same data.

Writes

OperationMeanSample p99
commit1.45 ms3.28 ms
commitBatch (100)19.3 ms24.1 ms
transmitBatch (2,000)464 ms493 ms
witness (40 witnesses × 3 claims)85 ms123 ms
holding.adjustBatch (2,000)471 ms507 ms
Open the file4.02 ms4.94 ms

The reads behind the targets: whoHolds takes 2.64 ms on average (2.82 ms sample p99).

Drafts and axes

Reads of a draft always check transitions, and each level of nesting adds an ancestor. Reads on an additional axis look up each row’s position on it.

ReadMainDraft, depth 1Draft, depth 3Reading axis
holds55–65 µs39 µs101 µs102 µs
holdings (about, 50)1.35 ms1.80 ms1.53 ms1.67 ms

339,421 vectors of 384 dimensions, 665 MiB. Search is exact, so its cost follows the number of documents the read can see.

SearchMeanSample p99
One holder (8,325 vectors), page of 2088 ms106 ms
Narrator (every Fact and event)865 ms893 ms
Hybrid, one holder, text “gift”1.11 s1.23 s
embedding.put, 1,000 vectors27 ms30 ms

Built for prompts, not frames. The town gives a vector to every Holding, far more text than a character keeps. With hundreds to a few thousand documents per holder, a search takes a few milliseconds. The hybrid figure is high because every Holding in the town has the same text, so “gift” matches 336,000 of them.

Sample p99 is not request p99. Criterion’s p99 is a percentile of batch averages. Measured one call at a time on a fresh copy, holds has a p99 of 116 µs, and the first night of 2,000 tellings takes 1.31 s while the file is read into the page cache.

Measure it yourself

Terminal
cargo build -p umwelt-cli --release
cargo bench -p umwelt-api --bench engine -- --noplot
node scripts/bench-record.mjs

The method, the optional groups for axes and vectors, and the raw results are in benchmarks/README.md.

Was this page helpful?