mirror of
https://github.com/XRPLF/rippled.git
synced 2026-09-27 23:38:08 +00:00
The overhead benchmark generated no workload. Each arm was start_cluster -> collect_metrics -> stop_cluster, and collect_metrics only ran the sampler, so the only client traffic was the sampler's own server_info probes at under 1 request/sec. The hottest instrumented paths -- tx.*, txq.*, the transactor stage spans, every rpc.command.* other than server_info -- were never entered, which is where per-operation span cost appears. Both arms now drive rpc_load_generator and tx_submitter at one fixed rate for the whole window, over a [port_ws] listener present in both arms so the listener is not part of the delta. A flat rate rather than a workload profile, because both arms must issue the same work and a profile's phase shaping only adds variance. The sampler also selected xrpld host-wide. run-full-validation.sh leaves its five validation nodes running while the benchmark's three start, so both arms averaged eight processes -- diluting the CPU delta and making memory_rss_mb_peak report a validation node either way. It now takes an optional pid list, and the benchmark passes its own nodes' pids and refuses to measure if it cannot collect them all. consensus_round_mean_ms counted distinct ledger sequences seen by a loop that sampled every 5 s, so it read back 5000 ms for every close time from 2 s to 5 s and a 10% regression measured 0%. Sampling at 2 s -- the close-time floor from ConsensusParms.h:93 -- resolves a 10% regression as at least 9.3%. It also divided by the requested DURATION rather than the measured ELAPSED, which the TPS calculation in the same file already used. Key generation, the workdir setup and the seed read exited 1 under errexit, the code this script reserves for a measured threshold breach, so an infrastructure failure was reported as "telemetry is too expensive". They map to cannot_measure now. No guard is added after the config heredoc: a guard there is read as the heredoc's first line, lands in the generated config and never runs. curl probes across the harness had no --max-time, so a server that accepts the connection and then stops answering blocks forever and the loops' attempt counts stop bounding anything.