Part 2: Optimising Server Power
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 Advanced → Power 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 Performance → Intel 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".
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)"