e177e1f9

By: syd <syd@kronor.io>

Measure evaluation scaling: it is flat, so the architecture holds at size

The one open question that could have changed the verdict. Evaluation happens
on every invocation before any build, and it was the cost that plausibly grew
with the workspace.

It does not. From 24 to 389 projects, sixteen times the projects, median
evaluation goes from 107 ms to 148 ms: about 1.4x, or roughly 0.11 ms of
marginal cost per project. Per-project cost falls from 4.5 ms to 0.4 ms, which
is the signature of a fixed cost dominating.

Checked against the measurement errors this experiment has already made.
Forcing all 778 build and test derivation paths on a never-evaluated workspace
takes 150 ms cold against 148 ms warm, so no evaluation cache is being
measured. Forcing all 1950 attributes including the per-test-file variants
takes 144 ms, the same within noise, which confirms the cost is startup rather
than per-project work. The first-ever evaluation of a given content, which also
copies each project fileset into the store, is the max column: 179 ms at 389
projects.

So criterion two, evaluates quickly, is satisfied with a wide margin at the top
of the expected range.

Total

4m26s

Created Started Finished

Time to Start Worker time Duration Time to finish Idle
Config 0s 1s 1s 1s 0s
Eval 1s 4m25s 4m25s 4m27s 0s
Build 4s 5s 4m15s 4m19s 0s
Suite 0s 4m33s 4m26s 4m27s 0s

Timeline

Config Eval Build
0s20s40s1m1m20s1m40s2m2m20s2m40s3m3m20s3m40s4m4m20s