benchmarking/locust: capture cluster hardware facts and density frontiers. - #1603
Nishanth Kotla (Nishanth29) wants to merge 5 commits into
Conversation
Max Smythe (maxsmythe)
left a comment
There was a problem hiding this comment.
Thanks for this! Left a few initial comments.
|
Thanks Max, good catches. All six are fixed: reverted the boomer switching, Also fixed some telemetry bugs, rewrote the tests and documented the flags and output fields in the README. |
Max Smythe (maxsmythe)
left a comment
There was a problem hiding this comment.
Some minor questions about structure. Biggest questions are around some odd things that look like anticipated edge cases (such as worker pods in an unexpected namespace), and a question about how custom load shapes interact with the idea of a steady state.
Fixes #1590
What this PR does
In alignment with the Actor Density Benchmark Specs, this PR teaches the Locust runner to discover cluster capacity, record actor density frontiers, and harvest server-side Prometheus metrics into
stats.jsonlandserver_summary.json. Discovery lives in its own module,benchmarking/locust/cluster_facts.py, rather than insiderunner.py.Proposed Changes
Cluster hardware discovery (
cluster_facts.py,locust.yaml)kubectlsubprocess.liston nodes and pods.--no-cluster-factsskips discovery, since listing is expensive on a large cluster.Density frontiers (
trial_summaryinstats.jsonl)actors_per_node,actors_per_vcpu,actors_per_gb_ram.ap_ratio_p50/p90/p99over the steady-state samples rather than one average, so it is visible whether the system actually pegs at 1.raw_configuration, so ratios can be re-derived after the fact.Server ground truth (
server_telemetry.py,server_summary.json)ate_workerpool_workers, as packing percentiles plus the underlying timeseries.server_telemetry.pyuses only the standard library, every call with a timeout. An unreachable Prometheus leaves nulls rather than failing the run, and--prometheus-urlretargets it.status.jsonkeeps its existing minimal schema.container="node"relabel and the snapshot queries need themetrics/rawpipeline. Merged ahead of those, the PSI and snapshot fields come backnull.Docs
benchmarking/README.mdcovers the new flags and every field in the output files.How this was tested
test_cluster_facts.pyandtest_server_telemetry.py, covering percentile edges, steady-state detection, counter resets across an atelet restart, and the null-versus-zero rules.stats.jsonl,server_summary.jsonis populated, andstatus.jsonis unchanged.References
Agent Substrate: Actor Density Benchmark Specs