So I ran into DietPi as I started a project to create a Kubernetes cluster for my home lab. Less installed means more resources available, less attack surface, and less configuration to manage. Granted, electricity costs money (~$0.286/kwH where I live) and creates heat and noise, so I always look to drive idle power consumption into the ground where possible.
So the numbers of interest are as follows:
- 1.30W - WiFi, TX Power of 5dBm, USB-C powered
- 1.45W - Ethernet, 100Mbps, USB-C powered
- 1.68W - Ethernet, 1000Mbps, USB-C powered
- 1.70W - Ethernet, 100Mbps, PoE powered
- 1.99W - Ethernet, 1000Mbps, PoE powered
I’m using the original (revised) Raspberry Pi PoE Hats as they’re known to sip power. The PoE numbers were obtained by pulling the voltage and amperage draw over SSH via my Ubiqitui UniFi switches using the swctrl poe show id command. Similar to the USB-C power supply, the voltage supplied by the PoE switch is about 4-5% higher than the required voltage.
To put this in perspective, on another port I have my old RPi 4B 4GB rev. 1.2 with a fairly normal /boot/config.txt. That’s consuming 2.90W – with half the memory – compared to 1.99W of the RPi 4B 8GB rev. 1.5. Some of this is absolutely due to hardware changes across board revisions. Of course, the rest is from config changes to reduce as much power consumption as possible to have as much overhead as possible.
So here’s the general config changes I’ve made:
max_framebuffers=0
…
disable_camera_led=1
…
dtparam=audio=off
…
dtparam=i2c_arm=off
…
dtparam=spi=off
…
enable_uart=0
…
dtparam=sd_poll_once
Don’t automatically load overlays for detected cameras
camera_auto_detect=0
Don’t automatically load overlays for detected DSI displays
display_auto_detect=0
#-------Overclock-------
temp_limit=75
#initial_turbo=20
arm_64bit=1
We can’t boost to 1.8GHz with aggressive undervolting
arm_boost=0
CPU related frequencies
arm_freq=1500
arm_freq_min=200
core_freq_min=200
CPU related voltages
over_voltage=-3
over_voltage_min=-6
Memory related voltages
over_voltage_sdram=-2
GPU related frequencies
gpu_freq_min=100
h264_freq_min=100
isp_freq_min=100
v3d_freq_min=100
hevc_freq_min=100
\
Disable Bluetooth
dtoverlay=disable-bt
Disable Wi-Fi
dtoverlay=disable-wifi
Disable the Power LED
dtparam=pwr_led_trigger=none
dtparam=pwr_led_activelow=off
Disable the Activity LED
dtparam=act_led_trigger=none
dtparam=act_led_activelow=off
Disable Ethernet Port Link LED
dtparam=eth_led1=4
Set POE Hat Fan Speeds
dtparam=poe_fan_temp0=50000
dtparam=poe_fan_temp1=60000
dtparam=poe_fan_temp2=70000
dtparam=poe_fan_temp3=80000
So, fairly minimal, with some undervolting and idle clock reduction – don’t worry, it’s been extensively tested for stability! The question is, can we go lower without adversely affecting performance?
To be fair, for normal use I do intend on maintaining 1000Mbps Ethernet, as actual work will be done. These are just intended to be headless servers that I want to sip power when they aren’t busy, and be silent – at idle, the CPU is ~37C (no heatsink) with the PoE fan off. I’m just curious if folks are aware of what else might be possible to eke out any more power savings.
As an aside, very happy to have found DietPi. It brings me back closer to the days of playing with Linux in the late 90s – when Debian was brand new, and I used to install Slackware from 3.5" floppies onto dumpster-dived 386s.
Cheers!