Every time a new Raspberry Pi is released, there are mutterings around thermal control of the new board. People want to know whether it’s necessary, and if so, what you’ll need to do to make it happen. This time around, with the release of Raspberry Pi 5, we’re introducing two new official hardware solutions for cooling.
For normal usage of your Raspberry Pi, adding cooling is entirely optional. The idle performance of a Raspberry Pi 4 and a Raspberry Pi 5 is about the same, and under typical loads Raspberry Pi 5 will run cooler than a similarly loaded Raspberry Pi 4. However, a heavy continuous load will mean that the board could potentially go into thermal throttling. Throttling happens as there are software controls to limit CPU speeds if things get start to get too toasty. Although, even when fully throttled, a Raspberry Pi 5 is still going to run faster than a Raspberry Pi 4!
But data makes everything better, so I decided to grab some early production hardware and run some tests to help you make up your own mind whether you’re going to need to cool your own Raspberry Pi 5.
How we measure CPU temperature
vcgencmd command is an amazingly useful source of information about the things that are happening on your Raspberry Pi, and the Python bindings surface all of that and let you programmatically monitor pretty much everything that needs monitoring. Here we’re going to use the
vcgencmd Python bindings to monitor and log the temperature, along with the current CPU clock speed and the current throttling state, to a file.
from vcgencmd import Vcgencmd
start_time = time.time()
fb = open("/home/pi/readings.txt","a+")
fb.write("Elapsed Time (s),Temperature (°C),Clock Speed (MHz),Throttled\n")
vcgm = Vcgencmd()
temp = vcgm.measure_temp()
clock = int(vcgm.measure_clock('arm')/1000000)
throttled = vcgm.get_throttled()['breakdown']['2']
string = '%.0f,%s,%s,%s\n' % ((time.time() - start_time),temp,clock,throttled)
if __name__ == '__main__':
Once we have the script up and running in a Terminal window, we can open up another and kick off a stress test on all four cores to load the CPU. To do that I’m going to use the
stress command line tool to impose a heavy workload on all four of the CPU cores.
$ sudo apt install stress
$ stress --cpu 4
To prevent overheating, all Raspberry Pi boards begin to throttle the processor when the temperature reaches 80°C, and throttle even further when it reaches the max temp of 85°C.
The first thing to do is to measure what happens when the Raspberry Pi 5 is not cooled. Without any cooling in place, the Raspberry Pi 5’s CPU idle temperature is around 65°C when sitting out in the open air on the lab bench.
For normal use adding cooling is optional. If you’re watching a YouTube video, or working on the desktop, you aren’t going to be stressing the CPU like we did in this test. But, unsurprisingly, with the heavy sustained load we’re imposing on the CPU with no cooling the maximum temperature climbs to and then remains stable just above the 85°C thermal limit during extended testing. This leads to sustained thermal throttling after the temperature reported by the processor rises above the throttling limits.
Fitting the Active Cooler
I then ran the same test with managed active cooling using the new Active Cooler, and then with the Active Cooler still fitted but with the blower’s fan disconnected. Both these tests were done with the Raspberry Pi sitting in the open air on the lab bench.
The Active Cooler is a single-piece anodized aluminium heatsink with an integrated blower. It has pre-applied thermal pads for heat transfer, and is mounted to the Raspberry Pi 5 board directly using spring-loaded push pins. It is actively managed by the Raspberry Pi firmware: at 60°C the blower’s fan will be turned on, at 67.5°C fan speed will be increased, and finally at 75°C the fan increases to full speed. When the temperature drops back below these limits, the blower’s fan will spin down automatically.
Thanks to the passive heatsink, with the Active Cooler fitted we see a much lower idle temperature, around 45°C. During extended testing under load, the fan of the Cooler spins up at low speed to stabilise the CPU temperature at 60°C, with a maximum temperatures of 62 to 63°C being seen during the tests.
Noise levels of between 35 to 40 dB were measured during the load test while the fan was in operation – that’s about as much noise as you’ll make turning the page of a book. During the extended stress testing the fan never actually needed to run at full speed to maintain temperature control of the Raspberry Pi.
Unplugging the fan and relying solely on the passive cooling provided by the aluminium heatsink, the idle temperatures were similar; but under extended load the CPU temperature eventually reaches the point at around T₀ + 200 seconds where thermal throttling occurs.
Reattaching the cable causes the fan to spin up to full speed immediately, and with the load removed, the CPU is cooled back to an idle temperature of around 45°C within a further 300 seconds, with the fan spinning back down to lower speeds as the temperature falls back to normal.
If you’re thinking about overclocking the new Raspberry Pi 5, then the Cooler will happily cope with that. More information about over and underclocking the Raspberry Pi 5 can be found in Jeff Geerling’s post.
But what about a HAT?
The big question a lot of folks will have at this point is, what happens when you add a HAT?
Well, you can mount a HAT above the Active Cooler using a set of 16mm GPIO extenders. Inevitably there is some disruption to the air flow which will cause the Raspberry Pi to run hotter, but the Active Cooler is still able to handle extended stress tests without significant temperature rises.
Testing was done with a prototype of the new M.2 HAT, booting the Raspberry Pi from the NVMe drive — both because I happened to have one on my desk, and also because this is going to be a pretty common use case for the Raspberry Pi 5 — and just a reminder: the only thing you really need to remember about the prototype M.2 HAT is that the production version will almost inevitably look nothing like the one in this picture!
With the M.2 HAT fitted above the Active Cooler, the idle temperature of the Raspberry Pi was slightly higher than without the HAT present, at around 49°C.
Under sustained load the CPU temperature initially rose to the second 67.5°C trigger point, spinning the blower’s fan up from low to its middle speed. However, this quickly dropped the CPU temperature below the trigger point, which in turn dropped the fan speed back to its lower setting. The CPU temperature then stabilised at around 64°C for the remainder of the sustained testing.
Using the new case
Next on the test bench was the new fan case. I removed the Active Cooler from my board, and went ahead and fitted the Raspberry Pi 5 inside the new case. The new case comes as four components; the base which the Raspberry Pi clips into, then a frame and fan assembly, and finally a lid that clips on top.
Like the Active Cooler, the fan assembly is actively managed by the Raspberry Pi firmware: at 60°C the blower’s fan will be turned on, at 67.5°C fan speed will be increased, and finally at 75°C the fan increases to full speed. When the temperature drops back below these limits the fan will spin down automatically.
Testing was carried out in the same fashion as before, first with the fan assembly in place, but with the lid removed. Then again with both fan assembly in place, and this time with the lid clipped on top.
Using the fan case we see idle temperatures a couple of degrees hotter than with the Active Cooler on its own, at around 48°C. With the lid removed we see maximum temperature of approximately 72°C under sustained load, and with the lid in place we see a marginally higher maximum of around 74°C under load.
We can see that while temperature under load is higher than with the Active Cooler, the maximum temperature under load is still well below the 80 and 85°C throttling temperatures.
For normal use adding cooling is optional, although performance may be improved with the addition of active cooling. However a heavy continuous load, such as rebuilding the Linux kernel, will force the new Raspberry Pi 5 into thermal throttling. For heavy loads thermal throttling can extend processing times, and passive cooling is probably going to be insufficient thermal management for heavy loads that extend beyond 200 or 300 seconds of duration, with active cooling necessary to prevent thermal throttling from occurring.
When deciding on a cooling solution you should consider what sort of use you’re going to put your Raspberry Pi 5 to, and make a decision on cooling based on that, rather than just arbitrarily adding cooling. Because for a lot of day-to-day use cases, it’s not going to be needed.
Cooling of any type isn’t mandatory, no harm will come to your Raspberry Pi if it’s left uncooled — and even while throttling under heavy load, a Raspberry Pi 5 is still faster than an unthrottled Raspberry Pi 4.