I/O Benchmarking: Performance Optimization (Artikel 396)
Beherrschung des I/O-Benchmarkings unter Linux. Erfahren Sie alles über den Einsatz von fio zur Last-Simulation, die Messung von Latenz und Durchsatz sowie die Optimierung von Storage-Backends.
# I/O Benchmarking Mastery: Fakten statt Gefühle
TL;DR / Management Summary Ein Senior Admin verlässt sich bei Storage-Problemen nicht auf subjektive Eindrücke. Er nutzt
fio(Flexible I/O Tester), um die Hardware an ihre Grenzen zu bringen. Wir lernen, wie wir realistische Last-Szenarien (Random Read/Write) simulieren, den Unterschied zwischen IOPS (Transaktionen) und Durchsatz (MB/s) bewerten und wie wir die Latenz im 99. Perzentil messen. Das Ziel: Die Performance des Storage-Backends objektiv zu validieren, bevor die Applikation live geht.
# 1. Einführung & Architektur
Metriken der Performance.
- Durchsatz (Throughput): Wie viele Megabytes pro Sekunde (MB/s) können übertragen werden? (Wichtig für Backups/Streaming).
- IOPS (Input/Output Operations per Second): Wie viele kleine Operationen pro Sekunde sind möglich? (Wichtig für Datenbanken).
- Latenz (Latency): Wie lange dauert ein einzelner Zugriff? (Wichtig für die Reaktivität).
# Der Benchmark-Flow (Mermaid)
graph TD
A[Benchmark Design: Random vs Sequential] --> B[Tool: fio]
B --> C[Warm-up Phase]
B --> D[Execution Phase]
D --> E{Result Analysis}
E --> F[Average Latency]
E --> G[99th Percentile: Tail Latency]
E --> H[Bandwidth: MiB/s]
F/G/H --> I[Optimization: Tuning BIOS / Kernel / FS]
# 2. fio: Der Goldstandard
Professionelle Simulation.
Vergessen Sie dd für Benchmarks (es misst meist nur den Cache). Nutzen Sie fio.
# Beispiel: Random Read (Datenbank-Szenario)
sudo fio --name=randread --ioengine=libaio --direct=1 --bs=4k \
--iodepth=64 --size=1G --readwrite=randread --runtime=60 \
--filename=/dev/sdX --group_reporting
--direct=1: Umgeht den Page Cache (Artikel 385).--bs=4k: Blockgröße (4K ist Standard für DB-Blöcke).--iodepth=64: Parallelität (Async I/O).
# 3. Latenzmessung mit ioping
Der Ping für die Disk.
Für einen schnellen Check der Antwortzeit:
sudo ioping -c 10 /mnt/data
# Zeigt Latenz in Mikrosekunden (us).
# 4. Day-2 Operations: Tail Latency
Die Ausreißer finden.
Ein System fühlt sich langsam an, wenn einzelne I/O-Vorgänge sehr lange dauern, auch wenn der Durchschnitt okay ist.
- Schauen Sie in den
fioErgebnissen auf die Percentile Latencies (99.00th, 99.99th). - Wenn das 99. Perzentil bei > 100ms liegt, haben Sie sporadische Hänger, die User merken werden.
# 5. Troubleshooting & “War Stories”
Wenn die Zahlen lügen.
# Story 1: “Der Cache-Trugschluss”
Symptom: Ein Admin testet seine neue HDD mit dd if=/dev/zero of=testfile bs=1G count=1 und meldet begeistert 10GB/s Schreibgeschwindigkeit.
Ursache: Er hat nur die Schreibgeschwindigkeit in den RAM (Page Cache) gemessen. Die Daten sind noch gar nicht auf der Platte.
Lösung: Nutzen Sie immer fio mit --direct=1 oder erzwingen Sie einen Flush am Ende mit fdatasync=1.
# Story 2: “Das volle NVMe-Write-Loch”
Symptom: Eine fabrikneue NVMe liefert im Benchmark 5GB/s, aber nach 10 Minuten sinkt die Rate auf 600MB/s. Ursache: Der SLC-Cache der SSD ist voll. Der Controller muss nun direkt in die langsamen TLC/QLC-Zellen schreiben. Lösung: Führen Sie Benchmarks über längere Zeiträume (z.B. 1 Stunde) aus, um die echte Dauerleistung der Hardware zu ermitteln.
# 6. Fazit & Empfehlung
- Pflicht: Führen Sie Benchmarks auf dem rohen Block-Device aus, bevor Sie ein Dateisystem erstellen, um Hardware-Fehler auszuschließen.
- Wahl: Nutzen Sie 4K Blöcke für IOPS-Tests und 1MB Blöcke für Durchsatz-Tests.
- Wartung: Dokumentieren Sie die Benchmark-Ergebnisse bei der Inbetriebnahme eines Servers. Sie dienen als Referenz bei späteren Performance-Problemen.
# Anhang: Cheatsheet
| Metrik | Zielwert (Enterprise SSD) | Zielwert (NVMe) |
|---|---|---|
| Latency (avg) | < 1 ms | < 100 us |
| 99th Percentile | < 5 ms | < 500 us |
| Random Read 4K | > 50.000 IOPS | > 500.000 IOPS |
| Seq. Write | > 500 MB/s | > 2.000 MB/s |
| Tool | Installation | |
fio |
pacman -S fio / apk add fio |
|
ioping |
pacman -S ioping / apk add ioping |
|
fio-visualizer |
Zur Auswertung von JSON-Logs |