🛠 Dompter la chauffe : throttling à 70 °C, dissipateur et pilotage CPU
Objectives
The BPI-CM4 is a champion of thermal throttling: throttling starts around 70 °C and, in a bare module under stress-ng, the frequency collapses in just 5 seconds — after 10 minutes, a module without cooling runs at 1000/1000 MHz compared to 1800/1398 MHz with a simple small heatsink (published measurements). You will reproduce the test, instrument both big.LITTLE clusters (4× A73 + 2× A53, separate cpufreq policies) and arbitrate between heatsink, frequency cap, and governor.
Hardware
- BPI-CM4 + carrier, 5 V / 3 A power supply
- Small adhesive heatsink (the one from the public measurements is sufficient); a case without airflow makes everything worse
- Optional infrared thermometer
Complete Code
sudo apt update && sudo apt install -y stress-ng linux-cpupower
# État des politiques de fréquence (une par cluster big.LITTLE)
for p in /sys/devices/system/cpu/cpufreq/policy*; do
echo "$p : $(cat $p/scaling_governor) $(cat $p/cpuinfo_cur_freq 2>/dev/null)"
done
# Températures (thermal zones amlogic)
for z in /sys/class/thermal/thermal_zone*/; do
echo "$(cat $z/type 2>/dev/null) : $(($(cat $z/temp 2>/dev/null)/1000)) °C"
done
# Test de 10 min avec enregistrement des fréquences
sudo stress-ng --matrix 0 --timeout 10m &
while sleep 15; do
date +%T; paste -sd' ' /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
done
# Plafonner les A73 à 1,8 GHz pour un régime silencieux
sudo cpupower frequency-set -d 1GHz -u 1.8GHz
Expected Verification
Without a heatsink: visible drop within seconds towards floor frequencies, stabilization around 1000 MHz per core after 10 minutes. With a heatsink: significantly higher maintenance (order of magnitude 1800/1398 MHz). Reference power consumption measured on this setup: 1.8 W at idle, 4.1 W at full stress-ng load.
Common Errors
- Concluding that the board is defective: the behavior is normal for a bare module; the rule of use is the heatsink.
- Looking at only one core: the A73 and A53 clusters have distinct policies, they must be monitored together.
- Testing in a closed case without ventilation: worse than the bare module.
- Confusing the threshold temperature (~70 °C documented) with a maximum junction temperature: the absolute maximum of the A311D is not published in accessible sources.
- Comparing benchmarks without controlling the temperature: a score obtained cold has nothing to do with the established regime.
Other tutorials for this board
- Monter le module BPI-CM4 sur son carrier et réussir le premier boot
- Apprivoiser les LED et la touche ADC du carrier CM4IO
- Mesurer le stockage du BPI-CM4 : eMMC, microSD et le palier NVMe
- Activer I2C, SPI et UART sur le BPI-CM4 : env.txt ou armbianEnv.txt
- Brancher un capteur BME280 sur l'I2C1 du carrier (GPIOX_17/18)
- Déplacer le rootfs sur un SSD NVMe via le port mini-PCIe
Code examples for this board
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash