Tech

Build a Low-Power Home Server That Idles Under 10W (2026)

This post contains affiliate links. If you buy through them, we may earn a small commission at no extra cost to you. Learn more.

Can a home server really idle under 10 W? You can get there, but the spec sheets will not tell you which parts do it. On Intel 12th to 14th gen desktop parts, the network chip, the slot each device uses and the power supply decide whether you idle at 7 W or 15 W.

Original content from computingforgeeks.com - post 176221

This build uses parts from the same platform as builds that owners have measured near 7 W. We ran the Linux steps below on Ubuntu 26.04 in October 2026, inside a Proxmox VM, and the text says which ones a VM could not run. A VM cannot show wall power either, so the watt figures come from the owners we link, and you should treat 7 W as the target, not a promise.

PartPickWhy it matters for idlePrice, Oct 20
CPUIntel Core i3-14100Integrated graphics, so no graphics card drawing powerabout $142
BoardGigabyte H610I (DDR5)Intel network chip; the M.2 slot hangs off the chipsetabout $130
RAM16 GB DDR5-5600, one stickOne stick is enough for a small serverabout $250
SSDSamsung 990 EVO Plus 1 TB5 mW in its deepest idle state, per Samsungabout $237
PowerpicoPSU-150-XT and a Mean Well 80 W brick, 5.5 x 2.5 mm plugAvoids an ATX supply that wastes a third of 10 Wabout $50 + $28
MeterKill A Watt P4460The only way to know what you actually savedabout $35

The core parts came to about $840 on October 20 before a case and data drives, and RAM is the expensive line because DDR5 prices are still high. Several parts were in short supply that day, so check the live price before you order.

Step 1: Pick parts that let the CPU sleep

Idle power on these platforms comes down to how deep the CPU package can sleep. Matt Gadient measured 7 W at the wall on an i5-12400 with an ASUS H770 board, with the package at C8. That board has a Realtek 2.5G chip, and he measured it before the kernel change described below, which is why we now recommend an Intel chip instead. On builds that got stuck at package C3, the same class of hardware sat around 15 W. These choices are what keep the package able to sleep deeply:

  • An Intel onboard network chip, not Realtek.
  • A CPU with integrated graphics, never an F model.
  • Drives on chipset lanes, not CPU lanes.
  • No add-in SATA card if you can avoid it.

The network chip matters because the mainline r8169 driver turns off the PCIe L1 sleep state on Realtek chips, per the driver source. The only exemption is a board whose vendor flagged ASPM as tested, and that exists only for the RTL8168h and newer. The slot matters because the Intel 12th gen datasheet needs CPU-attached PCIe links in L1 for package C6 to C8 and in L1.2 for C10. Gadient also measured a JMB585 SATA card holding his package at C3 and 15 W. The i3-14100F is cheaper, but it needs a graphics card, and that card costs you more at idle than the price gap saves.

Gigabyte H610I with the i3-14100

Gigabyte H610I mini-ITX motherboard
Gigabyte H610I (image: Gigabyte). Sold by Amazon.com on October 20.

Gigabyte gives the H610I an Intel gigabit network chip, four SATA ports from the chipset and one M.2 slot that runs off the H610 chipset rather than the CPU. That last point means your boot SSD never holds a CPU link awake. Leave the x16 slot empty, because it is CPU-attached, and anything in it can cap the package sleep state. The board launched before 14th gen chips, so check the CPU support list and BIOS version before you pair it with an i3-14100.

Pair it with the i3-14100, which has four cores, eight threads and UHD 730 graphics with Quick Sync. Nobody has published a wall measurement for the i3-14100 itself, so the 7 W figure comes from 12th and 13th gen chips on the same LGA1700 socket and Intel chipsets. Two commenters on the Gadient article reported C8 and C10 instability on Gigabyte Z790 boards, which is a different chipset, but watch for it.

Samsung 990 EVO Plus for the boot drive

Samsung 990 EVO Plus 1TB NVMe SSD
Samsung 990 EVO Plus 1 TB (image: Samsung).

The Samsung datasheet lists 60 mW in its APST idle state and 5 mW in the L1.2 state, which is why we picked it over cheaper drives with no published idle figures. Linux enables the APST idle states by default, but the 5 mW figure needs PCIe L1 substates, so it depends on the BIOS settings in Step 3 and the powersupersave policy in Step 5. It was sold by a third party on October 20 at about $237, so compare the price with the Samsung store.

Step 2: Power the board with a picoPSU

A normal ATX power supply is the biggest waste in a 10 W build. Across 591 Cybenetics reports in the low-idle efficiency database from Wolfgang, the median ATX unit was about 70% efficient at a 20 W load and the best about 82%. At 10 W the losses are worse, so up to a third of your idle power can go into heating the PSU.

Mini-Box picoPSU-150-XT DC-DC power supply
Mini-Box picoPSU-150-XT (image: Mini-Box). Plugs straight into the 24-pin ATX connector.

The picoPSU plugs straight into the 24-pin connector, includes the 4-pin CPU cable, and runs from a 12 V brick. The manual for the sibling 160-XT lists 93 to 96% efficiency on its 5 V and 3.3 V rails, and passes 12 V straight through, so the brick sets most of your losses. Owner Becks0815 measured 7 W at the wall on an i3-12100 build with a 120 W picoPSU running Proxmox 8.2 on an ASUS H770 board with a Realtek chip, which is the closest Proxmox data point we found.

The picoPSU-150-XT takes a 12 V brick with a 5.5 x 2.5 mm barrel plug, which is why the pick is the Mean Well GST90A12-P1M. Its P1M suffix is that plug. Avoid the R7B versions, which use a 4-pin DIN plug that does not fit. The brick has an IEC C14 inlet, so you also need a standard C13 power cord if it does not include one. It is rated at 80 W, and the i3-14100 can turbo well past that, so cap both CPU power limits, PL1 and PL2, in the BIOS at about 50 W to keep the whole box inside the brick with some margin. A 3.5-inch drive pulls about 2 A at 12 V while it spins up, so for a build with hard drives, pick a larger 12 V brick with the same 5.5 x 2.5 mm plug.

Step 3: Set the BIOS for deep sleep

The board ships with power saving partly off, so change these settings before you install anything. These are the settings Gadient used on his ASUS board, and the menu names differ on Gigabyte boards, so look for the closest match:

  1. CPU C-states enabled, up to C10.
  2. PCIe ASPM enabled, every link set to L1.
  3. Native ASPM enabled, so Linux controls it.
  4. Render Standby (RC6) enabled.
  5. Aggressive LPM Support enabled for SATA.
  6. Unused devices off: HD audio, serial port, LEDs.

Save, boot into Linux, and confirm your changes stuck with the checks in the next step. If the BIOS has no Native ASPM option, the firmware keeps control of ASPM, and the runtime test in Step 5 fails with Operation not permitted. The kernel log also says so, in a line from sudo dmesg that reads platform retains control of PCIe features, or on some boards FADT indicates ASPM is unsupported, using BIOS configuration.

Step 4: Check ASPM and package C-states

Start by reading the ASPM policy the kernel is using. This only reads a file, so it is safe on any machine:

cat /sys/module/pcie_aspm/parameters/policy

The value in brackets is the active policy. On our Ubuntu 26.04 VM it read the kernel default:

[default] performance powersave powersupersave

Next, watch the package sleep states with turbostat. Install it on Ubuntu with linux-tools-common and the linux-tools package that matches your kernel:

sudo apt install -y linux-tools-common linux-tools-$(uname -r)

On Debian and Proxmox, turbostat ships in the linux-cpupower package instead, so run apt install linux-cpupower there. Note the PC10 column is spelled Pk%pc10, not Pkg%pc10. Our VM rejected the second spelling with “Counter ‘Pkg%pc10’ can not be added”:

sudo turbostat --quiet --show Pkg%pc2,Pkg%pc6,Pkg%pc8,Pk%pc10,PkgWatt --interval 5 --num_iterations 2

On real hardware, aim for most of the time in Pkg%pc8 or Pk%pc10, though Gadient measured C6 against C8 at less than a watt apart, so reaching C6 matters most. Inside a VM the command fails, because the guest cannot read the C-state registers of the CPU, so run it on the bare-metal host. If the package never gets past pc3, something is holding a PCIe link awake. Check these first:

  • A Realtek network chip.
  • An add-in SATA card.
  • Any card in the CPU x16 slot.

To find which device it is, list the devices with plain lspci, then check one at a time as root with sudo lspci -vvv -s and its bus address, such as 00:1c.0, and read the LnkCtl line for ASPM. Without root, lspci hides those capabilities. Do not sweep the whole bus with a bare lspci -vvv on a busy server. A full sweep preceded one of our Proxmox hosts going offline, and devices in a deep power state or passed through to VMs are the likely trigger.

Step 5: Turn on ASPM at boot

You can test a stronger ASPM policy at runtime before you make it permanent. If the firmware has handed control to Linux, this switches policy immediately:

echo powersupersave | sudo tee /sys/module/pcie_aspm/parameters/policy

Our VM refused it, because the virtual firmware keeps control of PCIe. This error means the BIOS has not handed ASPM to the OS, so go back to Step 3 for the Native ASPM setting:

powersupersave
/sys/module/pcie_aspm/parameters/policy: Operation not permitted (os error 1)

That wording comes from the Rust coreutils in Ubuntu 26.04. On Debian, Proxmox and Ubuntu 24.04, GNU tee prints tee: /sys/module/pcie_aspm/parameters/policy: Operation not permitted instead.

To make the policy permanent, set the pcie_aspm.policy module parameter, which the ASPM driver defines, in a GRUB drop-in file rather than in /etc/default/grub. On our Ubuntu cloud image, an edit to /etc/default/grub did nothing, because a later file in /etc/default/grub.d overwrote the same variable. Create the drop-in:

sudo vim /etc/default/grub.d/99-pcie-aspm.cfg

Add this line, which appends the parameter to whatever the earlier files set:

GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT pcie_aspm.policy=powersupersave"

Regenerate the GRUB config and reboot:

sudo update-grub
sudo reboot

After the reboot, the parameter should appear at the end of the kernel command line. On our VM it did:

cat /proc/cmdline

The line ended with the new parameter:

BOOT_IMAGE=/vmlinuz-7.0.0-38-generic root=UUID=db3bb021-e1b1-420e-b04d-32fad79221f9 ro console=tty1 console=ttyS0 pcie_aspm.policy=powersupersave

The policy file still read default on our VM, because its firmware never hands over PCIe control. On a board with Native ASPM enabled, it should show powersupersave in brackets. Avoid pcie_aspm=force unless nothing else works, because the kernel docs warn that forcing ASPM can lock up the system. Proxmox hosts that boot with systemd-boot, which is the default with a ZFS root on UEFI without Secure Boot, ignore GRUB files. There, add the parameter to /etc/kernel/cmdline and run proxmox-boot-tool refresh, per the Proxmox bootloader docs.

Step 6: Fix a Realtek network chip if you have one

If you went with a board that has a Realtek chip, such as the cheaper DDR4 option below, you can switch L1 back on for that one link through sysfs. Becks0815 saw a build go from 15 W stuck at C3 back to 7 W by writing 1 to the l1_aspm and l1_1_aspm files under /sys/class/net/eno1/device/link/, as their STH forum post describes. In practice that is echo 1 | sudo tee /sys/class/net/eno1/device/link/l1_aspm and the same for l1_1_aspm, with your interface name in place of eno1. Our VM had no such files, so we could not run it, and the change does not persist across reboots.

Check whether your board already allows it. On kernel 6.18 or later, sudo dmesg | grep -i “ASPM as safe” shows a line if the vendor flagged it. On older kernels, read the l1_aspm file in the same folder, where 0 means the driver turned L1 off.

Test the change at runtime, from a local console, for a day. Then make it permanent with a line such as ExecStartPost=/bin/sh -c 'echo 1 > /sys/class/net/eno1/device/link/l1_aspm' in the Step 7 unit, because systemd does not run redirections without a shell. The driver turns L1 off because it has caused random device stops and full system hangs on some boards, and owners report mixed results with the vendor r8125 driver too. If the link drops on a headless box with the change applied at boot, you lose the network every time it starts, so you need console access to undo it.

ASUS PRIME H610I-PLUS D4, the cheaper DDR4 option

ASUS PRIME H610I-PLUS D4 mini-ITX motherboard
ASUS PRIME H610I-PLUS D4 (image: ASUS). Sold by Amazon.com on October 20.

This board takes DDR4, and a 16 GB DDR4-3200 kit was about $105 on October 20 against about $250 for 16 GB of DDR5, so it saves about $145. It has the same chipset M.2 slot and four SATA ports, but its network chip is Realtek, so plan on the fix above. Its CPU power socket is 8-pin while the picoPSU includes a 4-pin cable, which usually works at these loads. Our RAM price outlook explains why your memory costs what it does, and the DDR4 reuse build shows how you can dodge it with parts you already own. Pick it if the RAM savings matter more to you than a network chip that works without tuning. If you would rather start from a used office PC, our used tiny PC guide covers boxes that idle around 11 to 15 W untuned.

Step 7: Run powertop auto-tune at boot

Powertop sets runtime power management on every device it finds. Install it first:

sudo apt install -y powertop

Run a 20-second report to see what it would change:

sudo powertop --html=/tmp/powertop.html --time=20

The Tuning tab in the report lists every setting marked Bad. On our VM it listed 15 items, mostly runtime power management for PCI devices plus the disk writeback timeout. The Debian and Ubuntu package ships a powertop.service but leaves it disabled. You can enable it with sudo systemctl enable –now powertop, or create your own unit, which gives you a place to add the exceptions shown below:

sudo vim /etc/systemd/system/powertop-autotune.service

This is the exact unit we ran:

[Unit]
Description=PowerTOP auto-tune at boot
After=network-online.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/powertop --auto-tune

[Install]
WantedBy=multi-user.target

Reload systemd and enable it:

sudo systemctl daemon-reload
sudo systemctl enable --now powertop-autotune.service

Check that it ran without errors:

systemctl status powertop-autotune.service --no-pager

Ours showed the unit active and exited with success, and after a reboot every PCI device was back on automatic power management:

● powertop-autotune.service - PowerTOP auto-tune at boot
     Loaded: loaded (/etc/systemd/system/powertop-autotune.service; enabled; preset: enabled)
     Active: active (exited) since Tue 2026-10-20 20:25:24 UTC; 286ms ago
    Process: 35779 ExecStart=/usr/sbin/powertop --auto-tune (code=exited, status=0/SUCCESS)

Two side effects matter on a server. The powertop source turns off Wake-on-LAN on every network card that has it on. It also enables USB autosuspend, which can upset these devices:

  • USB keyboards.
  • UPS cables for NUT.
  • Zigbee and Z-Wave sticks.

If you rely on any of those, add an ExecStartPost line to the unit that switches them back on after auto-tune runs, for example ExecStartPost=/usr/sbin/ethtool -s eno1 wol g for Wake-on-LAN, or a /bin/sh -c line that writes on to the power/control file of a USB device. The –auto-tune-dump option you may see in guides only exists in powertop 2.16 and later, and Ubuntu 26.04 ships 2.15.

Step 8: Change the CPU governor on Proxmox

Proxmox builds its kernel with the performance governor as the default, according to its kernel config. On Intel chips with hardware P-states, the intel_pstate docs say performance also locks the energy-performance preference at 0 and rejects attempts to change it. So the order matters: switch the governor to powersave first, then set the preference.

On Proxmox, install linux-cpupower and run cpupower frequency-set -g powersave, which lasts until the next reboot, or add cpufreq.default_governor=powersave to the kernel command line to make it permanent. Then write balance_power to the /sys/devices/system/cpu/cpufreq/policy*/energy_performance_preference files. On hardware P-states, powersave still boosts under load, so your VMs keep their speed. We could not test this step, because our VM had no cpufreq at all, and we found no measurement of how many idle watts it saves, since C-states decide idle more than the governor does.

Step 9: Measure the result at the wall

P3 Kill A Watt P4460 electricity usage monitor
P3 Kill A Watt EZ P4460 (image: P3 International).

Measure your whole box at the wall before and after each step, because package power from RAPL leaves out the board, the drives and the power supply. Wait a few minutes after boot for the system to settle, unplug the monitor and keyboard, and take the lowest steady reading. Gadient notes his Kill A Watt reads in 1 W steps, so a change smaller than that will not show. A UPS adds its own draw, which our power station vs UPS guide covers.

Beelink ME mini if you would rather not build

Beelink ME mini N150 mini PC with six M.2 slots
Beelink ME mini N150 (image: Beelink).

If you want low idle power without a parts list, the Beelink ME mini with an N150 idled at about 8 W with two NVMe drives in The DIY Life review, running TrueNAS. It has six M.2 slots and a built-in power supply, and the Amazon listing was about $359 on October 20. The trade-offs are soldered RAM, no SATA ports and only 64 GB of eMMC storage in that listing, so budget for NVMe drives. Our homelab starter kit has more complete-box options at different budgets.

What broke in our lab

Three things went wrong while we tested these steps, and each one changed the instructions above:

A full lspci -vvv sweep preceded a Proxmox host going offline

We ran a read-only lspci -vvv across every device on one of our Proxmox hosts to collect ASPM data. The host stopped answering four seconds later and needed a power cycle. We cannot prove the command caused it, but the timing was too close to ignore, so this guide checks one device at a time with lspci -vvv -s and its address.

turbostat: Counter ‘Pkg%pc10’ can not be added

Most guides spell the PC10 column Pkg%pc10, which turbostat rejects with exit code 234. The man page lists only pc2 to pc7, and the binary itself uses Pk%pc10. If you then see msr offset 0xe2 read failed, you are inside a VM, which cannot read the C-state registers.

The ASPM parameter never reached the kernel command line

Our first attempt edited /etc/default/grub and ran update-grub, and the grep of grub.cfg found the parameter zero times. The cloud image sources /etc/default/grub.d/50-cloudimg-settings.cfg after the main file, and that file sets the same variable again. A drop-in named 99-pcie-aspm.cfg loads last, which is why Step 5 uses it on every GRUB install.

Keep reading

Best UI Applications for Managing Docker Containers Containers Best UI Applications for Managing Docker Containers Ubuntu 26.04 LTS Features: What’s New in Resolute Raccoon Ubuntu Ubuntu 26.04 LTS Features: What’s New in Resolute Raccoon Best Linux Laptops for Programming and DevOps in 2026 Programming Best Linux Laptops for Programming and DevOps in 2026 Best DDR5 RAM for a Homelab and Workstation in 2026 Tech Best DDR5 RAM for a Homelab and Workstation in 2026 Design Capacity: Add an Agency or Extend Your Own Team? Tech Design Capacity: Add an Agency or Extend Your Own Team? Salesforce Data Loader and API Cloud Salesforce Data Loader and API

Leave a Comment

Press ESC to close