Skip to content

docs(bench): a ratio of timings is not a ratio of counts, and only one reproduces - #65

Merged
DanielWLiu07 merged 1 commit into
mainfrom
docs/timing-ratios-are-not-count-ratios
Sep 3, 2026
Merged

DanielWLiu07 merged 1 commit into
mainfrom
docs/timing-ratios-are-not-count-ratios

Conversation

@DanielWLiu07

Copy link
Copy Markdown
Owner

The fanout table quotes 45.9x at 16 subscribers. Three runs today measured 39.9x, 43.6x, 43.9x — at 777k, 870k, 875k updates/sec against the tabulated 899k.

Nothing regressed. It's a throughput, and a throughput moves with load.

The two columns are different kinds of number

The doc didn't say so:

  • sync column — structural. Pinned near 20,000 updates/sec at every fan-out size because that's exactly 1/50 µs. Lands there on any machine.
  • conflating column — a measured throughput.

Their quotient inherits the instability of the second, so quoting it to three significant figures implies a stability it doesn't have.

Why this matters past one table

The audit this week found every figure that survived unchanged was a ratio of counts or bytes — triangles merged, bytes resident, allocations per message. The voxel engine's are now known to be byte-identical between an arm64 M4 and an x86-64 CI runner.

Every figure that turned out wrong was a timing, or a ratio of timings.

So "gate ratios" was too coarse. The operative distinction is what the ratio is over.

The control

The matching engine's 2.1x survives this unchanged — five runs today measured 2.14 to 2.22x. The documented figure was already the right shape.

It's quoted to two significant figures rather than three. That's the whole difference: significant figures are themselves a claim about stability, and one extra digit is the cheapest way to overstate a result without noticing.

…e reproduces

The fanout table quotes 45.9x at 16 subscribers. Three runs today measured
39.9x, 43.6x and 43.9x, at 777k, 870k and 875k updates/sec against the
tabulated 899k. Nothing regressed - it is a throughput, and a throughput
moves with load.

The two columns in that table are different kinds of number and the doc
did not say so. The sync column is structural: pinned near 20,000
updates/sec at every fan-out size because that is exactly 1 / 50
microseconds, and it lands there on any machine. The conflating column is
a measured throughput. Their quotient inherits the instability of the
second, so quoting it to three significant figures implies a stability it
does not have.

This matters beyond one table. An audit of both repos this week found that
every figure which survived unchanged was a ratio of counts or bytes -
triangles merged, bytes resident, allocations per message - and the voxel
engine's are now known to be byte-identical between an arm64 M4 and an
x86-64 CI runner. Every figure that turned out wrong was a timing or a
ratio of timings. "Gate ratios" was too coarse a rule; the operative
distinction is what the ratio is over.

The matching engine's 2.1x survives this unchanged, which is the useful
control: five runs today measured 2.14 to 2.22x, so the documented figure
was already the right shape. It is quoted to two significant figures
rather than three, which is the whole difference.
@DanielWLiu07
DanielWLiu07 merged commit 924cbb4 into main Sep 3, 2026
9 checks passed
@DanielWLiu07
DanielWLiu07 deleted the docs/timing-ratios-are-not-count-ratios branch September 3, 2026 01:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant