Chapter 10: NUC and Small Server BIOS and Idle Tuning

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.


10.1 Why Small Servers Waste Power

The main reasons idle small servers draw more power than necessary:

  1. BIOS defaults favor performance: C-states and power features are often disabled or limited in default BIOS configurations to maximize compatibility and reduce boot-time issues.
  2. Running services that keep the CPU awake: Polling daemons, logging agents, and poorly configured cronjobs prevent the CPU from reaching deep idle states.
  3. Disk spinning unnecessarily: HDDs draw 4–8 W when spinning. A server that could park the disk 90% of the time but doesn’t wastes significant energy.
  4. Overprovisioned hardware: A server with 32 GB RAM and 8 cores doing a job that needs 4 GB and 2 cores powers more hardware than necessary.

10.2 BIOS/UEFI Power Settings

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.


10.3 C-State Verification from Linux

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:

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

10.4 Reading Intel RAPL Energy Counters

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.


10.5 tuned: Power Profiles on RHEL/Fedora Systems

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.


10.6 Raspberry Pi Power Optimization

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 →