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ät | CPU Model Name | Kerne | Threads (Summe) | CPU max | Release Build | Dev Build |
---|---|---|---|---|---|---|
Raspberry Pi 1B | ARM1176 | 1 | 1 | 700 MHz | 41m 13s | 21.35s |
Raspberry Pi 2 | Cortex-A7 | 4 | 4 | 900 MHz | 3m 52s | 9.51s |
PinePhone 1.2b | Cortex-A53 | 4 | 4 | 1152 MHz | 2m 23s | 5.29s |
Netcup RS G? (2014) | KVM | 1 | 1 | 2493 MHz | 2m 15s | 3.17s |
Raspberry Pi 3 | Cortex-A53 | 4 | 4 | 1200 MHz | 2m 07s | 5.80s |
Raspberry Pi 4 | Cortex-A72 | 4 | 4 | 1500 MHz | 1m 09s | 3.20s |
Rock Pi 4B | 2xCortex-A72 4xCortex-A53 | 2+4 | 6 | 1800 MHz | 1m 03s | 2.11s |
Netcup VPS G8 | KVM | 2 | 2 | 2400 MHz | 52s | 0.84s |
NUC5 | i3-5010U | 2 | 4 | 2000 MHz | 35s | 0.80s |
Zenbook UX-31A | i7-3517U | 2 | 4 | 3000 MHz | 28s | 0.61s |
Netcup RS G8 | KVM | 4 | 4 | 2095 MHz | 16s | 0.65s |
NUC7 | i7-7567 | 2 | 4 | 4000 MHz | 14s | 0.40s |
MacBook Pro 2018 | i7 | 4 | 8 | 2.7 GHz | 12s | 0.58s |
Random Uni Server | i9-9980XE | 18 | 36 | 4500 MHz | 7s | 0.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.