A small server or NUC running 24/7 is a different optimization target than a laptop. The goal is not to save battery but to minimize electricity consumption over months and years. A NUC drawing 6 W instead of 15 W saves roughly 79 kWh per year — about €20–30 at typical European electricity rates, or the cost of a modest component upgrade every year or two.
The main reasons idle small servers draw more power than necessary:
BIOS settings are the foundation. Access the BIOS during boot (usually Delete or F2) and look for:
C-States: Processor C-states (C1E, C3, C6, C7, C8) allow the CPU to power down progressively when idle. Ensure all C-states are enabled. Some BIOS menus label this as “Enhanced Intel SpeedStep” or “CPU C-states”.
Package C-States: Deeper than core C-states, these power down the entire socket including uncore (memory controller, LLC). Enable PC6 and PC7 (or the deepest available).
ERP (Energy Related Products): Intel NUC BIOS has an “ERP” or “ErP Lot3” setting that configures the system for lowest standby power by disabling network wakeup, USB charging in sleep, etc. Enable this if you do not need these features.
Intel Speed Shift / HWP: Enable if available. This allows the hardware (not the OS governor) to manage P-states with lower latency and better efficiency than software governors.
Turbo Boost: Consider disabling for always-on workloads with consistent light load. Turbo increases peak performance but the peak thermal design (heatsink, fan) must dissipate it — at idle, the CPU can reach deeper power states without turbo.
After BIOS configuration, verify C-state residency:
sudo turbostat --show Pkg_W,CPU%c1,CPU%c6,CPU%c8,Avg_MHz --interval 5
On an Intel NUC at idle, you should see:
Pkg_W < 5–8 W (depending on model)CPU%c8 or CPU%c10 > 70%If deep C-states are unavailable, check:
# List available C-states
cat /sys/devices/system/cpu/cpu0/cpuidle/state*/name
# Check if any C-state is disabled
cat /sys/devices/system/cpu/cpu0/cpuidle/state*/disable
RAPL is available on Intel NUCs as well as laptops. Monitor package power continuously:
import time, pathlib
DOMAIN = "intel-rapl:0"
BASE = pathlib.Path(f"/sys/class/powercap/intel-rapl/{DOMAIN}")
def read_energy_uj():
return int((BASE / "energy_uj").read_text())
def monitor(interval=5.0):
e0 = read_energy_uj()
while True:
time.sleep(interval)
e1 = read_energy_uj()
power_w = (e1 - e0) / 1e6 / interval
print(f"Package power: {power_w:.2f} W")
e0 = e1
monitor()
Full script with subzone breakdown (cores, uncore, DRAM) is in code/rapl_monitor.py.
tuned is a system daemon that applies comprehensive power profiles. On Fedora/RHEL-based systems it is the recommended tool over manual sysfs manipulation.
sudo dnf install tuned
sudo systemctl enable --now tuned
# List available profiles
tuned-adm list
# Apply the power-saving profile
tuned-adm profile powersave
# Or the balanced profile (good default for always-on servers)
tuned-adm profile balanced
# Check active profile
tuned-adm active
The powersave profile applies CPU governor, disk APM, ASPM, and USB autosuspend settings similar to TLP on battery. For a NUC, balanced or a custom profile is often more appropriate — powersave may be overly aggressive and cause latency issues.
For Raspberry Pi 4 and 5 used as small servers:
Disable HDMI output (saves ~25 mA on Pi 4):
sudo tvservice -o # temporary
# For permanent: add "dtoverlay=disable-bt" to /boot/config.txt
Disable unused interfaces:
# /boot/config.txt
dtoverlay=disable-bt # disable Bluetooth
dtparam=audio=off # disable audio codec
USB power: If no USB peripherals are connected, USB ports still power the bus controller. Devices connected but idle draw standby current through the hub. Consider using a powered USB hub and disconnecting peripherals you do not need.
CPU frequency governor:
echo powersave | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
The Pi 5 at idle with a decent governor draws about 2.5–3 W. The Pi 4 draws 3–4 W at idle.
| ← Chapter 9: Advanced Laptop Power Profiling | Table of Contents | Chapter 11: Service and Workload Scheduling → |