mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-08-09 16:14:40 +00:00
The 1M relayBench run had geode losing the negentropy phase to strfry (initial reconcile 6066ms/27r vs 1270ms/14r; identical-set 1947ms vs 557ms). Three layered benchmarks pin where the time actually goes: - NegentropyReconcileBenchmark (quartz): the kmp-negentropy server loop in isolation is ~200ms for the full 14-round exchange — the reconcile ALGORITHM is not the bottleneck. (An early version showed 22s/139r; that was a benchmark bug — index slices over randomly-sorted ids scatter the diff. Real relayBench slices are contiguous time ranges; monotonic created_at fixes it and matches strfry's round count.) - NegentropyServerReconcileBenchmark (geode): the real in-process geode server over loopback is 3214ms — 15x the library loop. JFR of the server call-trees: ~40% hex/UTF-8/JSON serialization of the payloads, ~26% actual reconcile, rest allocation. The gap is the JVM constant-factor tax on hex-in-JSON, which strfry pays in C++, not a single hotspot. - NegentropyPrefixFingerprintTest (quartz): the one algorithmic lever. Negentropy's fingerprint is an additive sum mod 2^256, so a prefix-sum table answers any range in O(1). Proven bit-for-bit identical to the library over 2000 random ranges, and 460x faster per call — the fix for the ~26% reconcile slice (dominant in the identical-set case). Not yet wired: the library instantiates FingerprintCalculator internally, so shipping prefix-sum needs a kmp-negentropy change (or a quartz-side fast server). Full write-up + artifacts in quartz/plans/2026-07-04-negentropy-reconcile-profiling.md. Benchmarks are CI-safe (small defaults / opt-in gates); JFR via -PnegProfile, scale via -DnegBenchN, geode server bench via -DnegServerBench=1. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012EZeWww5TJnzBZKPoc6mvU