Labs
Each lab takes under an hour on a laptop and turns a claim from this mechanism into a number you measured yourself.
- 1
Arena versus `malloc`: the 50× claim
100 million 24-byte objects with malloc/free and with a bump arena; then fragmentation: resident memory against live bytes.
MeasureC compiler, Python - 2
GC cost against headroom: `1 / (H/L − 1)`
A Java program with a live set of small objects at heap sizes from 1.25 to 7 times the live set: GC share of time against 1/(H/L − 1); then the live set off-heap.
MeasureJava 17+, Python - 3
Find your NUMA effect (first touch) and measure it honestly
Scan a 1 GB array with all cores after single-threaded, parallel and interleaved first touch, in a Linux container: a single-node control run.
Real systemDocker - 4
LRU, random and Clock on a cyclic loop
LRU, random and Clock replaying a loop over 100 pages for pools of 1 to 100 frames; then a one-time scan against a hot set under LRU, 2Q and a scan ring.
SimulatePython - 5
Scan resistance in a real database (PostgreSQL)
PostgreSQL with a 128 MB buffer pool: a hot table's pages after a sequential scan of a 1 GB table, and after reading the same table through an index.
Real systemDocker, Python - 6
Grant quantization: count the passes
The external sort pass count ⌈log_(M/B − 1)(N/M)⌉ for 1 TB across memory grants; then PostgreSQL sorting 5 million rows from work_mem 64 kB to 1 GB.
Real systemDocker, Python - 7
The spill cliff: 5% spilled, how much slower?
Measure memory and disk bandwidth, then spill 0%, 5% and 20% of an 800 MB array to a file and back: the slowdown against (1 − f) + 2·f·r.
MeasurePython with NumPy - 8
Sort versus hash under a hot key
50 million rows with 30% on one key under a 500 MB DuckDB limit: SUM/COUNT against median by key, and a grace partitioner's largest partition under 5 hash seeds.
MeasurePython with DuckDB - 9
Queueing on the spill device
Rate-limited sequential writers sharing one SSD at 20% to 100% of its measured throughput: completion latency against S/(1 − ρ).
MeasurePython