GPU Governor Setup¶
The GPU governor is essential for BC-250 performance, enabling dynamic frequency and voltage scaling.
Why You Need a Governor¶
Without Governor¶
- GPU frequency locked at 1500 MHz
- No dynamic scaling
- Higher power consumption at idle (85-105W)
- Lower performance (can't reach 2000+ MHz)
With Governor¶
- GPU scales from 1000 MHz (idle) to 2000-2230 MHz (load)
- Dynamic voltage scaling (700-1000 mV)
- Better temperatures
- Lower idle power (65-85W)
- Better gaming performance
Power Savings: 20-30W reduction at idle
Essential for Performance
The governor is not optional for good gaming performance. Without it, you're stuck at 1500 MHz.
Governor Options¶
Oberon Governor (Original - Recommended)¶
Developer: mothenjoyer69 / TuxThePenguin0 Type: Two-state governor (min/max frequency)
Features: - Simple configuration - Proven stability - Low CPU overhead (0.4%) - Binary states: 1000 MHz idle, 2000 MHz load
Repository: gitlab.com/mothenjoyer69/oberon-governor
Filip's Enhanced Governor¶
Developer: FilippoR Type: Multi-step governor
Features: - Multiple frequency steps (not just 2) - Maintains GPU usage 45-70% - More responsive than original - Available as COPR/RPM package - Latest version: v0.1.4+
Repository: github.com/filippor/oberon-governor
Target: Keeps GPU load in optimal range for consistent performance
Cyan-Skillfish Governor¶
Developer: Magnap Type: Continuous scaling governor
Features: - Continuously adjusts frequency (no steps) - Maintains GPU utilization 70-95% - More precise voltage control - Multiple voltage points supported - Available as .deb, .rpm, AUR, Nix
Repository: github.com/Magnap/cyan-skillfish-governor
Performance: Equivalent to max frequency at constant load, with better efficiency
Installation¶
Option 1: COPR (Fedora/Bazzite - Easiest)¶
COPR repositories are available for easy installation on Fedora and Bazzite. This eliminates the need to compile from source.
For Oberon Governor (Recommended):
# Add mothenjoyer69's COPR repository
sudo dnf copr enable @exotic-soc/oberon-governor
# Install governor
sudo dnf install oberon-governor
# Enable and start service
sudo systemctl enable --now oberon-governor.service
# Check status
systemctl status oberon-governor
For Cyan-Skillfish Governor:
# Add filippor's COPR repository
sudo dnf copr enable filippor/bazzite
# Install cyan-skillfish-governor
sudo dnf install cyan-skillfish-governor
# Enable and start service
sudo systemctl enable --now cyan-skillfish-governor.service
No Compilation Required
Using COPR packages means you don't need to manually compile the governor from source. The packages are pre-built and maintained.
COPR Package Issues
Some users report core dumps with filippor's oberon-governor package. Use exotic-soc/oberon-governor for Oberon, or filippor/bazzite for cyan-skillfish-governor instead.
Option 2: Build from Source (All Distros)¶
Install Dependencies:
# Fedora
sudo dnf install -y libdrm-devel cmake make gcc-c++ git
# Arch
sudo pacman -S base-devel cmake git
# Debian/Ubuntu
sudo apt install build-essential cmake git libdrm-dev libyaml-cpp-dev
Clone and Build:
# Clone repository
git clone https://gitlab.com/mothenjoyer69/oberon-governor.git
cd oberon-governor
# Build
cmake . && make
# Install
sudo make install
# Enable service
sudo systemctl enable --now oberon-governor.service
Option 3: Bazzite Automated Script¶
# Download and run setup script
curl -s https://raw.githubusercontent.com/vietsman/bc250-documentation/refs/heads/main/oberon-setup.sh | sudo sh
# Verify installation
systemctl status oberon-governor
Option 4: Cyan-Skillfish Governor¶
Fedora:
Arch:
Debian/Ubuntu:
# Download .deb from GitHub releases
wget https://github.com/Magnap/cyan-skillfish-governor/releases/download/v0.1.3/cyan-skillfish-governor_0.1.3_amd64.deb
sudo dpkg -i cyan-skillfish-governor_0.1.3_amd64.deb
Configuration¶
Oberon Governor Config¶
Config File: /etc/oberon-config.yaml
Default Configuration:
opps:
frequency:
min: 1000 # Minimum GPU frequency (MHz)
max: 2000 # Maximum GPU frequency (MHz)
voltage:
min: 700 # Minimum voltage (mV)
max: 1000 # Maximum voltage (mV)
Safe Overclocking Config:
opps:
frequency:
min: 1000
max: 2175 # Slight overclock
voltage:
min: 700
max: 1025 # Slightly higher voltage for stability
Restart after changes:
Filip's Multi-Step Config¶
Config File: /etc/oberon-config.yaml
Advanced Multi-Step Configuration:
opps:
frequency:
min: 350 # Lower minimum for better idle power
max: 2175 # Overclocked maximum
voltage:
min: 700
max: 1025
steps: 24 # Number of frequency steps (creates 25 levels: 0-24)
governor:
polling_delay_ms: 50 # How often to check GPU load
up_threshold_high: 85 # Load % to jump to maximum
up_threshold_low: 70 # Load % to step up one level
down_threshold_high: 45 # Load % to step down one level
down_threshold_low: 5 # Load % to drop to minimum
gfx_temp_soft_lim: 80 # Temp to step down (°C)
gfx_temp_hard_lim: 90 # Temp to drop to minimum (°C)
soc_temp_hard_lim: 90 # SoC temp limit (°C)
overheat_reset_ms: 10000 # Cool-down time after overheat
Cyan-Skillfish Governor Config¶
Config File: /etc/cyan-skillfish-governor/config.toml
Example Configuration:
# Define voltage points (frequency MHz, voltage mV)
safe-points = [
[1000, 700], # 1000 MHz @ 700 mV (idle)
[1500, 900], # 1500 MHz @ 900 mV
[2000, 1000], # 2000 MHz @ 1000 mV (gaming)
[2175, 1025], # 2175 MHz @ 1025 mV (boost)
]
# GPU load target range (70-95%)
[load_target]
min = 0.70
max = 0.95
# Timing configuration
[timing]
interval_ms = 50 # Sampling interval
burst_samples = 20 # Samples before burst to max
Test voltage/frequency manually:
# Stop governor
sudo systemctl stop cyan-skillfish-governor
# Manually set frequency and voltage
echo vc 0 2000 1000 > /sys/devices/pci0000:00/0000:00:08.1/0000:01:00.0/pp_od_clk_voltage
# Test stability with benchmark/game
# If stable, add to config
Verification¶
Check Governor is Running¶
Check Frequency Scaling¶
# View current GPU frequencies
cat /sys/class/drm/card0/device/pp_dpm_sclk
# Example output:
# 0: 1000Mhz
# 1: 1500Mhz
# 2: 2000Mhz *
#
# The * indicates active frequency
Test dynamic scaling: 1. Check frequency at idle (should be ~1000 MHz) 2. Start a game or benchmark 3. Check frequency under load (should increase to 2000+ MHz)
Monitoring Tools¶
CoolerControl (GUI):
# Fedora
sudo dnf copr enable terra/terra
sudo dnf install coolercontrol
# Bazzite
ujust install-coolercontrol
Shows real-time GPU frequency, voltage, and temperature.
Command Line:
MangoHud (In-Game Overlay):
# Install MangoHud
sudo dnf install mangohud # Fedora
sudo pacman -S mangohud # Arch
# Run game with overlay
mangohud %command% # Steam launch option
Troubleshooting¶
Governor Not Starting on Boot¶
Symptoms: - GPU stuck at 1500 MHz - Service shows as inactive
Check service:
Solutions:
1. Enable service:
2. Check config file exists:
3. Manual restart:
Workaround (Arch/CachyOS):
Some users report governor doesn't activate until GPU is used: - Run a game or benchmark once after boot - Governor activates and stays active
Frequency Stuck at 1500 MHz¶
Possible causes: 1. Governor not running 2. Config file missing/incorrect 3. Governor binary not installed
Debug:
# Check governor binary exists
which oberon-governor
# Check config
cat /etc/oberon-config.yaml
# Try manual start
sudo oberon-governor
# Check for errors
System Crashes with Governor¶
Symptoms: - System unstable during gaming - Crashes when GPU frequency changes
Causes: - Voltage too low for frequency - Overheating - Unstable overclock
Solutions:
1. Increase voltage:
2. Reduce max frequency:
3. Check temperatures:
Governor High CPU Usage¶
Normal CPU Usage: - Oberon original: 0.4% CPU - Filip's enhanced: 0.4-1.0% CPU - Cyan-Skillfish: 0.9-1.3% CPU
If CPU usage > 2%:
Check polling interval:
Check for bugs:
Performance Comparison¶
| Governor | Idle Freq | Max Freq | CPU Usage | Response Time | Performance |
|---|---|---|---|---|---|
| None | 1500 MHz | 1500 MHz | 0% | N/A | ⭐⭐ |
| Oberon | 1000 MHz | 2000 MHz | 0.4% | 100ms | ⭐⭐⭐⭐ |
| Filip's | 350-1000 MHz | 2175 MHz | 0.4-1.0% | 50-100ms | ⭐⭐⭐⭐⭐ |
| Cyan-Skillfish | Variable | 2000+ MHz | 0.9-1.3% | 24ms | ⭐⭐⭐⭐⭐ |
Governor Comparison¶
When to Use Oberon (Original)¶
- Simple setup: Just works out-of-box
- Proven stability: Most tested
- Low overhead: Minimal CPU usage
- Best for: Beginners, stability-focused builds
When to Use Filip's Enhanced¶
- Better performance: Multi-step scaling
- Available as package: Easy to install
- Good balance: Performance + stability
- Best for: Most users, gaming builds
When to Use Cyan-Skillfish¶
- Maximum control: Precise frequency control
- Best efficiency: Continuous scaling
- Advanced config: Multiple voltage points
- Best for: Advanced users, overclockers
Overclocking with Governor¶
Safe Overclocking Guide¶
Step 1: Test Maximum Stable Frequency
# Stop governor
sudo systemctl stop oberon-governor
# Manually set test frequency
echo vc 0 2100 1050 > /sys/devices/pci0000:00/0000:00:08.1/0000:01:00.0/pp_od_clk_voltage
# Run benchmark (30+ minutes)
# If stable, try higher
# If crashes, lower frequency or increase voltage
Step 2: Update Governor Config
# /etc/oberon-config.yaml
opps:
frequency:
max: 2100 # Your stable frequency
voltage:
max: 1050 # Your stable voltage
Step 3: Restart and Test
Known Limits: - 980 MHz: Unstable (known issue, avoid) - 2000 MHz @ 1000mV: Safe for all boards - 2175 MHz @ 1025mV: Safe for most boards - 2230 MHz: Maximum with kernel patch, requires cooling
Overclocking Risks
Overclocking can cause instability, crashes, and potentially hardware damage. Always monitor temperatures and test thoroughly.