Skip to content

Instantly share code, notes, and snippets.

Last active June 12, 2024 21:51
Show Gist options
  • Save geerlingguy/91d4736afe9321cbfc1062165188dda4 to your computer and use it in GitHub Desktop.
Save geerlingguy/91d4736afe9321cbfc1062165188dda4 to your computer and use it in GitHub Desktop.
Raspberry Pi CPU temperature and throttling test script
# Raspberry Pi stress CPU temperature measurement script.
# Download this script (e.g. with wget) and give it execute permissions (chmod +x).
# Then run it with ./
# NOTE: In recent years, I've switched to using s-tui. See:
# Variables.
# Verify stress-ng is installed.
if ! [ -x "$(command -v stress-ng)" ]; then
printf "Error: stress-ng not installed.\n"
printf "To install: sudo apt install -y stress-ng\n" >&2
exit 1
printf "Logging temperature and throttling data to: $test_results_file\n"
# Start logging temperature data in the background.
while /bin/true; do
# Print the date (e.g. "Wed 13 Nov 18:24:45 GMT 2019") and a tab.
date | tr '\n' '\t' >> $test_results_file;
# Print the temperature (e.g. "39.0") and a tab.
vcgencmd measure_temp | tr -d "temp=" | tr -d "'C" | tr '\n' '\t' >> $test_results_file;
# Print the throttle status (e.g. "0x0") and a tab.
vcgencmd get_throttled | tr -d "throttled=" | tr '\n' '\t' >> $test_results_file;
# Print the current CPU frequency.
vcgencmd measure_clock arm | sed 's/^.*=//' >> $test_results_file;
sleep 5;
done &
# Store the logging pid.
# Stop the logging loop if script is interrupted or when it ends.
trap "kill $PROC_ID" EXIT
# After 5 minutes, run stress.
printf "Waiting 5 minutes for stable idle temperature...\n"
sleep 300
printf "Beginning $stress_length stress test...\n"
stress-ng -c 4 --timeout $stress_length
# Keep logging for 5 more minutes.
printf "Waiting 5 minutes to return to idle temperature...\n"
sleep 300
printf "Test complete.\n"
Copy link

yoyojacky commented Nov 10, 2023

I am using following script to record temperature :

from  gpiozero import CPUTemperature
from time import sleep, strftime, time

cpu = CPUTemperature()
count=1200      # 20 minutes
with open("/home/pi/temp_log.csv", "a") as  log:
    while True:
        temp = cpu.temperature
         log.write("{0},{1}".format(strftime("%Y-%m-%d %H:%M:%S"), str(temp)))
         count -= 1
         if count == 0:

and using sysbench in a loop:

while true; 
     sysbench --test=cpu --cpu-max-prime=20000 --threads=4 run 
     sleep 0.1

and it works fine.

Copy link

yoyojacky commented Nov 10, 2023


Copy link

Question: how did you generated the images from the logging data? Is there any nice script for that?

maybe it can be plot by using matplotlib library.

Copy link

willipi72 commented Jun 12, 2024

For those like me that absolutely are newbies with Linux and Pi, this is the command to download the latest version of this file from the CLI:

curl -L -o _filename.extension_

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment