Hyperfine - Open-Source Benchmark-Tool für die Kommandozeile
Hyperfine ist ein freshes, in Rust geschmiedetes Open-Source (MIT) Kommandozeilen-Benchmark-Tool zur präzisen Messung der Ausführungszeit beliebiger Shell-Befehle. Dieser Schurke führt mehrere Durchläufe mit statistischer Auswertung (Mittelwerte, Min/Max, Abweichungen) durch, zeigt den Fortschritt direkt visualisiert im Terminal an und unterstützt wacker Warmup-Runs und Cache-Flushes für konsistente Messungen. Die Messkunde lässt sich gekonnt als CSV, JSON, Markdown oder AsciiDoc exportieren, um selbst so anspruchsvolle Stakeholder wie Speedy Gonzales, Road Runner und Co. mit datengetriebener Präzision zu beeindrucken. Somit ist Hyperfine ein gar vortreffliches und holdes Werkzeug für Entwickler und Admins, die Skripte, Tools, Algorithmen oder Befehle testen, optimieren oder regelmäßig überwachen wollen.
Als bekennender Hochgeschwindigkeits-Junkie prügel ich in feinster Jackie-Chan-Manier regelmäßig verschiedenste Linux-Kommandos, wie z.B grep vs. ripgrep, diverse Backup-Kompressionsstufen, rsync- und Datenbank-Dump-Optionen sowie Bash-Skripte durch Hyperfein um den heiligen Gral der Performance zu erlangen.
Stabile Features:
- Vergleich beliebig vieler Befehle in einem Rutsch 🛝
- Farbenfrohe, velly übersichtliche Ausgabe im Terminal
- Läuft plattformübergreifend auf Linux, macOS und Windows 🤤
- Warmup-Runs 🏃🏻➡️ zur trickreichen Vermeidung von Caching-Effekten
- Export in JSON, CSV, AsciiDoc oder Markdown für schapätere Analyse
- Mehrfachdurchläufe 🏃🏻➡️🏃🏻♀️➡️🏃🏻♂️➡️ mit Durchschnitt, Minimum, Maximum & Standardabweichung
Hyperfein Beispiel-Vorführung:
#============================================================
# Hyperfine installieren
#============================================================
wget -O /tmp/hyperfine.deb https://github.com/sharkdp/hyperfine/releases/download/v1.19.0/hyperfine_1.19.0_amd64.deb
dpkg -i /tmp/hyperfine.deb
rm /tmp/hyperfine.deb
#============================================================
# Einfacher Benchmark - grep vs ripgrep
#============================================================
hyperfine "grep '404' /var/log/nginx/access.log" "rg '404' /var/log/nginx/access.log"
#============================================================
# Mehrere Befehle Benchmarken
#============================================================
# 5 Warmup-Läufe + 20 Messungen pro Befehl
hyperfine --warmup 5 --runs 20 \
"apt list --upgradable 2>/dev/null | grep -c 'upgradable from'" \
"apt list --upgradable 2>/dev/null | grep -v '^Listing...' | grep -v '^$' | wc -l" \
"apt list --upgradable 2>/dev/null | awk '/^[^[:space:]]/ && \!/Listing.../ {print}' | wc -l"
#============================================================
# Benchmark zweier Skripts ohne Umgehung des Caching
#============================================================
hyperfine --warmup 5 --runs 30 './os-system-info-motd.sh' './os-system-info-motd-v2.sh'
Benchmark 1: ./os-system-info-motd.sh
Time (mean ± σ): 692.9 ms ± 19.9 ms [User: 44.4 ms, System: 80.0 ms]
Range (min … max): 663.4 ms … 745.3 ms 30 runs
Benchmark 2: ./os-system-info-motd-v2.sh
Time (mean ± σ): 655.5 ms ± 22.0 ms [User: 39.0 ms, System: 65.7 ms]
Range (min … max): 626.3 ms … 717.5 ms 30 runs
Summary
./os-system-info-motd-v2.sh ran
1.06 ± 0.05 times faster than ./os-system-info-motd.sh
#============================================================
# Benchmark zweier Skripts mit Umgehung des Caching-Effekts
#============================================================
hyperfine --warmup 5 --runs 30 --prepare 'sync; echo 3 > /proc/sys/vm/drop_caches' './os-system-info-motd.sh' './os-system-info-motd-v2.sh'
Benchmark 1: ./os-system-info-motd.sh
Time (mean ± σ): 860.3 ms ± 22.6 ms [User: 47.1 ms, System: 89.4 ms]
Range (min … max): 822.1 ms … 936.3 ms 30 runs
Benchmark 2: ./os-system-info-motd-v2.sh
Time (mean ± σ): 834.6 ms ± 16.0 ms [User: 40.5 ms, System: 76.5 ms]
Range (min … max): 808.9 ms … 869.0 ms 30 runs
Summary
./os-system-info-motd-v2.sh ran
1.03 ± 0.03 times faster than ./os-system-info-motd.sh