Stress Testing the Raspberry Pi
by smooth_jamie in Circuits > Raspberry Pi
14880 Views, 23 Favorites, 0 Comments
Stress Testing the Raspberry Pi
When the Raspberry Pi first got released I was swept up in the hype of buying one, but in the end I spent more time with the Arduino as they are more suited to electronics projects.
I have two Original Raspberry Pi's in the shed, and I thought it was about time I did something with them. So in this instructable I will show you how to "stress" test your Pi's CPU to help you determine how much cooling you need and how much you might be able to overclock it.
This instructable uses Stressberry, If you haven't used it before check it out in the python package index.
Setup Your Pi
You will need:
- Raspberry Pi
- 8GB SD card
- 5V, 1A power supply with micro USB
- A HDMI monitor (or one with S-video/composite)
- USB Keyboard & Mouse
- Internet connection (either wired or USB WiFi adapter)
For this instructable I had already made a raspberry Pi laptop (pictured above). Unfortunately I didn't take enough photographs of this one so I couldn't write an instructable.
By reading this instructable I assume you already know how to flash your SD card and setup your Pi. In my case I formatted a fresh SD card using "SD card formatter", then I downloaded the latest raspbian stretch img file and flashed it to an SD card with win32diskimager. You will then need to plug in a mouse, keyboard, monitor and power supply into the Raspberry Pi with you newly flashed SD card. I won't detail the specifics because this is already well documented.
The following instructable will only work easily with Raspbian Stretch. Although you can probably use Wheezy or Jessie alot of the repositories are outdated and you will probably struggle to download and compile everything from source. I initially tried with Wheezy and struggled mainly because the software relies on Python 3.5 which is not installed by default in Wheezy.
Download and Install Dependant Software
We are going to use a program called "stressberry". It loads the CPU to 100% and logs the temperature (I am guessing this is the Junction temperature not the surface temperature). If you are running the GUI click on the terminal to open a new terminal window, else login to your Pi using the command line and type the following.
Firstly do an update:
sudo apt-get update
This will update everything so we are using the most up to date sources. Next we will install all the pre-requisites for using stressberry.
Install Atlas
sudo apt-get install Libatlas-base-dev
Install cairo
Sudo pip3 install cairocffi
Install PyQt5
sudo apt-get install python3-pyqt5
Finally install stressberry using the following two install commands
sudo apt install stress
then
sudo -H pip3 install -U stressberry
During installation answer yes "Y" to any prompts when installing and assuming all that went well we can go to the next step which is modifying the matplotlib backend. In the terminal type:
sudo python 3
This will bring up the python terminal inside the LXDE terminal. You will be able to tell because the start of each line is prefixed with >>. Type the following followed by enter:
>>>import matplotlib
then
>>>matplotlib.matplotlib_fname()
This will give you the filepath where your matplotlib RC file is stored which we will now need to edit. For example this was mine:
/usr/local/lib/python3.5/dist-packages/matplotlib/mpl-data/matplotlibrc
So you need to prefix this line with "sudo nano" to open the nano terminal text editor to edit the file:
sudo nano /usr/local/lib/python3.5/dist-packages/matplotlib/mpl-data/matplotlibrc
Now we are editing the text file we need to look for where the backend is specified. For this, nano has a useful built in search command called "where is". To use it simply hold Ctrl + W and type in "backend" and it will search the document for you, instead of having to scroll through it. Now edit the line:
backend: gtk3agg
to
backend: qt5agg
Then when you are done hold Ctrl + X to save. When prompted answer Y or yes to save any changes and overwrite the file.
Running Stressberry
Finally you have done all the pre-requisites you can finally run the program without any problems. Simply type the following command to run stressberry:
sudo stressberry-run out.dat
This runs the program for you and records the temperature in a file in your home directory called 'out.dat'. The program will run the CPU as low as possible to allow it to "cooldown", then idle it for a short while before stressing it with a maximum load for five minutes, then stops and records the cooldown. The data is stored in your home directory with the name "out.dat" but you could call this whatever you like. Stressberry will also produce a nice looking graph too if you run the following command after the stress test is complete:
sudo stressberry-plot out.dat
Try using different heat sinks and enclosures, overclocking settings etc to see how this changes thermal behaviour. To plot multiple lines on the graph all you do is add them in front of the command:
sudo stressberry-plot out1.dat out2.dat out3.dat
You can also save the graph directly to a .png file by using the following command:
sudo stressberry-plot out.dat -o out.png
This will save a file called "out.png" to your home directory. If you have any error messages during the installation of the previous step have a look at the troubleshooting step.
Some Example Plots
Here are some interesting plots I've created using Stressberry. My Pi is a basic Pi1, and I've added some small aluminium heat sinks to the IC's, and then I've replotted again using a small 3cm fan added (note, put 5cm but this is actually a 30mm fan!). Then I set the overclock to "Turbo" using raspi-config, removed the fan, and put it inside an acrylic enclosure. The three plots are on the same graph above
Troubleshooting
If your reading this step you may have had a few errors whilst installing or running stressberry. Here I've documented all the problems I encountered whilst trying to get this to work, and hopefully should help you overcome anything similar.
Error message 1.
libf77blas.so.3: Cannot open shared object file: No such file or directory
What is the issue?
The pacakage depends on Atlas which is not installed by default
Solution
Install Atlas with the following:
sudo apt-get install Libatlas-base-dev
Error message 2
ImportError: cairo backend requires that cairocffi or pycairo is installed
What is the issue?
Cairo has not been installed by default
Solution
install cairo with the following:
sudo pip3 install cairocffi
Error message 3
TypeError: Couldn’t find foreign struct converter for ‘cairo.Context’
What is the issue?
The problem is using the GTK3Agg backend, this can either be changed in the matplotlibrc file.
Solution
when you run "stressberry-plot out.dat" instead run:
sudo MPLBACKEND=Agg stressberry-plot out.dat
This will force stressberry to run the specified backend rather than the one stored in the RC file.
Finish!
This is just one of many methods you can use to benchmark your Pi. Another program you can consider using is "sysbench" which should work out of the box without issues.
I hope you enjoyed this instructable. Let me know if you enjoyed this or made it yourself. As always I am happy to receive constructive feedback and comments (be nice, no trolls please).