Disabling cores to reduce the Pi Zero 2 W's power consumption by half

Oct 28, 2021

By default, the new Pi Zero 2 W (see my Zero 2 W review here) runs a 4-core ARM Cortex A53 CPU at 1 GHz.

Raspberry Pi Zero 2 W BGA Xray pattern with mini Raspberry Pi Logo

If you haven't seen my full blog post exploring the Zero 2 W from the inside, complete with X-ray imagery—go check it out now!

From my review, I found that the Zero 2 uses 100 mA at idle (compared to 80 mA for the single-core Pi Zero W that preceded it), but will use up to 500 mA full-tilt, when all four CPU cores are maxed out.

For many users of the Zero 2, this is no problem, as the extra multicore performance is worth it. But a few people asked whether disabling cores could save energy in situations where the software running on the Zero 2 wasn't multithreaded or didn't need multiple CPU cores to run effectively.

So I tried it! Booting up a fresh instance of 32-bit Pi OS, I checked on the cores:

pi@zero:~ $ lscpu
Architecture:        armv7l
Byte Order:          Little Endian
CPU(s):              4
On-line CPU(s) list: 0-3
Thread(s) per core:  1
Core(s) per socket:  4
Socket(s):           1
Vendor ID:           ARM
Model:               4
Model name:          Cortex-A53
Stepping:            r0p4
CPU max MHz:         1000.0000
CPU min MHz:         600.0000
BogoMIPS:            38.40
Flags:               half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32

Running stress-ng -c 4 yielded anywhere between 370-460 mA of power consumption, measured by my PowerJive USB power meter—translating to about 2.3W of power usage.

I tried disabling core 3, by running echo 0 > /sys/devices/system/cpu/cpu3/online as root, but got:

root@zero:/home/pi# echo 0 > /sys/devices/system/cpu/cpu3/online
bash: /sys/devices/system/cpu/cpu3/online: Permission denied

So next, I tried using the maxcpus option in the kernel command line. I edited the /boot/cmdline.txt file and added maxcpus=1 after console=tty1, then saved the file and rebooted.

Upon rebooting, I noticed there was only one Raspberry Pi instead of the customary 4 on the HDMI output—a good sign if any!

Raspberry Pi boot logo showing one processor core

I logged in and checked:

pi@zero:~ $ lscpu
Architecture:         armv7l
Byte Order:           Little Endian
CPU(s):               4
On-line CPU(s) list:  0
Off-line CPU(s) list: 1-3
Thread(s) per core:   1
Core(s) per socket:   1
Socket(s):            1
Vendor ID:            ARM
Model:                4
Model name:           Cortex-A53
Stepping:             r0p4
CPU max MHz:          1000.0000
CPU min MHz:          600.0000
BogoMIPS:             64.00
Flags:                half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32

So it looks like that worked! Now, I tried running stress-ng again, and sure enough, the power consumption averaged 200 mA (less than half of the 4-core reading), spiking only as high as 260 mA, so less than 1.3W.

200ma Raspberry Pi Zero 2 with disabled CPU cores power savings

I still couldn't manually bring a core online or offline as root, so it looks like you can only manage them via the kernel cmdline.txt options at boot.

I ran the pts/encode-mp3 test that's part of the Phoronix suite, to see if the performance would match my previous run, and since it's basically a single-threaded test, it did:

MP3 encode benchmark with single-threaded Phoronix text on Pi Zero 2 W with cores disabled

So there you have it—with the Pi Zero 2 W, you can reduce power consumption if you don't need to use multiple cores for your project, by disabling them.