# alderbench Sister app to [aldermon](../aldermon) for the same Alder Lake box (i5-12600KF, ASRock Z690M ITX/ax). Runs **comparative benchmarks and CPU stress tests** across stock vs OC/UV configurations, cycling instruction sets so each clock rail (integer / SSE / AVX2) is tested separately — "OCCT but it cycles ISAs", with per-ISA scores written to JSON reports. Standalone — no shared code with aldermon. aldermon owns the live sensors (clocks/temps/power); alderbench owns the workloads + scores. Run them side by side during a sweep to watch what the load is doing. ## Usage ```sh alderbench # TUI picker: Stability | Bench | Core-cycle | Custom alderbench --tui # TUI sweep straight from the config (no picker) alderbench --preset stability # 1-hour ISA-cycling stability sweep (TUI) alderbench --preset bench # comparative scores sweep (TUI) alderbench --preset core-cycle # per-core single-core stability cycle (TUI) alderbench --headless # scripted sweep, no TUI (CI / scripts) alderbench --smoke-workload 7zip-bench # run one workload 3s, print verdict + score alderbench --report runs/1756-c2c-latency.json # print a past run's summary alderbench --list # enumerate workload names alderbench --help # usage ``` The TUI needs a real terminal; `--headless` covers scripts. ## Workloads | name | what it does | score | |------------------|-----------------------------------------------------|------------------| | `stress-ng-cpu` | integer stressor, all `--cpu-method`s (stability) | verdict only | | `y-cruncher-sse` | SSE4.2 FFT stress via the SNB variant binary | bits/sec per algo| | `y-cruncher-avx2`| AVX2 FFT stress via the HSW variant binary | bits/sec per algo| | `7zip-bench` | `7z b` compression benchmark | MIPS rating | | `c2c-latency` | cache-line ping-pong across every pinned cpu pair | ns/hop per pair | | `dram-latency` | pointer-chase at L1/L2/L3/DRAM-sized working sets | ns/access per size | Verdicts come from each workload's own self-check (y-cruncher "Passed", 7z exit code, ping-pong sequence integrity, chase cycle integrity) — that's the stability signal per ISA rail. `c2c`/`dram` are in-process (zero-dep: raw `sched_setaffinity` + `Instant`), and double as coherency/memory stability checks. Requirements: `stress-ng` + `7z` on PATH. y-cruncher: download the static build and unpack it under `./bin/` (gitignored) — alderbench invokes the per-microarchitecture variant binaries (`Binaries/11-SNB ~ Hina` for SSE, `13-HSW ~ Airi` for AVX2) directly, never the wrapper. `minecraft-server` is planned; the run loop skips it with a warning. ## TUI keys Picker: `j/k`/arrows navigate, `Enter` starts, `q` quits. Editor: `j/k` rows, `←/→` fields, `Enter` on Name cycles workloads, on Cores cycles `0-15`/`0-11`/`12-15`, on Duration/Cooldown/Loops opens numeric input; `a`/`d` add/delete rows, `` reorder. During a sweep `q` cancels — while a workload runs the panel heartbeat-refreshes every few seconds (never at render-loop frequency, so it won't steal CPU from single-core runs); workloads that outrun their estimate (7z's fixed passes) say so explicitly. Watch aldermon for live load. ## Config `alderbench.conf` is searched at `./` → `~/.config/alderbench/` → `/etc/alderbench/` (first match wins). Simple `KEY = VALUE` lines; `#` comments; unknown keys ignored; out-of-range numerics rejected. ```ini poll_ms = 250 # tick interval (50..60000) cool_secs = 15 # cooldown between workloads (0..3600) loop_count = 1 # sweep repeats; 0 = infinite report_dir = runs # where JSON reports go bin_dir = bin # where the y-cruncher bundle lives # Either a comma list (names inherit per-workload defaults)… workloads = stress-ng-cpu, y-cruncher-sse, 7zip-bench # …or per-entry blocks: workload.1.name = y-cruncher-avx2 workload.1.duration_secs = 300 # estimate, not a hard stop workload.1.cores = 0-11 # taskset-style range: 0-11 P-only, 12-15 E-only ``` `duration_secs` is a display estimate: workloads run until they finish themselves (self-terminating stressors) or you quit; `7z b`'s fixed passes may overrun it. ## Reports One JSON file per finished workload: `runs/-.json`, schema version 2: ```json {"schema_version":2,"workload":"c2c-latency","params":"30s cores=0-15", "started":1758366463,"isa_class":"other","verdict":{"kind":"clean"}, "score":{"kind":"c2c","pairs":[{"a":0,"b":1,"ns":28.0}, ...]}} ``` `alderbench --report ` prints a one-line human summary of any of these. Diff report dirs across OC configs to compare scores. ## Install ```sh make check # fmt + clippy + tests make install # DESTDIR/PREFIX aware; bin → $(PREFIX)/bin, # conf → /etc/alderbench/alderbench.conf ``` Gentoo-friendly: `make install DESTDIR="$D" PREFIX=/usr` in an ebuild.