-
Notifications
You must be signed in to change notification settings - Fork 0
GPU Governor and Tuning
⚠️ Read the Voltage curve section before pushing GPU clocks. The wrong curve can hard-freeze the whole machine.
The standard amdgpu sysfs knobs (power_dpm_force_performance_level, pp_dpm_sclk) do not control the BC-250 — they return errors. On the Cyan Skillfish GPU only the SMU sets the clock, through the OD voltage curve (pp_od_clk_voltage, vc <point> <MHz> <mV>).
SkillFishOS uses the cyan-skillfish-governor (Rust) as a systemd service, configured in /etc/cyan-skillfish-governor/config.toml. It is load-based: it samples a busy/idle bit and settles on the lowest frequency that keeps GPU utilisation inside the [load-target] band, idling to 350 MHz when nothing uses the GPU.
Switch profiles from the SkillFishOS Tuner → GPU section → Governor mode:
| Mode | load-target |
Behaviour |
|---|---|---|
| Balanced (default) | upper 0.95 / lower 0.70 |
Raises the clock only as much as the workload needs — cooler and quieter. |
| Performance |
upper 0.20 / lower 0.08 + snappier ramp |
Holds the top safe-point under any gaming load (best FPS in GPU-bound titles). Still idles to 350 MHz on the desktop. |
Measured — Black Myth: Wukong benchmark, 1080p:
| Balanced | Performance | |
|---|---|---|
| Average FPS | 100 | 111 (+11%) |
| 5%-low FPS | 92 | 102 (+11%) |
An older note claimed 2000 ≈ 2230 MHz gave identical FPS. That holds for gameplay (more CPU/draw-call bound); the benchmark flythrough is heavier and is GPU-bound, so holding a high clock clearly helps there. Performance mode runs hotter — keep the fan high (the Tuner controls it).
The governor follows a multi-point voltage curve of safe-points. SkillFishOS ships:
[[safe-points]]
frequency = 350
voltage = 700
[[safe-points]]
frequency = 1500
voltage = 900
[[safe-points]]
frequency = 2000
voltage = 1000
[[safe-points]]
frequency = 2200
voltage = 1000Two rules, both learned the hard way:
- 1000 mV is the practical stable ceiling at ~2150–2200 MHz. 2230 MHz @ 1000 mV is undervolted. Pushing the top point to 2230 @ 1000 mV, or pinning a fixed 2230 MHz OD point, can hard-freeze the machine — a total hang where the kernel still answers ping but everything else is dead, and nothing is written to the logs. 2230 needs 1000–1060 mV and depends on the silicon lottery.
-
Use a smooth, multi-point curve, not a 2-point line. A
350/700 → 2230/1000two-point curve makes abrupt clock/voltage transitions and was reproducibly able to hang the box on the load→idle transition. The mid-points (1500/900,2000/1000) keep transitions gentle.
The Tuner therefore caps the GPU max at 2200 MHz @ 1000 mV (the validated-stable point), always writes the multi-point curve, and reloads the governor gently (stop → settle → start) instead of an abrupt restart. 2000 MHz @ 1000 mV is the safe starting point for every board.
The Tuner's GPU Max frequency / Max voltage sliders write the curve's top safe-point. The Test (benchmark) button applies a setting, runs vkpeak, and reports the score/temperature so you can validate stability before keeping it.
If you really want >2200 MHz, raise the voltage first, increase the clock in 50–100 MHz steps, and stress-test 30+ minutes at each step. There are no guarantees above 2200 @ 1000 mV.
Memory bandwidth was measured (clpeak/OpenCL) at ~350–367 GB/s — healthy, not a bottleneck. The Memory Clock 450 MHz the driver reports is a reporting convention, not a 1/4 clock; the memory clock is not adjustable on the BC-250.
Getting started
Apps
Tuning & hardware
Using it
Developers