This article contains affiliate links. If you purchase through our links, we may earn a commission at no extra cost to you. We only recommend products we’ve thoroughly researched and verified.

A mini PC running 24/7 as a home server accumulates real electricity cost over years of operation. The difference between a 15W idle machine and a 6W idle machine is $10/year — modest, but over 5 years and across multiple machines, it adds up. More importantly, lower idle power means lower thermals, longer hardware lifespan, and a quieter system.
This guide covers BIOS settings, Linux power governor configuration, TDP capping, and service-level optimizations that cut idle power without affecting home server performance.
Measuring Your Baseline
Before optimizing, measure actual power consumption at the wall. A smart plug with energy monitoring gives accurate data:
Smart plugs that report watts:
- TP-Link Kasa EP25 — integrates with Home Assistant
- Shelly Plug S — local MQTT/HTTP control, no cloud required
- Tasmota-flashed Sonoff S31 — local control, accurate to 1W
Measure these states and record them:
- Idle — system running, no active workload, all services up
- Light load — typical activity Home Assistant automations, Pi-hole queries
- Peak — hardware video transcode or compilation running
- Sleep/suspend — if applicable
Target for an Intel N-series mini PC home server: 5-8W idle
BIOS Settings for Minimum Idle Power
These settings vary by manufacturer. The paths below are representative — navigate by function name if exact paths differ.
Access the BIOS
Beelink: Press Delete or F7 during POST
Minisforum: Press Delete or F2 during POST
GMKtec: Press Delete or Escape during POST
Settings to change
Power Management → C-States:
- Enable all C-States: C1, C3, C6, C8, C10
- C10 is the deepest sleep state — many mini PCs ship with it disabled
Power Management → Package C-State Limit:
- Set to:
C10orAutonotC0/C1which disables deep sleep
Power Management → CPU Power Management:
- Power Technology:
Energy EfficiencyorBalancednotPerformance
Advanced → CPU Configuration → Intel SpeedStep:
- Enable allows dynamic frequency scaling
Advanced → CPU Configuration → Intel Speed Shift:
- Enable hardware-level frequency control — more responsive than OS governor
Advanced → CPU Configuration → Turbo Boost:
- For a 24/7 server: consider disabling. Turbo raises TDP during bursts; disabling keeps power consumption flat at the base frequency. Test both — many lightweight workloads never trigger turbo anyway.
Chipset → PCH Power Management:
- Enable ASPM Active State Power Management for PCIe power saving
Advanced → USB Configuration:
- USB Legacy: Disable if you’re not using USB keyboards at boot
- USB Power:
S5 offcuts USB power when system is off
Boot → Fast Boot:
- Enable reduces POST power draw during boot
After changes: Save & Exit → F10.
Linux Power Management
CPU Frequency Governor
Check the current governor:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
# Default on Ubuntu Server: powersave
For a broader shortlist, start with our best mini PC for home server guide.
For Intel CPUs with Hardware P-States HWP:
# Verify HWP is active (best option for Intel N-series)
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver
# Should show: intel_pstate
# Set to powersave (let HWP manage frequency)
echo powersave | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
Make it persistent:
sudo nano /etc/default/grub
# Add to GRUB_CMDLINE_LINUX_DEFAULT:
# "intel_pstate=active"
sudo update-grub
For AMD CPUs:
# Check available governors
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
# Usually: conservative ondemand userspace powersave performance schedutil
# schedutil is the best for AMD — follows CPU scheduler load
echo schedutil | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
Energy Performance Preference EPP
Intel N-series CPUs support EPP hints for HWP:
# Check current EPP
cat /sys/devices/system/cpu/cpu0/cpufreq/energy_performance_preference
# Default: balance_performance
# Set to power (maximum power saving)
echo power | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/energy_performance_preference
# Make persistent via /etc/rc.local or systemd unit:
sudo nano /etc/systemd/system/epp.service
[Unit]
Description=Set CPU Energy Performance Preference
After=multi-user.target
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo power | tee /sys/devices/system/cpu/cpu*/cpufreq/energy_performance_preference'
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
sudo systemctl enable epp.service
Network Adapter Power Management
By default Ubuntu keeps the NIC awake. For home servers that don’t need wake-on-LAN:
# Check current power management
sudo ethtool -s eth0 wol d # Disable wake-on-LAN
sudo ethtool eth0 | grep -i wake
# Disable NIC power management (if it's causing latency spikes):
# DO NOT use powertop --auto-tune on the NIC if you're running SSH — it can cause dropped connections
For the realtek NIC on MINI S12 RTL8125BG:
# Disable EEE (Energy Efficient Ethernet) if you see network latency spikes
sudo ethtool --set-eee eth0 eee off
Storage Power Management
For NVMe drives on always-on servers:
# Check NVMe power state
sudo nvme get-feature /dev/nvme0 -f 0x02 -H
# Set NVMe APST (Autonomous Power State Transition)
# This allows the NVMe to drop to lower power states during idle
sudo nvme set-feature /dev/nvme0 -f 0x0c -v 1 # Enable APST
For SATA drives USB-attached external HDDs: disable aggressive power management to prevent spin-down issues:
sudo hdparm -B 254 /dev/sda # 254 = aggressive power save without spin-down
sudo hdparm -S 0 /dev/sda # Disable spin-down timer (0 = never)
TDP Capping with intel-rapl
Intel Running Average Power Limit RAPL lets you cap the CPU’s power consumption in software.
Install powerjoular or rapl tools
sudo apt install -y powercap-utils
Check current power limits
cat /sys/class/powercap/intel-rapl/intel-rapl:0/constraint_0_power_limit_uw
# Example: 15000000 = 15W (PL1 sustained)
cat /sys/class/powercap/intel-rapl/intel-rapl:0/constraint_1_power_limit_uw
# Example: 35000000 = 35W (PL2 burst)
Set a lower TDP
# Cap PL1 (sustained) to 8W = 8,000,000 microwatts
echo 8000000 | sudo tee /sys/class/powercap/intel-rapl/intel-rapl:0/constraint_0_power_limit_uw
# Cap PL2 (burst, 28-second window) to 12W
echo 12000000 | sudo tee /sys/class/powercap/intel-rapl/intel-rapl:0/constraint_1_power_limit_uw
Make persistent with a systemd service:
sudo nano /etc/systemd/system/tdp-cap.service
[Unit]
Description=CPU TDP Cap
After=multi-user.target
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo 8000000 | tee /sys/class/powercap/intel-rapl/intel-rapl:0/constraint_0_power_limit_uw && echo 12000000 | tee /sys/class/powercap/intel-rapl/intel-rapl:0/constraint_1_power_limit_uw'
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
sudo systemctl enable tdp-cap.service
Recommended TDP caps by workload:
| Use Case | PL1 Sustained | PL2 Burst |
|---|---|---|
| Minimal server Pi-hole, HA | 6W | 10W |
| Standard home server stack | 8W | 15W |
| With Plex hardware transcode | 12W | 20W |
| Unrestricted | Default 15-25W | Default |
AMD TDP Tuning with amdctl or BIOS
AMD mini PCs use STAPM Sustained Thermal Average Power and PPT Package Power Tracking. The easiest approach is in the BIOS:
BIOS → AMD PBS → cTDP Control → Manual
- Set Configurable TDP: 8-12W lower = more efficiency, less burst performance
From Linux, use ryzenadj for runtime control:
sudo apt install -y ryzenadj
sudo ryzenadj --stapm-limit=8000 --fast-limit=12000 --slow-limit=8000
# Values in milliwatts
Service-Level Power Optimizations
Disable unused services
# Check what's running and using CPU at idle
systemctl list-units --type=service --state=running | grep -v docker
# Disable Bluetooth if unused (saves ~0.5W)
sudo systemctl disable bluetooth.service
sudo systemctl stop bluetooth.service
# Disable CUPS print spooler
sudo systemctl disable cups.service
# Disable ModemManager (relevant only if you have a modem)
sudo systemctl disable ModemManager.service
sudo systemctl stop ModemManager.service
Schedule heavy Docker tasks during off-peak hours
Heavy tasks Nextcloud database maintenance, backup jobs, Jellyfin library scans should run when you’re asleep, not at 2pm when idle power is what matters:
crontab -e
# Add:
# 03:00 Nextcloud background jobs
0 3 * * * docker exec nextcloud php /var/www/html/occ background:cron >/dev/null 2>&1
# 03:30 Paperless document processing batch
30 3 * * * docker exec paperless python manage.py document_create_classifier >/dev/null 2>&1
Use resource limits on Docker containers
Prevent a misbehaving container from spiking CPU:
# In docker-compose.yml for any service
services:
jellyfin:
image: jellyfin/jellyfin:latest
deploy:
resources:
limits:
cpus: '2.0' # Max 2 CPU cores
memory: 2G # Max 2GB RAM
Measuring Results
After applying optimizations, measure again with the same smart plug:
# Check real-time power from software (Intel only)
sudo apt install -y powercap-utils
cat /sys/class/powercap/intel-rapl/intel-rapl:0/energy_uj
# Read twice 1 second apart and calculate difference for watts
Or use powerstat:
sudo apt install -y powerstat
sudo powerstat -R 5 10 # Sample every 5 seconds, 10 samples
Expected results after optimization
| Machine | Before | After | Annual saving |
|---|---|---|---|
| Beelink MINI S12 N95 | 10-15W | 5-7W | $5-10/year |
| Beelink EQ14 N150 | 10-18W | 6-9W | $4-12/year |
| Minisforum UM790 Pro Ryzen 9 | 15-25W | 8-12W | $7-14/year |
Who Should Skip These Picks
- Skip this shortlist if your real workload is lighter than the use case in the title and a cheaper office mini PC would cover it.
- Skip the top pick if you need more RAM, more storage, or stronger networking than this tier usually provides.
- Skip this category and move up or down a tier if your budget or platform needs point to either a simpler box or a much more capable homelab system.
Frequently Asked Questions
Does CPU frequency scaling affect Docker container performance?
At typical home server workloads, no. Docker containers running Pi-hole, Home Assistant, and Nextcloud consume minimal CPU — the governor scales frequency up on demand within microseconds. The only services affected by aggressive power management are those requiring sustained high CPU: software video transcoding, compilation, and AI inference.
Can I use s2idle suspend-to-idle on a home server?
Not for always-on servers — suspend disconnects network and stops all services. s2idle is only appropriate for workstations that sleep between uses. For always-on servers, C-state optimization which happens automatically when the CPU is idle provides the power savings without service interruption.
How do I verify C-states are active?
sudo apt install -y i7z
sudo i7z
# Shows real-time C-state residency per core
# You want high C6/C8/C10 residency at idle
Alternatively:
cat /sys/devices/system/cpu/cpu0/cpuidle/state*/name
cat /sys/devices/system/cpu/cpu0/cpuidle/state*/usage
High usage counts on C6/C7/C8 states confirm the CPU is sleeping deeply at idle.
How much does a mini PC cost to run 24/7?
At $0.12/kWh, a mini PC drawing 6W idle costs about $6.30/year. One drawing 15W costs $15.77/year. The difference between a poorly optimized 20W idle and a properly tuned 6W idle is about $14.90/year — enough to justify a few hours of configuration. Over 5 years, that gap is $74.50.
What is the lowest achievable idle power for a mini PC home server?
Intel N100 and N95 mini PCs can reach 4-5W idle with proper Linux power management. Intel N150 machines typically achieve 5-7W idle. Ryzen mini PCs with dedicated iGPUs 780M, 890M rarely go below 7-10W idle due to the GPU power plane. Fanless designs with no spinning drives generally achieve the lowest idle numbers.
