Hardware used for this run

OS and kernelLinux 6.17.0-1022-azure
CPU modelAMD EPYC 7763 64-Core Processor
Host logical cores4
Effective cores4
Affinity cores4
Allowed affinity0-3
Pinned CPU0
CPU quota
Host RAMMemTotal: 16373452 kB
Available RAMMemAvailable: 15189052 kB
Memory limit
Test DB filesystemtype=ext4 total_kib=151263856 available_kib=86942268
Rustrustc 1.101.0-nightly (4ebd25825 2026-10-15)
SQLite3.53.2
Engine revision6b1dcda388ef6e57acf2f07eb7b91852f426e5ca
Dirty sourcefalse

Scanner driver: scheduler

Workload and progress

One CPU; file-backed SQLite with real migrations, WAL and synchronous=NORMAL. Plain custody and the production scanner run against a deterministic scripted daemon while independent SQLite and HTTP status readers plus an admin writer issue background work. A separate connection holds a SQLite write lock for a fixed interval each tick. The capacity sweep uses immediate RPC responses; the fault points below add scheduled RPC delay and failures, and a longer blocked writer followed by a drain period. A blocked writer is a contention proxy, not a real disk fault. Capacity below is observational for this workload and machine.

Observed capacity bracket: at least 128 tenants sustainable; no overload observed. Workload: open orders per tenant as recorded in run.json plus one tenant with 300 open orders, one transaction per block, one new block per tick, 2 database readers, 2 HTTP status readers, 1 admin writer, a 25 ms SQLite write lock per tick, 5 second tick budget, at most three blocks of oldest lag. Only this machine and schedule were tested.

Measured tick time by tenant count (ms)
3264128
Lagging tenants after drain
3264128
Whole-process peak resident memory (bytes; Linux)
3264128
TenantsStatusMeasured timeTick p50/p95/p99Timer delayDB reads/writesHTTP readsMax DB read/write latencyMax queue wait read/writeMax query read/writeMax HTTP latencyWAL pending pagesLag after drainRaw data
32sustainable184 ms46/46/46 ms1845 µs80/19421219/33531 µsn/a/33453 µsn/a/33572 µs1193 µs00JSON
64sustainable221 ms55/56/56 ms2079 µs96/28501301/33915 µsn/a/33460 µsn/a/33591 µs2620 µs00JSON
128sustainable298 ms74/75/75 ms2055 µs130/40681662/34488 µsn/a/32943 µsn/a/33940 µs3232 µs00JSON

Progress timelines

Blue: network high-water; orange: slowest tenant cursor. The gap is work still to catch up.

32 tenants

64 tenants

128 tenants

Fault recovery

FaultResultFault detailFinal slowest cursorRaw data
transient daemon RPC failures under SQLite contentionrecovered6 injected RPC failures8JSON
blocked SQLite writer, then recoveryrecovered1500 ms per tick for two ticks8JSON
single custody scan slot under concurrent tenant scansrecovered128 scans; max slot wait 107843 µs8JSON

The custody fault uses one scan slot with a scripted 5 ms service delay while retaining real plain-custody matching. Actual slow disk commands and process-kill recovery are not measured by this fixture. The RPC fault point uses deterministic transient failures and a drain period; the capacity sweep has no RPC delay.

Run metadata · Hardware JSON