Hoe u schijfprestatiegegevens (IOPS en latentie) in Linux kunt monitoren

Het kan behoorlijk lastig zijn om te achterhalen hoe je schijf of opslagarray presteert op Linux, vooral als je een duidelijk beeld wilt krijgen voordat je zware workloads gaat draaien. Soms lijkt je setup prima, totdat je benchmarks uitvoert en beseft hoe slecht de IOPS of latentie eigenlijk zijn. Dit artikel biedt praktische manieren om die prestaties te meten, zodat je weet wat je opslag echt aankan. Of het nu gaat om te bepalen of je SSD’s daadwerkelijk presteren zoals beloofd, of om te controleren of je RAID-configuratie afgesteld moet worden, deze methoden kunnen je veel giswerk besparen. En ja, de commandoregels lijken in het begin misschien wat intimiderend, maar als je ze eenmaal onder de knie hebt, is het vrij eenvoudig om degelijke benchmarks uit te voeren en resultaten te zien die, in positieve of negatieve zin, daadwerkelijk weergeven wat er onder de motorkap gebeurt.

Hoe meet je de opslagprestaties en latentie op Linux?

Het gebruik van FIO (Flexible I/O) voor schijfbenchmarks

Allereerst is FIO de aangewezen tool voor het testen van schijf-IOPS, omdat het de werkelijke werkbelastingen goed kan nabootsen. Het is beschikbaar op de meeste Linux-distributies, maar soms moet je het handmatig installeren. Op RHEL of CentOS moet je mogelijk eerst de EPEL-repository inschakelen ( yum install epel-release -y ) voordat je fio installeert. Op Debian/Ubuntu doe je gewoon apt-get install fio. Zodra het is geïnstalleerd, kies je de schijf of partitie die je wilt testen. Meestal koppel je je schijf of LUN ergens en voer je de fio-opdrachten in die map uit.

Waarom het helpt: Het simuleert lees- en schrijfbewerkingen met specifieke blokgroottes, threaddieptes en combinaties, waardoor je een goed beeld krijgt van wat de opslag aankan. Wanneer je een typische opdracht uitvoert zoals:

# fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=fiotest --filename=testfio --bs=4k --iodepth=64 --size=8G --readwrite=randrw --rwmixread=75

Je vraagt ​​fio in feite om willekeurige lees-/schrijftests uit te voeren met blokken van 4 KB, een wachtrijdiepte van 64 en een bestand van 8 GB. Verwacht resultaten zoals:

  • Leessnelheid: 3280 MiB/s, IOPS circa 83.000
  • Schrijfsnelheid: 110 MiB/s, IOPS bijna 28.000

Dat soort output is enorm nuttig. Op SSD’s liggen de cijfers veel hoger dan op traditionele harde schijven, maar zelfs op SATA-schijven krijg je een redelijke basislijn. Soms voer je dezelfde test alleen met leesbewerkingen ( —readwrite=randread) of alleen met schrijfbewerkingen ( randwrite) uit om te zien waar de schijven in uitblinken. Houd er wel rekening mee dat als je dit op een gemount bestandssysteem doet, cache-effecten of andere systeemactiviteit niet worden meegenomen, waardoor de resultaten per run enigszins kunnen variëren. Het is het beste om de test een paar keer uit te voeren en het gemiddelde te nemen.

Testen met FIO-configuratiebestanden

Omdat het typen van lange commando’s tijdens het uitvoeren van tests lastig kan zijn, helpt het maken van een configuratiebestand bij het automatiseren en herhalen van tests. Maak gewoon een bestand aan, bijvoorbeeld read.fio, in je map en voeg inhoud toe zoals deze:

[global] rw=randread size=8G filename=/path/to/your/mount/point/testfio ioengine=libaio iodepth=4 invalidate=1 direct=1 [bgread] rw=randread iodepth=64

Vervang /path/to/your/mount/point door de daadwerkelijke map waarin je je mountpoint hebt geplaatst. Voer vervolgens fio read.fio uit om de leessnelheid te testen. Hetzelfde principe geldt voor schrijftests, pas alleen rw=randwritede globale sectie aan. Het is een handige manier om herhaalbare benchmarks uit te voeren zonder telkens alle opties opnieuw te hoeven typen.

Het meten van schijflatentie met Ioping

IOPS zijn geweldig, maar soms is het nog belangrijker om te weten hoe lang elke aanvraag duurt. Dat is waar ioping van pas komt. Je denkt misschien dat je schijf snel is, maar krijgt toch trage reacties onder belasting – en dat heeft vaak meer te maken met latentie dan met doorvoer. Installeer het via yum of apt-get. Op RHEL/CentOS:

# yum install ioping -y

En voor Debian/Ubuntu:

# apt-get install ioping

Voer een snelle test uit op uw schijf:

# ioping -c 20 /tmp/

De uitvoer toont de aanvraagtijden in microseconden ( µs ) of milliseconden ( ms ).Hoe lager, hoe beter — idealiter minder dan 1 ms voor een goede SSD. Een typisch voorbeeld ziet er als volgt uit:

4 KiB <<< /tmp/ (ext4 /dev/sda1): request=1 time=1.55 ms...19 requests completed in 5.67 ms, 76 KiB read, 3.35 k iops, 13.1 MiB/s generated 20 requests in 19.0 s, 80 KiB, 1 iops, 4.21 KiB/s min/avg/max/mdev = 176.3 us / 298.7 us / 368.9 us / 45.7 us

Het belangrijkste cijfer is de gemiddelde latentie — in dit geval ongeveer 0, 3 ms, wat uitstekend is voor back-end opslag. Houd er rekening mee dat je microseconden kunt omrekenen naar milliseconden als je snel een idee wilt krijgen van de vertraging.

Dit soort tests is niet perfect — de prestaties van schijven kunnen variëren afhankelijk van hoe druk ze zijn, welke andere processen er draaien, enzovoort. Maar een snelle controle vooraf kan veel zeggen over de vraag of uw configuratie klaar is voor productie of dat er nog wat afstelling nodig is.

Ja, Linux biedt tools die in eerste instantie misschien wat onduidelijk lijken, maar met wat geduld onthullen ze veel over de werkelijke prestaties van je opslag. Wees er wel op voorbereid dat de resultaten wat kunnen fluctueren, of dat sommige commando’s moeten worden aangepast afhankelijk van je configuratie – want Linux maakt het soms nu eenmaal ingewikkeld.