Power consumption can be a major concern when it comes to home labbing, and for a few reasons. Not only does higher power draw typically correlate with higher temperatures (and thus, either more throttling or louder fans), but it incurs a cost, too. Adding a new server to your home can actually have a noticeable impact on your energy usage, and whether it's for environmental reasons or purely cost-saving reasons, chances are, you would see an increase in power draw as a negative thing. I found a neat way to reduce energy usage, and it cut down my usage by about 25%.

In a home server, the most power-hungry components are either the CPU or the hard drives, depending on how many hard drives you have and what speed they spin at. We don't really want to mess with the hard drives as spinning them down can shorten their lifespan, but the CPU is often an overlooked part of the equation. What if you could decrease power consumption drastically without impacting performance that much? That's where changing the CPU governor comes in, and I'll explain how it works and what you should do to change it.

What is a CPU governor?

Fundamental to your CPU

A CPU governor is essentially a set of rules that tells your processor how to manage its clock speeds under different workloads. In most systems, the default is something like "performance" or "schedutil" which prioritizes responsiveness and keeps the CPU running at higher frequencies for longer. This is great for bursty tasks, gaming, or anything where latency matters, but it also means your CPU spends a lot of time at higher power states even when it doesn't need to.

On the other hand, governors like "powersave" or "ondemand" focus on scaling the frequency down aggressively when the CPU isn't under heavy load. This can lead to significant power savings for workloads that are intermittent or low-intensity, which is often the case in a home lab, where services may be idle for extended periods and only spike occasionally. For heavier workloads, it might take a second for the CPU to ramp up and run at full speed, but when idling, your power draw will be a lot lower.

The beauty here is that, unlike undervolting or underclocking, switching governors doesn't require permanent changes or BIOS tweaks. It's a software-level setting you can adjust instantly, and you can even automate it to switch between performance and powersave modes depending on the time of day or server load. The thing with Proxmox specifically is that it can default to either the "ondemand" or "performance" governors, but it appears some CPUs default to "performance," which will consume more power. I have had this happen on my Pentium Gold 8505 node, my AMD Ryzen 7 5700U node, and my Intel Core i7-14700K node, where each of them defaulted to performance.

The reason changing the CPU governor to "powersave" works so well is not that it caps the frequency at a lower value, but rather how the CPU scales in clock speed. When "performance" is enabled, chosen frequencies will be biased towards higher values, which in turn will use more energy. A processor will use what's known as the "frequency table", which is essentially a list of the clock speeds the CPU can operate at and any additional parameters associated with the CPU when it runs at that clock speed. Often, the last few jumps on the frequency table will incur a significantly larger power draw for a much smaller benefit, which means that while you may get a little bit extra performance, you're drawing way more power for that small increase. And the "performance" governor is, by design, favoring these.

How to change your CPU governor

It's a simple command

On Linux machines in particular, the process is more or less the same no matter the distro you use. First, run the following command to see what governors are available to you:

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors

When it comes to Intel CPUs, I often see suggestions that people should just use the "performance" governor, often accompanied by saying that it should be as efficient as "powersave", yet that hasn't been the case in my experience. When enabling powersave on Intel and AMD, it's functionally equivalent to enabling the "schedutil" governor, which will gauge estimated loads and scale the frequency on the fly, and uses the intel_pstate and amd_pstate drivers depending on the CPU that you're using. On top of that, if you're using an Intel processor, C-states are an important part of the equation, too.

C-states are an important feature to be aware of, as they represent different levels of CPU power-down. For example, a core may see its clock speed reduced, or shut off, and the CPU itself may even switch off various components when they're not in use. What happens depends on the C-level that you're at, and these range from C0 (actively executing instructions) to C10, though not every interval is available for every CPU. For example, C6 and above mean that the core is entirely switched off and drawing no power. When the powersave governor is enabled, it may allow the CPU to hit deeper C-states more often.

By enabling powersave, you will likely see reduced performance in bursty usage, but I went from idling between 100 and 120 watts on my 14700K node to between 70 and 80 watts. That's a pretty big difference. Peak performance is still achievable, so it's not any slower, either. The Linux Kernel Organization explains it like this:

They are not generic scaling governors, but their names are the same as the names of some of those governors. Moreover, confusingly enough, they generally do not work in the same way as the generic governors they share the names with. For example, the powersave P-state selection algorithm provided by intel_pstate is not a counterpart of the generic powersave governor (roughly, it corresponds to the schedutil and ondemand governors).

If you want to set a governor, you can set it with the following command, changing the value of "governor" based on the output you would have seen earlier:

echo governor | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

For example, to set the powersave governor, you can run:

echo powersave | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

This will individually apply the powersave scaling governor on each core. You can then use a command like "watch -n.1 "grep \"^[c]pu MHz\" /proc/cpuinfo"" to see if you can notice a visible change in your CPU's scaling behavior. If you want to go back, rerun the above command with "performance" in place of powersave... or just reboot your machine. The governor won't stick across reboots by default, though you can configure that easily. Depending on your Linux distribution, you can use a cronjob, rc.local, or a tool like cpupower that will ensure your settings stick.

For example, on Proxmox, you can run the helper script to set the governor, and it will offer to ensure that it sticks across reboots. You can skip this part if you just want to see how your server's performance is first, or you can set it right away. It shouldn't break anything, and things might just run a bit slower.

I'm saving a lot of power

My energy bill has seen a tangible decrease

Since enabling this on my three servers, the power savings have been immense. As already mentioned, I dropped from an idle wattage of 100-120W to 70-80W, which is anywhere from a 20% decrease to a 42% decrease in energy usage. Scale that kind of decrease across three servers, while keeping in mind that I'm looking at approximately $17 of savings per month on just one server. I monitor my server's power draw in Home Assistant, so I switched it over to performance mode and then changed it back to powersave mode just to demonstrate the difference, and it is pretty significant.

All of this means that, on a yearly basis, assuming a saving of 50W consistently (which is admittedly unrealistic but used for illustration), that would be a decrease of a whopping 438 kWh per year. My energy provider also tracks usage, and at the time of writing, it states that my energy usage is down 21% month over month thus far. I've had zero issues with any of my self-hosted services since doing this, yet my living room (where two of my servers are) is noticeably cooler thanks to the reduced heat output from the CPU in both machines, they're noticeably quieter, and I'm saving money.

If you want to reduce your power consumption, I highly recommend giving this trick a try. You can easily undo it if you find that it hampers your system's performance, but if you just host basic services like Home Assistant, a dashboard, and some other bits and pieces, then chances are the difference will be unnoticeable aside from the benefits.