Below some results collected. Please keep in mind that these are NOT hardware performance numbers but depend on software/settings (see the differences kernel version makes for RockPro64 for example). The purpose of
sbc-bench is to generate insights and not colorful graphs representing numbers without meaning. It's perfectly fine for the same hardware appearing multiple times with different numbers since those differ for a reason (software/settings).
Especially openssl numbers should be taken with a huge grain of salt since the benchmark numbers depend on kernel features and performance with other use cases (e.g. disk/filesystem encryption) might look differently.
So do not rely on collected numbers unless you carefully read through all the explanations and insights below and be prepared to conduct your own benchmarks if you really want to choose appropriate hardware for your use case.
|Board||Clockspeed||Kernel||Distro||7-zip||AES-128 (16 byte)||AES-256 (16 KB)||memcpy||memset||kH/s||URL|
|Amazon a1.xlarge||2300 MHz||4.15||Bionic arm64||8610||458500||1297960||4280||14220||-||http://ix.io/2iFY|
|Amazon m6g.8xlarge||2500 MHz||5.4||Focal arm64||109000||745740||1424770||17340||39950||154.22||http://ix.io/2FrG|
|Apple M1 power core||3200 MHz||5.8||Groovy arm64||5100||638810||1119670||27960||63950||5.30||http://ix.io/2Gjg|
|Apple M1 efficiency||600 MHz||5.8||Groovy arm64||650||150340||224520||5130||7640||0.76||http://ix.io/2Gtf|
|BPi M4||1400 MHz||4.9||Bionic arm64||3500||125430||651460||1010||4360||5.48||http://ix.io/1Dt1|
|BPi R2||1300 MHz||4.4||Xenial armhf||2600||27550||25350||1500||3800||-||http://ix.io/1iGV|
|Clearfog Pro||1600 MHz||4.14||Stretch armhf||2185||44500||43900||935||4940||-||http://ix.io/1iFa|
|Cubietruck||960 MHz||4.19||Stretch armhf||985||15260||18590||380||1380||-||http://ix.io/1u3W|
|EspressoBin||800 MHz||4.17||Stretch arm64||1138||54290||368330||1040||2490||1.23||http://ix.io/1kt2|
|EspressoBin||1200 MHz||4.18||Stretch arm64||1630||81900||544240||1000||2400||1.82||http://ix.io/1lCe|
|Helios4||1600 MHz||4.14||Stretch armhf||2210||44785 *1280||42500 *98560||910||4840||-||http://ix.io/1jCy|
|HoneyComb LX2||1900 MHz||4.14||Ubuntu arm64||27610||394180||1079480||4240||14020||35.88||http://ix.io/1ET3|
|Hugsun X99||2088/1800 MHz||5.9||Focal arm64||7710||412105||1184306||2270||5970||-||http://ix.io/2ICt|
|HummingBoard Pulse i.MX8M Quad||1500 MHz||4.19||Buster arm64||4330||97380||695540||2230||9900||-||http://ix.io/27FC|
|Jetson Nano||1430 MHz||4.9||Bionic arm64||5060||276890||513700||3680||8560||6.64||http://ix.io/1I4j|
|Khadas Edge/Captain||2000/1500 MHz||4.4||Bionic arm64||6550||402150||1130400||2810||4860||10.50||http://ix.io/1rYm|
|Khadas Edge/Captain||2000/1500 MHz||4.4||Stretch arm64||6600||269485||1127780||2860||4880||8.85||http://ix.io/1uar|
|Khadas VIM2||1400/1000 MHz||4.9||Xenial arm64||4800||177600||659000||1690||5610||-||http://ix.io/1ixi|
|Khadas VIM2||1400/1000 MHz||4.17||Bionic arm64||5450||126770||659600||1920||5920||8.59||http://ix.io/1iJ7|
|Khadas VIM3||2200/1800 MHz||4.9||Bionic arm64||8600||398370||1256910||4980||9300||13.12||http://ix.io/1MFD|
|Khadas VIM3L||1908 MHz||4.9||Bionic arm64||5170||194360||1440220||3670||6360||7.29||http://ix.io/26Wy|
|Le Potato||1410 MHz||4.18||Stretch arm64||3780||96680||657200||1810||5730||3.92||http://ix.io/1iSQ|
|Lime A10||910 MHz||4.14||Stretch armhf||550||25200||28250||440||1300||-||http://ix.io/1j1L|
|NanoPC T3+||1400 MHz||4.4||Xenial armhf||6400||143800||651000||1650||3700||-||http://ix.io/1iyp|
|NanoPC T3+||1400 MHz||4.14||Bionic arm64||7480||126000||652600||1440||4540||10.99||http://ix.io/1iRJ|
|NanoPC T4||1800/1400 MHz||4.17||Stretch arm64||6250||307200||1022500||4100||9000||8.24||http://ix.io/1iFz|
|NanoPC T4||1800/1400 MHz||4.17||Stretch arm64||6380||230280||1022600||4160||9000||9.36||http://ix.io/1iZq|
|NanoPC T4||1800/1400 MHz||4.17||Stretch arm64||6230||299600||1023600||4100||9060||10.30||http://ix.io/1iWU|
|NanoPC T4||2000/1500 MHz||4.4||Stretch arm64||5870||308370||1124040||2810||4890||8.70||http://ix.io/1lkG|
|NanoPi Fire3||1380 MHz||4.14||Bionic arm64||7440||126050||653000||1560||4600||10.96||http://ix.io/1jjm|
|NanoPi Fire3||1380 MHz||4.14||Stretch arm64||7420||95700||645400||1520||4570||8.53||http://ix.io/1jiU|
|NanoPi K1 Plus||1152 MHz||4.14||Stretch arm64||3030||78740||533380||1040||3070||3.32||http://ix.io/1m3x|
|NanoPi K2||1480 MHz||4.14||Stretch arm64||3850||43020||50370||1660||3870||4.61||http://ix.io/1iT1|
|NanoPi M4||2000/1500 MHz||4.19||Stretch arm64||6400||334650||1128330||4080||8270||8.86||http://ix.io/1lzP|
|NanoPi NEO4||2000/1500 MHz||4.4||Stretch arm64||6510||320600||1128860||2260||4770||8.71||http://ix.io/1oho|
|NanoPi NEO4||2000/1500 MHz||4.4||Stretch arm64||6030||342620||1121380||2230||4770||8.57||http://ix.io/1oib|
|NanoPi NEO4||2000/1500 MHz||4.4||Stretch arm64||6520||268720||1123190||2280||4770||8.83||http://ix.io/1oim|
|NanoPi NEO4||2000/1500 MHz||4.19||Stretch arm64||6750||278200||1139850||2370||6110||8.84||http://ix.io/1p3T|
|Nintendo Switch||1780 MHz||4.9||Fedora 30 arm-64||6170||346340||642670||2500||3570||-||http://ix.io/1Rnj|
|ODROID-C2||1750 MHz||3.14||Xenial arm64||4070||50500||48500||1750||3100||-||http://ix.io/1ixI|
|ODROID-C2||1530 MHz||4.17||Stretch arm64||3870||43800||51280||1420||2600||4.63||http://ix.io/1iSh|
|ODROID-C4||2010 MHz||4.9||Focal arm64||5450||195130||941590||3310||6270||7.71||http://ix.io/2kaS|
|ODROID-N2||1800/1900 MHz||4.9||Bionic arm64||8140||324900||1024680||4120||8610||11.39||http://ix.io/1BsF|
|ODROID-N2+||2400/2000 MHz||5.9||Focal arm64||9660||412670||1366600||4020||7350||-||http://ix.io/2Gcl|
|ODROID-XU4||1900/1400 MHz||3.10||Jessie armhf||6750||74100||68200||2200||4800||-||http://ix.io/1ixL|
|ODROID-XU4||2000/1400 MHz||4.9||Stretch armhf||6400||73350||72075||2230||4850||-||http://ix.io/1iWL|
|ODROID-XU4||2000/1500 MHz||4.14||Bionic armhf||7100||74700||71500||2240||4880||-||http://ix.io/1iLy|
|Orange Pi PC Plus||1300 MHz||4.14||Stretch armhf||2.880||20890||25270||900||3280||-||http://ix.io/1j1d|
|Orange Pi Plus 2||1300 MHz||4.14||Stretch armhf||2.890||21480||25250||830||3240||-||http://ix.io/1iX4|
|PineH64||1800 MHz||4.18||Stretch arm64||4650||123400||836900||1380||5530||5.62||http://ix.io/1jEr|
|PineH64||1800 MHz||5.4||Buster arm64||4710||116900||839870||1420||5560||7.10||http://ix.io/26Ph|
|Renegade||1400 MHz||4.4||Stretch arm64||3710||95030||644200||1565||7435||3.92||http://ix.io/1iFx|
|Raspberry Pi 2 B+||900 MHz||4.14||Debian Stretch||2070||14350||17450||615||1175||-||http://ix.io/1iFf|
|Raspberry Pi 2 B+||900 MHz||4.14||Raspbian Stretch||2130||14000||16300||1010||1170||-||http://ix.io/1ivw|
|Raspberry Pi 3 B+||original||4.9||Raspbian Stretch||3600||35500||42700||1230||1640||-||http://ix.io/1iI5|
|Raspberry Pi 3 B+||normal||4.14||Raspbian Stretch||3240||30500||36600||1130||1530||-||http://ix.io/1ism|
|Raspberry Pi 3 B+||normal||4.14||Raspbian Stretch||3040||29500||36600||1050||1500||-||http://ix.io/1iGM|
|Raspberry Pi 3 B+||UV/normal||4.14||Raspbian Stretch||2100||29500||36400||1040||1460||-||http://ix.io/1iH0|
|Raspberry Pi 3 B+||OC/normal||4.14||Raspbian Stretch||3130||30500||36620||1230||1780||-||http://ix.io/1iGz|
|Raspberry Pi 3 B+||with fan||4.14||Raspbian Stretch||3670||35800||42600||1120||1600||-||http://ix.io/1isD|
|Raspberry Pi Zero||1000 MHz||4.14||Raspbian Stretch||450||13400||16820||400||1590||-||http://ix.io/1niO|
|Raspberry Pi 4 B||1500 MHz||4.19||Raspbian Buster||5500||62350||64860||2460||3170||-||http://ix.io/1MFf|
|Raspberry Pi 4 B||1500 MHz||5.4||Raspbian Buster arm64||5080||38070||30170||2500||3360||-||http://ix.io/2paq|
|Raspberry Pi 4 B||1850 MHz||4.19||Raspbian Buster||6700||77230||80050||2610||3610||-||http://ix.io/26Pr|
|Raspberry Pi 400||1800 MHz||5.4||Raspberry Pi OS Buster||6550||75050||77890||2680||3110||-||http://ix.io/2Cyi|
|Rock64||1300 MHz||4.4||Bionic arm64||3410||89060||601200||1310||5680||4.46||http://ix.io/1iGW|
|Rock64||1300 MHz||4.18||Bionic arm64||3530||116100||605250||1340||5770||4.65||http://ix.io/1iH4|
|Rock64||1300 MHz||4.4||Stretch arm64||3430||88600||601000||1350||5680||3.64||http://ix.io/1iHo|
|Rock64||1300 MHz||4.18||Stretch arm64||3560||89070||603800||1340||5770||3.80||http://ix.io/1iHB|
|Rock64||1400 MHz||4.4||Stretch arm64||3610||95000||644250||1330||5700||3.85||http://ix.io/1iFm|
|Rock64||1400 MHz||4.4||Stretch arm64||3590||95000||643700||1320||5640||4.40||http://ix.io/1iZj|
|Rock64||1400 MHz||4.4||Stretch arm64||3580||94800||644380||1330||5680||4.63||http://ix.io/1iYK|
|Rock64||1400 MHz||4.4||Stretch armhf||3620||99400||624000||1430||3620||-||http://ix.io/1iwz|
|Rock Pi 4A||2000/1500 MHz||5.3||Bionic arm64||6910||402750||1147370||3660||8310||10.71||http://ix.io/21fX|
|Rock Pi 4B||1800/1400 MHz||4.4||Stretch armhf||~6250||261960||1007500||1900||4850||-||http://ix.io/1pJi|
|Rock Pi 4B||2000/1500 MHz||4.4||Stretch armhf||~6450||301470||1113900||1870||4860||-||http://ix.io/1rrO|
|RockPro64||1800/1400 MHz||4.4||Stretch arm64||6140||298800||1015600||2770||4850||8.14||http://ix.io/1lBC|
|RockPro64||1800/1400 MHz||4.4||Stretch armhf||6250||275000||1000150||2000||4835||-||http://ix.io/1iFZ|
|RockPro64||1800/1400 MHz||4.4||Stretch arm64||6420||312690||1018480||3720||8400||8.24||http://ix.io/1ub9|
|RockPro64||1800/1400 MHz||4.18||Stretch arm64||6300||237700||1021500||3650||8450||8.20||http://ix.io/1iFp|
|RockPro64||2010/1510 MHz||5.4||Focal arm64||6920||397740||1145300||3700||8430||11.55||http://ix.io/2sZH|
|RockPro64||2010/1510 MHz||5.8||Bullseye arm64||7000||369820||1144950||3690||8360||11.08||http://ix.io/2yIx|
|Teres-I||1050 MHz||4.19||Stretch arm64||2785||72261||491590||1080||2820||-||http://ix.io/1tJg|
|Tinkerboard||1730 MHz||4.14||Stretch armhf||5350||63150||66600||1480||3900||-||http://ix.io/1iSX|
|x5-Z8300||1420 MHz||4.9||Stretch amd64||3900||101580||178010||2380||2380||7.81||http://ix.io/1lgD|
|x5-Z8350||1920/1680 MHz||4.15||Bionic amd64||4710||120300||207640||2740||3140||-||http://ix.io/1HnC|
|x5-Z8350||1920/1680 MHz||5.4||Focal amd64||4790||129810||237230||3170||2960||9.38||http://ix.io/2Jdb|
|Celeron J3455||2300/1500 MHz||4.17||Stretch amd64||7000||316480||429660||4090||4050||17.26||http://ix.io/1m5p|
|Pentium N4200||2560/1100 MHz||4.14||Bionic amd64||7469||354328||468008||4682||4997||18.75||http://ix.io/1ngq|
|Pentium J4205||2560/1500 MHz||4.17||Stretch amd64||7570||355540||480640||5070||5170||18.82||http://ix.io/1m5t|
|Ryzen R1606G||2600/1400 MHz||5.4||Focal amd64||7970||560110||700780||8230||5970||16.45||http://ix.io/2tQQ|
|Celeron N4100||2300/1100 MHz||4.15||Bionic amd64||8510||435030||669350||4750||5240||18.33||http://ix.io/1uTS|
|Celeron J4105||2400/1500 MHz||4.15||Bionic amd64||9020||458670||697100||5500||7410||19.07||http://ix.io/1qal|
|Celeron J4105||2400/1500 MHz||4.15||Bionic amd64||8960||453860||697080||5620||7650||19.13||http://ix.io/1qb0|
|Pentium J5005||2700/1500 MHz||5.0||Bionic amd64||9230||379740||778360||5530||7130||20.74||http://ix.io/21rE|
|Pentium G4600||3600 MHz||4.19||Buster amd64||11810||878790||984820||15120||33380||21.88||http://ix.io/2jVw|
* Number obtained with cryptodev (Marvell's CESA).
- 7-zip number is an averaged multi threaded score from 3 consecutive
7z bruns. Only relevant for server workloads where stuff happens in parallel. Check the links for single threaded results (on big.LITTLE SoCs individually) to get an idea how most typical (single threaded) workloads perform
- AES-128 (16 byte) is a single threaded encryption score with very small chunks of data (useful to get an idea how initialization overhead influences crypto performance with small packets). On big.LITTLE SoCs numbers show big core performance
- AES-256 (16 KB) is a single threaded encryption score with rather huge chunks of data. On big.LITTLE SoCs numbers show big core performance
- memcpy and memset are tinymembench measurements for memory bandwidth. On big.LITTLE SoCs numbers show big core performance
- kH/s is a multi threaded cpuminer score showing the board's performance when executing NEON optimized code. To get the performance difference between big and little cores check the links in the right column
- The Amazon a1.xlarge numbers represent a 1st gen Graviton CPU (64-bit 'ARM Neoverse') limited to four A72 cores and 8GB memory.
- The Amazon m6g.8xlarge numbers represent a 2nd gen Graviton2 (64-bit Neoverse-N1) limited to 32 N1 cores clocked at 2.5GHz.
- The 1st Apple M1 number represents a single core Ubuntu 20.10 VM running on an MacBook Air with the VM executed almost all the time on one of Apple's ARMv8.4 power cores. The 2nd number is the same VM setup this time sent to an efficiency core clocking in at just 600 MHz instead of the usual 2064 MHz. Running natively and not inside a VM performance numbers are 5% to 10% higher.
- Cubietruck numbers are more or less representative for all other Allwinner A20 devices, same with Lime for Allwinner A10 and Olimex Teres-I for A64
- Clearfog Pro and Helios4 use exactly same SoC (Armada 385), kernel and clockspeeds and the only reason why OpenSSL numbers differ is since Helios4 numbers were made using Marvell's CESA crypto accelerator via cryptodev which provides nice speed improvements with larger block sizes but also some initialization overhead with tiny block sizes. Also CPU utilization is way lower so the SoC is free for other stuff while performing better at the same time.
- EspressoBin's boot BLOB claims to run at up to 1GHz while real clockspeeds are lower maxing out with this setting at 790MHz (obviously a kernel bug -- see details)
- HoneyComb LX2 numbers are made with pre-release settings (the NXP LX2160A's A72 cores clocked with 1.9 GHz instead of 2.0 GHz). Solid-Run's Jon Nettleton shared also slightly better numbers with CPU cores at 2.4Ghz and RAM at 3200Mtps.
- Hugsun X99 is an overclocked RK3399 TV box, just to show the effect of overclocking the A53 cores to 1.8 GHz and the A72 to 2.1 GHz on an RK3399.
- Jetson Nano was properly powered with 5V/5A via barrel plug (when powering through Micro USB the board enters a lower consumption/performance profile)
- NanoPi K1 Plus numbers are preliminary. Currently in Armbian highest cpufreq OPP is 1152 MHz and throttling tresholds are way too low, once this is unlocked (SoC capable of almost 1.4GHz) numbers will improve further
- NanoPi NEO4 numbers: 1st result is from my NEO4 N°1 running with a NanoPi M4 image. This NEO uses the vendor supplied thermal pad between SoC and heatsink. 2nd number from my 2nd NEO4 this time using NEO4 settings (
rk3399-nanopi4-rev04.dtbloaded) with a copper shim between heatsink and SoC which as usual improves 'thermal performance' a lot. Since memory bandwidth and especially latency is too low another test needed with my NEO4 N°2, this time again with M4 settings (
rk3399-nanopi4-rev01.dtbloaded) and an additional fan. Memory performance restored, slightly better performance due to colder SoC. 4th result made with 4.19.0-rc4. Please be aware that RK3399 memory performance numbers differ alot between 4.4 and mainline kernel for yet unknown reasons!
- ODROID-N2 number should be taken with a grain of salt since made with a pretty early software stack. Most probably scores will slightly improve over time. 'Overclocked' executions with both CPU clusters set to 2.0 GHz showed reliability issues most probably due to DVFS undervoltage (cpuminer quit almost immediately here while it ran only 50 seconds there -- this tool since being a load generator checking for data corruption can also be used for reliability testing but I would prefer our StabilityTester instead)
- RPi 3 B+ performance shown as original was measured with an older ThreadX release (6e08617e7767b09ef97b3d6cee8b75eba6d7ee0b from Mar 13 2018). Back then the 3B+ was faster than the 3B. This changed with a newer ThreadX release (4800f08a139d6ca1c5ecbee345ea6682e2160881 from Jun 7 2018) since RPi Trading people decided to trash performance on every RPi 3 B+ to masquerade instability issues on a fraction of boards (details)
- RPi 3 B+ performance numbers shown as normal were made with no or just a heatsink (in contrast to with fan)
- RPi 3 B+ marked as 'UV/normal' means: normal settings and average Micro USB cable resulting in UV (undervoltage). Once the demanding 7-zip benchmark started voltage dropped below 4.63V and 'frequency capping' (downclocking to 600 MHz) happened destroying performance. See the detailed log: 1400 MHz are reported by the kernel while it's 600 MHz in reality. Is this just highly misleading or already cheating?
- RPi 3 B+ marked as 'OC/normal' means: OC (overclocked) settings, stable voltage but no fan used. Since SoC temperature exceeds 60°C the 'firmware' starts to cheat and downclocks to 1200 MHz while the kernel reports running at 1570 MHz. At least memory overclocking is somewhat effective.
- The 64-bit (arm64) RPi 4 B numbers lack 7-zip results due to me owning just a 1GB board and less free memory available with the two arm64 variants tested and therefore the benchmarks being aborted by the
oom-killer. But it's obvious that 64-bit performance numbers are lower than 32-bit Raspbian.
- Rock Pi 4B numbers are preliminary. Board has been tested without heatsink first so throttling occured as expected. Second time with higher cpufreq OPPs just a fan was added (fan without heatsink == pretty inefficient). Memory performance seems rather low but that's due to testing with vendor's armhf Linaro images -- see other RK3399 devices running same software stack, e.g. RockPro64 numbers above with kernel 4.4, armhf and also being limited to 1.8/1.4GHz.
- Last RockPro64 entry has been made after ayufan solved memory performance problem with Rockchip's 4.4 kernel on his images (see discussion)
- Vim2 is somewhat special: not a real big.LITTLE design but 2 A53 clusters controlled by a firmware BLOB that allows cluster 0 to clock up to 1414 MHz (reported falsely as 1512 MHz) and cluster 1 able to reach 1 GHz (details)
- x86 numbers are meant as comparison. x5-Z8300 numbers were made with an UP Board, 1st x5-Z8350 is an Atomic Pi and the 2nd a RockPi X, Celeron J3455 with an ASRock J3455-ITX mainboard, Pentium N4200 on UP2 Board, Pentium J4205 on an ASRock J4205-ITX, Ryzen Embedded R1606G on DFI GHF51 SBC, Celeron J4105 on two ODROID-H2 with different DDR4-PC19200 (2400MT/s) SO-DIMMs (remotely accessed via maze.odroid.com) and Celeron N4100 tested on an ODROID-H2 engineering sample with single channel DRAM config, Pentium J5005 is in an MINIX NEO J50C-4, Pentium G4600 is inside a TK Microserver MI106+.
- Benchmarking the Raspberry Pi is useless when not taking into account that there always is a primary operating system running on the primary CPU (VideoCore) that fully controls the hardware. ARM cores are just guests here. That's why
sbc-benchstarting with v0.2 also logs ThreadX version and configuration (/boot/config.txt)
- Looking at RPi 2 B+ numbers this is 2 times the same hardware, one time running latest Raspbian Stretch Lite and one time OMV/Armbian. Userland is both times Debian Stretch but Raspbian packages are built for ARMv6 while upstream Debian builds for ARMv7 (though with less effective compiler switches). Overall performance looks more or less the same except a very low
memcopybandwidth value with OMV. What's the reason since same ditro and kernel is used and same GCC to compile
tinymembench? Is it firmware 'af8084725947aa2c7314172068f79dad9be1c8b4 from Apr 16 2018' vs. '47b05c853342eb6e4ea5b017d981e0ef247fb8be from Jul 3 2018'?
- Looking at RPi 3 B+ numbers it's obvious that 'firmware' version is the most important factor. With original firmware (6e08617e7767b09ef97b3d6cee8b75eba6d7ee0b from Mar 13 2018) performance is ok just to get trashed after applying firmware 4800f08a139d6ca1c5ecbee345ea6682e2160881 from Jun 7 2018 which totally changes throttling behaviour. From then on you either need a fan for good performance or add a
temp_soft_limit=entry to the firmware config file (we can't have a look what all those partially undocumented settings really do since RPi's main operating system is closed source)
tinymembenchwhen executed on an A53 in an armhf userland compared to arm64 seems to generate lower
memsetnumbers (78% on RK3399 -- see RockPro64 arm64 vs. RockPro64 armhf -- and 64% on RK3328 -- see Rock64 arm64 vs. Rock64 armhf). Status: needs further investigation and confirmation
- Distro version doesn't seem to make a difference with
7-zipscores. Applies to both armhf and arm64 too -- see Rock64 numbers above
7-zipscores benefit slightly from memory performance. See RK3328 equipped Renegade at 1.4 GHz with 4.4 kernel and Rock64 with same setup
opensslnumbers are not affected by memory performance and are the same with same CPU cores and same clockspeeds. At least with Cortex-A53 running at 1.4 GHz with a Debian Stretch arm64 binary: Le Potato, NanoPi Fire3, Renegade, Rock64 and RockPro64 with openssl pinned to an A53 core: ~96000k with AES-128/16bit and ~650000k with AES-256/16KB
- It seems the combination arm64 Bionic with very recent kernel improves AES encryption results with small data chunks (less than 1KB -- see Rock64 with 4.18 at 1.3GHz and Vim2 with 4.17 at 1.4GHz vs. Rock64 with 4.4 at 1.3GHz). Status: Needs further investigations (most probably related to GCC version)
- It seems running an armhf userland on 64-bit SoCs also improves AES encryption results with small data chunks (see armhf entries for NanoPC T3+, Rock64, RockPro64 and Vim2). Status: very interesting, needs further investigations
- It seems running Xenial binaries even further improves AES/SSL performance when ARMv8 Crypto Extensions are available. Status: while interesting irrelevant, we should get rid of Xenial and Jessie numbers.
- It makes a huge difference whether ARMv8 Crypto Extensions can be used or not. See the many 64-bit SBC results above and compare with 32-bit SoCs or RPi 3B+, ODROID-C2 and NanoPi K2 (the latter 3 basing on 64-bit ARMv8 SoCs without crypto engine licensed/available)
- The used distribution makes a big difference with
cpuminer. Libs and GCC versions obviously matter (GCC 9.3 on Focal vs. 8.3 on Buster vs. 7.3 on Bionic vs. 6.3 on Stretch -- some benchmarks heavily depend on compiler versions). Stretch with GCC 7.3 provides a 15% performance increase with cpuminer on RK3328 and RK3399 (see Rock64 and NanoPC T4 numbers above and there the logs to compare performance of big and little cores). With GCC 8.2 and Stretch it's 20% with RK3328 and even 25% with RK3399 (the A72 performance increasing more compared to the A53 cores -- check individual kH/s numbers in the logs). With Focal (GCC 9.3) it's even more, compare Rock Pi 4A with last RockPro64 entry.
- (more to come soon)
The bigger picture
- To compare different hardware exactly the same software environment (apps, libs, compiler, kernel) is needed. Ignoring this will produce numbers without meaning.
- ARM's big cores (A15, A17, A72) perform a lot better than the little cores (A7, A53). Everything that needs high single threaded performance will hugely benefit from running on such a core. This puts SoCs like RK3288 (Tinkerboard), Exynos 5244 (ODROID XU4) or RK3399 in a better position. For the big.LITTLE designs a working HMP scheduler is mandatory since otherwise performance hungry tasks end up on a slow core. This is even true for pseudo big.LITTLE like on the Vim2/S912
- 7-zip's benchmark still looks like a nice indicator for a 'server workloads' performance index (multi threaded tasks that do not rely on floating point arithmetics but partially on memory performance). Though these scores are totally irrelevant when it's about SBC use cases that focus on something different (e.g. a 'Desktop Linux' needing high single threaded CPU performance, HW accelerated GPU and VPU and also fast random IO on the rootfs)
- We see a huge variation in tinymembench numbers with some boards outperforming others by magnitudes while the effect in reality for CPU bound workloads is rather minimal though high memory bandwidth is a requirement for certain other tasks (e.g. playing 4K video). At least numbers are there to generate further insights.
- Identical SoCs perform more or less identical if 'environmental conditions' (clockspeeds) are the same -- see Renegade vs. Rock64 numbers or NanoPC T4 vs. RockPro64 or ODROID-C2 vs. NanoPi K2.
- Same could be said for different Cortex-A cores. One A53 performs like the other as long as both run at the same clockspeed (with some exceptions most probably due to internal cache sizes -- see cpuminer numbers for Amlogic S905 vs. S905X/RK3328). With same count of cores you get similar performance (if the task(s) in question benefits from parallel execution)
- Cortex-A53 running at the same clockspeed as A7 shows almost ~30% better performance (~3500 7-zip MIPS vs. ~2700). This is even true when running ARMv7 code (see RPi 3 B+ numbers). In general it seems irrelevant whether the A53 cores run an armhf or arm64 userland, some numbers are even higher when running armhf code. This is very interesting since there are scenarios where running an armhf userland results in needing way less physical memory for the same task while performing identical. Please note: it's about the userland (32-bit vs. 64-bit) and not kernel (64-bit of course)
- On SoCs that contain an own crypto engine the openssl numbers above don't tell the whole truth (userspace vs. in-kernel crypto). It needs additional benchmarks to get an idea how CESA (Clearfog/Helios4 with Armada 38x), sun4i-ss (Allwinner SoCs), Samsung's Slim SSS (ODROID XU4/HC1/HC2) or MediaTek's crypto accelerator (BPi R2 / MT7623) perform with real-world workloads like disk encryption.