···113113This matrix only includes operation/count pairs measured with the same unit of
114114work. Tranquil's `get_record_cid` and `list_records` are record-index
115115operations: `list_records` returns `rkey + record_cid`, not record body JSON.
116116-The official PDS probe measures its actor-store read paths with Vitest. That is
117117-apples-to-apples for the internal read operations, but not for concurrency
118118-curves: Vitest reports a single async benchmark loop, while ZDS and Tranquil
119119-also have explicit caller-count runs.
116116+The official PDS probe measures its actor-store read paths with Vitest. Its
117117+single-operation rows are apples-to-apples for the internal read boundaries. Its
118118+batched CID rows are useful throughput shape checks, but their p99 values are
119119+batch latencies, not per-operation latencies from the ZDS/Tranquil harness.
120120121121-Summary: ZDS is fastest in the single-caller read probes, Tranquil is fastest in
122122-the 10/100 caller CID lookup probes, and the official PDS is slower in these
121121+Summary: ZDS is fastest in the single-caller read probes. Tranquil is fastest in
122122+the direct 10/100 caller CID lookup probes. The official PDS is slower in these
123123microbenchmarks because the probe goes through its actor-store/test-network
124124-stack rather than a bare SQLite reader. For writes, official PDS is faster than
125125-ZDS in the single-caller row, Tranquil is faster than ZDS at 10 callers, and ZDS
126126-is faster than Tranquil at 100 callers but with a worse p99/max tail.
124124+stack rather than a bare SQLite reader. For writes, ZDS is fastest in the
125125+single-caller row, Tranquil is faster than ZDS at 10 callers, and ZDS is faster
126126+than Tranquil at 100 callers but with a worse p99/max tail.
127127128128| operation | callers | zds | tranquil | official PDS |
129129|---|---:|---:|---:|---:|
130130-| apply one record commit | 1 | 642 ops/s, p95 2.9 ms | 287 ops/s, p95 4.1 ms | 486 ops/s, p99 3.9 ms |
131131-| current record CID lookup | 1 | 414k ops/s, p95 4 us | 96.8k ops/s, p95 15 us | 3.2k ops/s, p99 477 us |
130130+| apply one record commit | 1 | 642 ops/s, p95 2.9 ms | 287 ops/s, p95 4.1 ms | 448 ops/s, p99 4.0 ms |
131131+| current record CID lookup | 1 | 414k ops/s, p95 4 us | 96.8k ops/s, p95 15 us | 3.1k ops/s, p99 511 us |
132132133133-The current caller-count concurrency matrix is only ZDS and Tranquil until the
134134-official-PDS probe grows explicit concurrent workers.
133133+The direct caller-count concurrency matrix is only ZDS and Tranquil. The
134134+official-PDS rows below it use a batched Vitest probe and are kept separate.
135135136136| operation | callers | ops | zds | tranquil |
137137|---|---:|---:|---:|---:|
···139139| apply one record commit | 100 | 20000 | 1223 ops/s, p95 67.5 ms | 1007 ops/s, p95 109 ms |
140140| current record CID lookup | 10 | 10000 | 222k ops/s, p95 225 us | 455k ops/s, p95 43 us |
141141| current record CID lookup | 100 | 20000 | 211k ops/s, p95 887 us | 537k ops/s, p95 233 us |
142142+143143+Official PDS batched CID lookup:
144144+145145+| operation | batch shape | converted throughput | batch p99 |
146146+|---|---|---:|---:|
147147+| current record CID lookup | 10 callers x 100 lookups | 3.3k lookups/s | 317 ms |
148148+| current record CID lookup | 100 callers x 20 lookups | 3.2k lookups/s | 630 ms |
142149143150Tranquil's metastore `list_records` benchmark is not in this table because ZDS
144151does not currently expose an equivalent "list rkeys and CIDs only" benchmark.
···159166160167| operation | official PDS |
161168|---|---:|
162162-| apply one record commit | 486 ops/s, p99 3.9 ms |
163163-| current record CID lookup | 3.2k ops/s, p99 477 us |
164164-| full getRecord materialization | 3.1k ops/s, p99 469 us |
165165-| full listRecords, limit 50 | 639 ops/s, p99 2.3 ms |
169169+| apply one record commit | 448 ops/s, p99 4.0 ms |
170170+| current record CID lookup | 3.1k ops/s, p99 511 us |
171171+| full getRecord materialization | 3.0k ops/s, p99 525 us |
172172+| full listRecords, limit 50 | 635 ops/s, p99 2.4 ms |
166173167174These are useful for the official-PDS column, but they should not be mixed with
168168-ZDS's caller-count rows. The matching ZDS single-caller rows are:
175175+ZDS/Tranquil direct caller-count latency rows. The matching ZDS single-caller
176176+rows are:
169177170178| operation | zds |
171179|---|---:|
···232240- multi-repo concurrent writes
233241- record-index list latency without record body materialization, across ZDS and
234242 Tranquil
235235-- official-PDS concurrency probe for the same read/write boundaries
243243+- official-PDS direct concurrency harness for the same read/write boundaries
236244- full repo export cost
237245- blob/block store throughput
238246
+1-1
bench/justfile
···55555656# run the official Bluesky PDS read probe from a local atproto checkout
5757official-pds:
5858- ./bench/run-official-pds.sh
5858+ ./run-official-pds.sh
59596060# profile applyWrites stage timing under write concurrency
6161write-profile callers="10" ops_per_caller="500":
···2424- sync event delivery
25252626ZDS, Tranquil, and the official PDS now have matching single-caller numbers for
2727-apply-one-record and current-CID lookup. ZDS and Tranquil also have explicit
2828-10/100 caller concurrency curves; the official probe should grow those workers
2929-before it is included in the concurrency matrix.
2727+apply-one-record and current-CID lookup. ZDS and Tranquil also have direct
2828+10/100 caller concurrency curves. The official probe has a batched CID lookup
2929+shape check, but its latency values are batch latencies from Vitest, not per-op
3030+latencies from the same harness as the ZDS and Tranquil rows.
30313132## read path
3233···53545455| operation | result |
5556|---|---:|
5656-| apply one record commit | 486 ops/s, p99 3.9 ms |
5757-| current CID lookup | 3.2k ops/s, p99 477 us |
5858-| full getRecord | 3.1k ops/s, p99 469 us |
5959-| full listRecords, limit 50 | 639 ops/s, p99 2.3 ms |
5757+| apply one record commit | 448 ops/s, p99 4.0 ms |
5858+| current CID lookup | 3.1k ops/s, p99 511 us |
5959+| full getRecord | 3.0k ops/s, p99 525 us |
6060+| full listRecords, limit 50 | 635 ops/s, p99 2.4 ms |
6161+6262+The official PDS batched CID lookup probe reports:
6363+6464+| batch shape | converted throughput | batch p99 |
6565+|---|---:|---:|
6666+| 10 callers x 100 lookups | 3.3k lookups/s | 317 ms |
6767+| 100 callers x 20 lookups | 3.2k lookups/s | 630 ms |
60686169For tiny records, DAG-CBOR decode and JSON rendering are below useful timer
6270resolution. The important next read benchmark is larger records plus an