Een benchmark-test uitvoeren op een schijf

Van toepassing op: ✔️ Linux-VM's ✔️ Windows ✔️ Flexibele schaalsets Uniform schaalsets ✔️

Benchmarking is het proces van het simuleren van verschillende workloads in uw toepassing en het meten van de prestaties van de toepassing voor elke workload. Met behulp van de stappen die worden beschreven in het artikel over hoge prestaties, hebt u de prestatievereisten voor de toepassing verzameld. Door benchmarkinghulpprogramma's uit te voeren op de VM's die de toepassing hosten, kunt u bepalen welke prestatieniveaus uw toepassing kan bereiken met premium SSD's. In dit artikel vindt u voorbeelden van het benchmarken van een Standard_D8ds_v4 VM die is ingericht met Azure Premium SSD's.

We hebben algemene benchmarkhulpprogramma's DiskSpd en FIO gebruikt voor respectievelijk Windows en Linux. Met deze hulpprogramma's worden meerdere threads uitgevoerd die een productie als workload simuleren en de systeemprestaties meten. Met behulp van de hulpprogramma's kunt u ook parameters configureren, zoals blokgrootte en wachtrijdiepte, die u normaal gesproken niet kunt wijzigen voor een toepassing. Dit biedt meer flexibiliteit om de maximale prestaties te stimuleren op een grootschalige VM die is ingericht met premium SSD's voor verschillende typen toepassingsworkloads. Ga naar DiskSpd en FIO voor meer informatie over elk benchmarkprogramma.

Als u de onderstaande voorbeelden wilt volgen, maakt u een Standard_D8ds_v4 en koppelt u vier premium SSD's aan de VIRTUELE machine. Van de vier schijven configureert u drie met hostcaching als 'Geen' en stript u ze in een volume met de naam NoCacheWrites. Configureer hostcaching als ReadOnly op de resterende schijf en maak een volume met de naam CacheReads met deze schijf. Met deze installatie kunt u de maximale lees- en schrijfprestaties van een Standard_D8ds_v4 VM zien. Zie Ontwerpen voor hoge prestaties voor gedetailleerde stappen voor het maken van een Standard_D8ds_v4 met premium SSD's.

De cache opwarmen

De schijf met ReadOnly-hostcaching kan hogere IOPS geven dan de schijflimiet. Als u deze maximale leesprestaties van de hostcache wilt ophalen, moet u eerst de cache van deze schijf opwarmen. Dit zorgt ervoor dat de lees-IOS die door het benchmarkprogramma worden aangeslagen op cachereads-volume, daadwerkelijk de cache raakt en niet rechtstreeks op de schijf. De cache bereikt meer IOPS vanaf de schijf waarvoor één cache is ingeschakeld.

Belangrijk

U moet de cache opwarmen voordat er benchmarks worden uitgevoerd telkens wanneer de VM opnieuw wordt opgestart.

DISKSPD

Download het hulpprogramma DISKSP op de VIRTUELE machine. DISKSPD is een hulpprogramma dat u kunt aanpassen om uw eigen synthetische workloads te maken. We gebruiken dezelfde installatie die hierboven wordt beschreven om benchmarkingtests uit te voeren. U kunt de specificaties wijzigen om verschillende workloads te testen.

In dit voorbeeld gebruiken we de volgende set basislijnparameters:

  • -c200G: hiermee maakt u het voorbeeldbestand dat in de test wordt gebruikt (of maakt u het opnieuw). Het kan worden ingesteld in bytes, KiB, MiB, GiB of blokken. In dit geval wordt een groot bestand van 200-GiB-doelbestand gebruikt om geheugencache te minimaliseren.
  • -w100: Hiermee geeft u het percentage bewerkingen op dat schrijfaanvragen zijn (-w0 is gelijk aan 100% lezen).
  • -b4K: Geeft de blokgrootte in bytes, KiB, MiB of GiB aan. In dit geval wordt de blokgrootte 4K gebruikt om een willekeurige I/O-test te simuleren.
  • -F4: Hiermee stelt u in totaal vier threads in.
  • -r: Geeft de willekeurige I/O-test aan (overschrijft de parameter -s).
  • -o128: Geeft het aantal openstaande I/O-aanvragen per doel per thread aan. Dit wordt ook wel de wachtrijdiepte genoemd. In dit geval wordt 128 gebruikt om de CPU te benadrukken.
  • -W7200: Hiermee geeft u de duur van de opwarmtijd op voordat de metingen beginnen.
  • -d30: Hiermee geeft u de duur van de test op, niet inclusief opwarmen.
  • -Sh: Software- en hardware-schrijfcache uitschakelen (equivalent aan -Suw).

Zie de GitHub opslagplaats voor een volledige lijst met parameters.

Maximum aantal schrijf-IOPS

We gebruiken een hoge wachtrijdiepte van 128, een kleine blokgrootte van 8 kB en vier werkthreads voor het stimuleren van schrijfbewerkingen. De schrijfwerkers rijden verkeer op het volume NoCacheWrites, met drie schijven met cache ingesteld op 'Geen'.

Voer de volgende opdracht uit voor 30 seconden warm-up en 30 seconden meting:

diskspd -c200G -w100 -b8K -F4 -r -o128 -W30 -d30 -Sh testfile.dat

Resultaten laten zien dat de Standard_D8ds_v4 VM de maximale IOPS-limiet voor schrijfbewerkingen van 12.800 levert.

For 3208642560 total bytes, max total I/Os of 391680, with a total of 101.97 MiB/s, and a total of 13052.65 I/O per second.

Maximale lees-IOPS

We gebruiken een hoge wachtrijdiepte van 128, een kleine blokgrootte van vier kB en vier werkthreads voor het stimuleren van leesbewerkingen. De leeswerkers rijden verkeer op het volume 'CacheReads', dat één schijf met cache heeft ingesteld op 'ReadOnly'.

Voer de volgende opdracht uit voor twee uur warm-up en 30 seconden meting:

diskspd -c200G -b4K -F4 -r -o128 -W7200 -d30 -Sh testfile.dat

Resultaten laten zien dat de Standard_D8ds_v4 VM de maximale IOPS-limiet voor lezen van 77.000 levert.

For 9652785152 total bytes, there were 2356637 total I/Os, at 306.72 total MiB/s, and a total of 78521.23 I/Os per second.

Maximale doorvoer

Als u de maximale lees- en schrijfdoorvoer wilt ophalen, kunt u overschakelen naar een grotere blokgrootte van 64 kB.

FIO

FIO is een populair hulpprogramma om opslag te benchmarken op de Linux-VM's. Het heeft de flexibiliteit om verschillende IO-grootten, opeenvolgende of willekeurige lees- en schrijfbewerkingen te selecteren. Hiermee worden werkthreads of processen voor het uitvoeren van de opgegeven I/O-bewerkingen uitgevoerd. U kunt opgeven welk type I/O-bewerkingen elke werkrolthread moet uitvoeren met behulp van taakbestanden. We hebben één taakbestand per scenario gemaakt, geïllustreerd in de onderstaande voorbeelden. U kunt de specificaties in deze taakbestanden wijzigen om verschillende workloads te benchmarken die worden uitgevoerd op Premium Storage. In de voorbeelden gebruiken we een Standard_D8ds_v4 waarop Ubuntu wordt uitgevoerd. Gebruik dezelfde installatie die wordt beschreven in het begin van de benchmarksectie en warm de cache op voordat u de benchmarktests uitvoert.

Voordat u begint, downloadt u FIO en installeert u deze op uw virtuele machine.

Voer de volgende opdracht uit voor Ubuntu,

apt-get install fio

We gebruiken vier werkthreads voor het stimuleren van schrijfbewerkingen en vier werkthreads voor het besturen van leesbewerkingen op de schijven. De schrijfwerkers rijden verkeer op het 'nocache'-volume, dat drie schijven met cache heeft ingesteld op 'Geen'. De leeswerkers rijden verkeer op het volume readcache, met één schijf met cache ingesteld op 'ReadOnly'.

Maximum aantal schrijf-IOPS

Maak het taakbestand met de volgende specificaties om maximale schrijf-IOPS op te halen. Geef het de naam 'fiowrite.ini'.

[global]
size=30g
direct=1
iodepth=256
ioengine=libaio
bs=4k
numjobs=4

[writer1]
rw=randwrite
directory=/mnt/nocache

Let op de volgende belangrijke dingen die in overeenstemming zijn met de ontwerprichtlijnen die in de vorige secties zijn besproken. Deze specificaties zijn essentieel voor het rijden van maximale IOPS,

  • Een hoge wachtrijdiepte van 256.
  • Een kleine blokgrootte van 4 kB.
  • Meerdere threads die willekeurige schrijfbewerkingen uitvoeren.

Voer de volgende opdracht uit om de FIO-test gedurende 30 seconden te starten,

sudo fio --runtime 30 fiowrite.ini

Tijdens de testuitvoeringen kunt u zien hoeveel schrijf-IOPS de VM en Premium schijven leveren. Zoals wordt weergegeven in het onderstaande voorbeeld, levert de Standard_D8ds_v4 VM de maximale IOPS-limiet voor schrijven van 12.800 IOPS.
Number of write IOPS VM and premium SSDs are delivering, shows that writes are 13.1k IOPS.

Maximale lees-IOPS

Maak het taakbestand met de volgende specificaties om maximale Lees-IOPS te verkrijgen. Geef het de naam 'fioread.ini'.

[global]
size=30g
direct=1
iodepth=256
ioengine=libaio
bs=4k
numjobs=4

[reader1]
rw=randread
directory=/mnt/readcache

Let op de volgende belangrijke dingen die in overeenstemming zijn met de ontwerprichtlijnen die in de vorige secties zijn besproken. Deze specificaties zijn essentieel voor het rijden van maximale IOPS,

  • Een hoge wachtrijdiepte van 256.
  • Een kleine blokgrootte van 4 kB.
  • Meerdere threads die willekeurige schrijfbewerkingen uitvoeren.

Voer de volgende opdracht uit om de FIO-test gedurende 30 seconden te starten,

sudo fio --runtime 30 fioread.ini

Tijdens de testuitvoering ziet u het aantal lees-IOPS dat de VM en Premium schijven leveren. Zoals wordt weergegeven in het onderstaande voorbeeld, levert de Standard_D8ds_v4 VM meer dan 77.000 Lees-IOPS. Dit is een combinatie van de schijf en de cacheprestaties.
Screenshot of the number of write IOPS VM and premium SSDs are delivering, shows that reads are 78.6k.

Maximale IOPS voor lezen en schrijven

Maak het taakbestand met de volgende specificaties om maximaal gecombineerde IOPS voor lezen en schrijven op te halen. Geef het de naam 'fioreadwrite.ini'.

[global]
size=30g
direct=1
iodepth=128
ioengine=libaio
bs=4k
numjobs=4

[reader1]
rw=randread
directory=/mnt/readcache

[writer1]
rw=randwrite
directory=/mnt/nocache
rate_iops=3200

Let op de volgende belangrijke dingen die in overeenstemming zijn met de ontwerprichtlijnen die in de vorige secties zijn besproken. Deze specificaties zijn essentieel voor het rijden van maximale IOPS,

  • Een hoge wachtrijdiepte van 128.
  • Een kleine blokgrootte van 4 kB.
  • Meerdere threads die willekeurige lees- en schrijfbewerkingen uitvoeren.

Voer de volgende opdracht uit om de FIO-test gedurende 30 seconden te starten,

sudo fio --runtime 30 fioreadwrite.ini

Tijdens de testuitvoeringen kunt u zien hoeveel gecombineerde IOPS voor lezen en schrijven de VM en Premium schijven leveren. Zoals wordt weergegeven in het onderstaande voorbeeld, levert de Standard_D8ds_v4 VM meer dan 90.000 gecombineerde IOPS voor lezen en schrijven. Dit is een combinatie van de schijf en de cacheprestaties.
Combined read and write IOPS, shows that reads are 78.3k and writes are 12.6k IOPS.

Maximale gecombineerde doorvoer

Als u de maximale gecombineerde lees- en schrijfdoorvoer wilt ophalen, gebruikt u een grotere blokgrootte en een grote wachtrijdiepte met meerdere threads die lees- en schrijfbewerkingen uitvoeren. U kunt een blokgrootte van 64 kB en wachtrijdiepte van 128 gebruiken.

Volgende stappen

Ga verder met ons artikel over ontwerpen voor hoge prestaties.

In dat artikel maakt u een controlelijst die vergelijkbaar is met uw bestaande toepassing voor het prototype. Met behulp van Benchmarking-hulpprogramma's kunt u de workloads simuleren en de prestaties van de prototypetoepassing meten. Hiermee kunt u bepalen welke schijfaanbiedingen overeenkomen met of voldoen aan de prestatievereisten van uw toepassing. Vervolgens kunt u dezelfde richtlijnen implementeren voor uw productietoepassing.