Benieuwd naar de prestaties van jouw splinternieuwe ssd? Je kan natuurlijk afgaan op de technische specificaties, maar die neem je best met een korreltje zout! Het is altijd beter om zélf even te testen welke prestaties op jouw systeem mogelijk zijn. Maar hoe doe je dat nu precies?

Iedereen heeft ooit wel eens via dd wat data gekopieerd om een idee te krijgen van de prestaties van een ssd. Vaak zie je dan erg hoge snelheden, maar laat je niet misleiden. Een simpele kopie van pakweg allemaal nullen naar je schijf is niets wat je in realiteit vaak doet! Performance testing is in feite erg complex, omdat er zó veel paramaters zijn die je resultaat beïnvloeden. Het spreekt voor zich dat fabrikanten graag uitpakken met de best mogelijke cijfers, ook al zal je die in realiteit zelden zien!

Fio

Net omdat performance testing zo complex is, heb je een goede tool nodig. Je wilt immers jouw workload zo precies mogelijk simuleren om een zo betrouwbaar mogelijk resultaat te verkrijgen. Een kant-en-klare tool met weinig opties is dus per definitie ongeschikt. Je krijgt dan wel snel resultaat, maar de cijfers zeggen weinig over jouw concrete toepassingen. Dé de facto standaard voor I/O performance testing onder Linux is Flexible I/O tester, kortweg fio. Fio is in alle distributies aanwezig, al gaat het vaak om een iets oudere versie. Dat is meestal geen probleem, tenzij je erg nieuwe storage devices wilt testen. Fio is immers voortdurend in ontwikkeling: voor bepaalde nieuwe technologieën heb je dan ook de laatste versie nodig. Denk bijvoorbeeld aan zoned block devices, zoals SMR harde schijven. In onze voorbeelden gaan we gewoon aan de slag met de fio-versie van Ubuntu 18.04, namelijk 3.1.

Goed inlezen

Laten we beginnen met een waarschuwing: je moet je écht goed inlezen in fio’s mogelijkheden om het onderste uit de kan te halen! Op fio.readthedocs.io vind je laatste versie van de documentatie. Heb je fio via de package manager geïnstalleerd, dan vertrouw je beter op de versie van jouw systeem (/usr/share/doc/fio/HOWTO.gz). De webdocumentatie beschrijft in dat geval een aantal features die nog ontbreken in jouw fio-versie. Fio bevat honderden verschillende opties, dus we kunnen hier niet meer doen dan je even op weg helpen. Met fio test je zoveel block devices (zoals /dev/sdb) als filesystems (zoals /mnt/ssd). In dat eerste geval overschrijft fio het device, terwijl het in het tweede geval afblijft van data buiten het opgegeven pad (je maakt dus best een aparte directory aan voor de fio-bestanden).

Aan de slag

Voor een snelle test geef je alle opties mee op de commandline. Fio werkt op basis van zogenaamde jobs, waarbij je voor elke job de verschillende parameters specificeert. Bijvoorbeeld:

$ fio --name=write --numjobs=1 --readwrite=write --filesize=1G --nrfiles=10 --blocksize=4k

Met bovenstaande opties start fio een job genaamd “write” met één proces dat achtereenvolgens sequentieel schrijft naar tien bestanden van 1G, met een block size van 4kB. Verander je numjobs in 10 en nrfiles in 1, dan start fio tien processen op die gelijktijdig elk naar hun eigen bestand schrijven. De readwrite parameter bepaalt wat je precies wilt testen: read, write of een readwrite (een combinatie van beiden). Qua opties is dat trouwens echt nog maar het topje van de ijsberg!

Config file

Vaak wil je verschillende tests na elkaar runnen, bijvoorbeeld om te variëren in het aantal processen, bestandsgroottes of het type I/O (sequential of random). Dan is het handiger om alle opties in een tekstbestand te plaatsen. Je begint met de regel:

[global]

gevolgd door de opties die voor alle jobs gelden. Vervolgens maak je extra secties aan voor elke job, bijvoorbeeld:

[read-1G]
readwrite=read
filesize=1G

[write-16M]
readwrite=write
filesize=16M

Tot slot start je fio met dat bestand:

fio jobs.fio