Part 2: Optimising Server Power

A cartoon CPU on a unicycle with "Turbo Boost" thoughts, contrasted with a relaxed CPU in a hammock with "C-States & Chill" thoughts, illustrating performance versus power saving.

Most systems are configured for performance, leaving plenty of room for power-saving tweaks without much impact on workloads.

With UK energy prices being what they are, I'm always looking for ways to make my setup more efficient.

Enabling CPU C-States

This was one of the most significant changes I made, and it's buried in the BIOS.

Navigate to AdvancedPower Management Options.

The key setting is CPU C-States.

Think of C-states as different levels of "sleep" for the processor. When the system isn't busy, the CPU can enter a C-state to save power. The deeper the state (like C6 or beyond), the more power it saves. I enabled every available C-state.

For an "always on" system that spends most of its time idle, this made a real difference.

I also checked that the ACPI S3 sleep state was enabled. This is the standard "Suspend to RAM" mode. It's less useful for a server, but I enabled it anyway in case I ever need to manually put the machine into a low-power state.

Disable Intel Turbo Boost

Found under PerformanceIntel Turbo Boost Technology.

The i5-7500 can "turbo boost" from its standard 3.4 GHz up to 3.8 GHz under heavy load. That extra speed is nice, but it comes at the cost of significantly higher power consumption.

Since my Proxmox workloads (a couple of VMs and a few light containers) aren't constantly demanding peak performance, I disabled Turbo Boost.

This gives me a slight drop in power usage when the server's busy, with almost no noticeable performance loss for my needs.

I'd recommend experimenting with this one - the trade-off might be worth it for you, or it might not.

PowerTOP

PowerTOP is a utility that analyses power consumption and suggests optimisations. Its most useful feature is --auto-tune, which automatically applies these optimisations.

Installing PowerTOP

In the Proxmox node's shell:

apt update
apt install powertop

Initial Analysis

Before enabling auto-tuning, run PowerTOP in interactive mode to see the current state of your system. This gives you a "before" snapshot.

Run:

powertop

Let it run for a few minutes with minimal activity to get a good idle baseline reading.

In the text-based interface, use Tab to navigate between screens:

  • Overview: Summary of power usage by device and process
  • Idle stats: Processor C-state usage. Higher C-states (C6, C7) mean deeper sleep and less power
  • Frequency stats: Processor P-state usage (how often your CPU runs at different frequencies)
  • Device stats: Power usage estimates for individual devices
  • Tunables: The most important screen. It lists all power-saving settings PowerTOP can manage. You'll see many marked as "Bad". Our goal is to make them "Good"

Press Esc or Q to exit PowerTOP.

Run Auto-Tune

The --auto-tune flag tells PowerTOP to immediately set all tunable options to their most efficient setting:

powertop --auto-tune

The command runs and exits without any prompts. It flips all "Bad" tunables to "Good". You can verify this by running powertop again and checking the "Tunables" tab - everything should now be "Good".

💡
PowerTOP's effects are temporary and will be lost on reboot. We need to make them persistent.

Making Auto-Tune Persistent

To have these settings apply automatically every time your Proxmox node boots, create a systemd service.

Create a systemd Service File

Use nano to create the service file:

nano /etc/systemd/system/powertop.service

Add this content:

[Unit]
Description=PowerTOP auto-tuning

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

[Install]
WantedBy=multi-user.target

Save and exit.

Enable the Service

Use systemd to create a symbolic link so the service starts on boot:

systemctl daemon-reload
systemctl enable powertop.service

You should see output confirming a symlink was created.

Verification

Reboot your Proxmox node, this is the ultimate test:

reboot

After the node is back online, check the service status:

systemctl status powertop.service

You should see output indicating the service is active (exited). The green active status confirms the command ran successfully during boot and exited as expected (due to Type=oneshot).

Run interactive PowerTOP again:

powertop

Navigate to the Tunables tab. All (or nearly all) settings should now be marked as "Good", confirming your systemd service worked perfectly.

CPU Governor

By default, Proxmox sets the CPU scaling governor to 'performance', meaning the CPUs run at full speed constantly.

Using a helper script, I changed to the 'ondemand' governor. This scales the CPU clock speed based on load, reducing power draw during quiet periods.

➡️Proxmox VE CPU Scaling Governor

bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/pve/scaling-governor.sh)"

Quick Cheat Sheet 📄

PowerTOP: Installation & Analysis

Install PowerTOP:

apt update
apt install powertop

Run interactive analysis (use Tab to navigate, Q to quit):

powertop

PowerTOP: Apply Optimisations

Run auto-tune to apply all "Good" settings (temporary, lasts until reboot):

powertop --auto-tune

PowerTOP: Make Settings Persistent on Boot

Reload systemd and enable the new service:

systemctl daemon-reload
systemctl enable powertop.service

Paste this content into nano, then save and exit (Ctrl+O, Enter, Ctrl+X):

[Unit]
Description=PowerTOP auto-tuning

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

[Install]
WantedBy=multi-user.target

Create the systemd service file:

nano /etc/systemd/system/powertop.service

PowerTOP: Verification (After Reboot)

Reboot the system:

reboot

After reboot, check the service status:

systemctl status powertop.service

5. CPU Governor Script

bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/pve/scaling-governor.sh)"