Performance unterschiedlicher Raspberry Pis

5 Min Lesezeit CC BY-ND 4.0 open-source linux macos raspberry-pi rust server

Ich hab mich gefragt, wie die unterschiedlichen Raspberries etwa vergleichbar sind in Performance. Der Pi 2 und Pi 4 sind beides 4 Kerner, das sollte nicht soo viel Unterschied machen, oder? Da ich aktuell mehr mit Rust mache, habe ich mal eines meiner Rust Tools auf unterschiedlichen Geräten gebaut.

Als Repository habe ich mein Meeting Countdown Tool genutzt. Das Projekt selbst ist vermutlich relativ egal, solange es auf allen Geräten dasselbe ist. In diesem Fall hat es 15 Dependencies und das Paket selber macht 16 teilweise parallelisierbare Kompilationen.

Um die Dauer des Bauens ohne Downloads zu ermitteln habe ich immer erst einmal cargo build laufen lassen, sodass alles heruntergeladen ist.

Für den Release Build habe ich zweimal cargo clean && cargo build --release laufen lassen und das Ergebnis gemittelt. Dabei unterschied sich das Ergebnis der Durchläufe erstaunlich wenig. Selbst beim Raspberry Pi 1B war die Zeit nur 10 Sekunden auseinander. Als Zeit habe ich die Zeit, die Cargo selbst ausgibt verwendet.

Für den Dev Build habe ich erst cargo build ausgeführt, um das Projekt gebaut zu haben. Danach habe ich mehrfach touch src/main.rs && cargo build ausgeführt und die Ergebnisse gemittelt. Der Gedanke hierbei ist, dass man beim Entwickeln nur die Sourcen neu bauen muss, nicht alle Dependencies. Sprich, wie lange es dauert, bis seine Änderung den Compiler Fehler aufzeigt. Bei einem Release Build muss man nicht daneben sitzen, da ist einem die Zeit egal. Beim Entwickeln interessiert die Zeit jedoch schon.

Man muss jedoch bedenken das dieses Projekt relativ klein ist, sowohl was das Projekt selbst als auch die Menge an Dependencies angeht. Je mehr Dependencies ein Projekt hat, desto mehr Vorteile haben Multi Core CPUs. Wird das Projekt selbst größer und hat mehr Source Code, hat eine gute Single Core Leistung Vorteile.

Randbedingungen

git clone https://github.com/EdJoPaTo/meeting-countdown
cd meeting-countdown
git checkout 32e6619e8080e21447b3bf4952a5862149b510ec
rustup override set 1.46.0

Release Build:

cargo build
cargo clean && cargo build --release
cargo clean && cargo build --release

Dev Build:

cargo build
touch src/main.rs && cargo build
touch src/main.rs && cargo build

Angaben zu der CPU ist immer mittels lscpu ermittelt. Ausnahme ist das MacBook.

Verwendet wurden folgende Versionen:

$ rustc --version
rustc 1.46.0 (04488afe3 2020-08-24)
$ cargo --version
cargo 1.46.0 (149022b1d 2020-07-17)

Die verwendeten Geräte sind mehr oder weniger zufällig gewählt. Entweder sind die Geräte in meinem Besitz oder zum Zeitpunkt des Testens für Hochschulprojekte mir zugänglich.

Vergleich

GerätCPU Model NameKerneThreads (Summe)CPU maxRelease BuildDev Build
Raspberry Pi 1BARM117611700 MHz41m 13s21.35s
Raspberry Pi 2Cortex-A744900 MHz3m 52s9.51s
PinePhone 1.2bCortex-A53441152 MHz2m 23s5.29s
Netcup RS G? (2014)KVM112493 MHz2m 15s3.17s
Raspberry Pi 3Cortex-A53441200 MHz2m 07s5.80s
Raspberry Pi 4Cortex-A72441500 MHz1m 09s3.20s
Rock Pi 4B2xCortex-A72 4xCortex-A532+461800 MHz1m 03s2.11s
Netcup VPS G8KVM222400 MHz52s0.84s
NUC5i3-5010U242000 MHz35s0.80s
Zenbook UX-31Ai7-3517U243000 MHz28s0.61s
Netcup RS G8KVM442095 MHz16s0.65s
NUC7i7-7567244000 MHz14s0.40s
MacBook Pro 2018i7482.7 GHz12s0.58s
Random Uni Serveri9-9980XE18364500 MHz7s0.75s

Fazit

Der älteste Raspi 1B ist erwarteterweise der Langsamste, da dieser auch nur 1 Kern hat. Spannend fand ich persönlich, dass der Unterschied zwischen Raspberry Pi 2, 3 und 4 doch so groß ist. Pi 2 benötigt, verglichen mit dem Pi 4, fast 4-mal so lange und der Pi 4 hat nur eine etwa 60 % höhere Frequenz, weit ab von dem vierfachen. Auch der Unterschied zwischen 2 und 3 bzw. 3 und 4 ist jeweils recht groß. Für mich war der 3er beispielsweise bisher nur ein “etwas schneller und WLAN” Upgrade, keine fast Verdoppelung. Leserkommentar: Auch der Sprung von Pi 1 zu 2 ist gewaltig: 4-fach Kerne aber 10-fache Release Build Dauer.

Interessanterweise waren Rock Pi und Raspberry Pi 4 beim Release nahezu gleich schnell, obwohl der Rock Pi sowohl eine höhere Frequenz als auch mehr Threads hat. Beim Dev Build macht sich aber die höhere Frequenz bemerkbar.

Mein Hauptgerät, der NUC5i3 ist nicht der schnellste, beim Dev Build aber ganz passabel dabei. Vielleicht würde es sich für das Entwickeln jedoch anbieten, auf mein MacBook zu wechseln.

Zwischenzeitlich war eine Idee, das Bauen auf einem der Server zu machen, allerdings sieht man hier schon relativ gut, dass der Dev Build nicht wirklich schneller (oder sogar langsamer) ist. Vielleicht bringt G(eneration) 9 der Server hier noch mal einen Benefit, ich habe aber aktuell keinen davon im Einsatz um diesen zum Testen zu nutzen.

Der 36 Threads Server an der Hochschule war interessanterweise sogar langsamer im Dev Build als andere Geräte, hat aber beim Release Build durch die Menge an Threads schnell bauen können. Hier hat auch das MacBook mit 8 Threads einiges Wett machen können.

Wenn ich auf einem ARM Gerät entwickeln wollen würde, würde ich zum Raspberry Pi 4 tendieren, da dieser auch generell viel Support bietet und nicht allzu teuer ist. 2 GB würden mir tendenziell reichen. Hier bin ich noch gespannt, wie sich das PinePhone schlägt und wie gut man sogar auf den PinePhone Rust entwickeln kann. Edit: Selbe CPU wie der Raspberry Pi 3 und etwas langsamerer CPU Takt: Vergleichbar mit dem Raspberry Pi 3.

Für ein x86_64 Gerät bieten sich wohl immer Geräte mit mehr Kernen an. Im Dev Build ist die Single Core Performance wichtig, aber selbst das 8 Jahre alte Zenbook war hier gut dabei.