Christopher Stanton, element14
Our good friend biglesp put the Raspberry Pi 2 to the test the last time around, though I feel that he missed a good number of possible benchmarks to run on the hardware. With that in mind, I'm going to test the main boards of the Raspberry Pi that I can get my hands on and not only run the main benchmarks Les ran, but also a good few more thanks to Roy Longbottom's benchmark collection. I also have some approximate information on idle power usage, which everyone appears to be interested in.
One technical capability that I would have loved to put through its paces with Roy's benchmarks is the OpenGL driver that the Pi Foundation have made available. Unfortunately the Roy benchmarks are currently not compatible with it, so I guess it has just been testing against the binary blob for now. Regardless, the VideoCore is one part of the ARM processor that practically has not changed from the early Model B to the most recent version of the Raspberry Pi.
Figure 1. | Raspberry Pi 3 Model B with quad core A53 processor. |
It does not hurt to go over the versions of Raspberry Pi again, and here are the models that I tested (Table 1).
Table 1. Raspberry Pi boards for tests. | ||||||||||||||||
|
If you want more information on the specifications you can check the comparison chart linked in the Raspberry Pi space. What we're mainly concerned with is the processor, power usage and somewhat also RAM, however the RAM runs at 400Mhz for each board so that may make little difference.
What does make somewhat of a difference is that the Raspberry Pi 3 (Figure 1) is an ARMv8 Processor with 64bit support, however, Raspbian at the time of writing does not have 64bit support. In part this is so that it is backwards compatible with the previous Raspberry Pi. There is yet to be a 64bit Repo. Debian has been building up its 64bit support over a period of years, and potentially someone could compile together a kernel and binaries for a 64bit Jessie Debian for the Raspberry Pi 3. Go on, accept the challenge!
Taste Testing the Pi
Before I get into the software used for the benchmarking, I decided to run a few commands to get the processor information and supported instructions (Table 2).
Table 2. cpuinfo command - processor information and supported instructions. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
What is pretty clear with cpuinfo is that it identifies the Raspberry Pi 3 processor as an ARMv7, this appears to be a failure in the software for now but this may change with a kernel/firmware update to ARMv8. What is interesting is that we have a new feature: crc32 (Table 3).
Table 3. lscpu command - processor information. | ||||||||||||||||||||||||||||||||||||||||||||||||
|
With the lscpu command we can see that the Pi 3 processor is perhaps still not being identified properly, but at least that it, like the Pi 2 before it, can perform cpufreq scaling (which is also shown when issuing the lshw command). We can also clearly see that we have a confirmed, rather gladly, four core processor with the Pi 2 and Pi 3. Phew!
If you want to run these commands yourself on your Raspberry Pi with Raspbian then you can make sure you have them installed thusly:
sudo apt-get update
sudo apt-get install lscpu cpuinfo lshw
From a terminal window either within your desktop environment or from pressing CTRL-ALT-F1 (to F7, typically).
Power Usage
You can find some strange little devices (Figure 2) that will plug in line with your USB hardware and it will tell you the most useful of things, such as how much power is being drawn! So I thought "sweet! Let's see how much power these draw while idle!" (Table 4).
Figure 2. | USB-voltmeter for measuring Raspberry Pi Power Usage. |
Table 4. Raspberry Pi Power Usage. | ||||||||||||||||||
|
Let me give these values some context, each Raspberry Pi was set to boot to the terminal, so that the X windows environment was not running. The only devices connected were a HDMI to DVI adapter to a 19" Widescreen monitor, a Dell USB keyboard, a 16gByte Class 10 microSD card and the power supply, which was providing 5 Volts, 2 Amps. There was no ethernet cable plugged in (though I can note that when it was, the power usage went up in all cases). We can see from the charts that the Pi 3 is pulling more power at idle than its predecessors, it is likely worth noting that the on board WiFi adapter of the Pi 3 was active, though it was not associated with an access point. The Bluetooth 4.1 adapter status was not intentionally active, as there was no driver loaded or software to use it. So it is likely the increase in power usage is due to the WiFi chip.
SysBench
Now this software has been around since 2004, it was originally intended for input/output (io) file operations and database benchmarking. Thanks to being open source it gradually developed into an almost all-round system benchmark which also includes aspects of processor testing as well as IO and databases.
SysBench's processor tests verify prime numbers by going through all possible divisions and only being satisfied when the result is zero. This does mean that it does not test all features of the processor, except for raw number crunching. SysBench was ran with the following parameters:
sysbench --num-threads=1 --test=cpu --cpu-max-prime=20000 --validate run (Table 5)
sysbench --num-threads=4 --test=cpu --cpu-max-prime=20000 --validate run (Table 6)
Here is a breakdown of the command line parameters:
- sysbench - The name of the software to run
- --num-threads - This is the number of processes to run, in the tests we run 1 thread and then 4 threads, this means that it will create 1 or 4 processes and run one process per core. Since the Raspberry Pi 1 Model B+ has one core it made sense to run a one core test on each model of Raspberry Pi for fairness alongside running 4 threads.
- --test=cpu - This parameter ensures we are only testing the processor, as mentioned previously SysBench can perform other tests, too
- --cpu-max-prime - This is the maximum prime number value we want to calculate up to.
- --validate - This ensures that the results we have returned are valid
- run - The software can emulate or test rather than actually perform the requested benchmark, so we want to tell it to actually run it.
Table 5. sysbench with 1 thread. | ||||||||||||||||||||||||||||
|
With the Pi 3 versus the Pi 1, the results show about a 94% total speed difference, compared to the Pi 2 there is a 47% speed difference on the total time taken. What I find most interesting about these results, though, is the difference between the minimum and maximum time taken. The Pi 3 shows a 194% speed improvement over the B+ and an 88% speed improvement over the Pi 2. So while the overall time may not feel that big of a deal, per request it is performing them a lot faster. There's also evidence that it is overall significantly faster than the B+.
Table 6. sysbench with 4 threads. | ||||||||||||||||||||||||||||
|
This test is an unfair comparison with the Pi 1 B+ since it only has one processor core, so it is not surprising that it takes significantly longer than the Pi 2 and 3. The Pi 2 closes the gap a bit closer when working with all four cores here than with the single core test though the Pi 3 still outperforms by 75% with the difference between the min and max time it takes for the requests, overall there is still only a 47% speed difference which is almost half.
Overall the Pi 3 comes out on top as faster, though it would be interesting to see how the Pi 2 compares if it was over clocked. Still, something to remember is that computing prime numbers is just one function of what this processor is capable of.