Een benchmark-test uitvoeren op een schijf

Van toepassing op: ✔️ Linux-VM's ✔️ Windows-VM's ✔️ Flexibele schaalsets ✔️ Uniforme 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 Ontwerpen voor hoge prestaties, hebt u de prestatievereisten van de toepassing verzameld. Door benchmarkhulpprogramma's uit te voeren op de VM's die als host fungeren voor de toepassing, 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 gemeenschappelijke benchmarkhulpprogramma's DiskSpd en FIO gebruikt, voor respectievelijk Windows en Linux. Deze hulpprogramma's produceren meerdere threads die een productie zoals workload simuleren en de systeemprestaties meten. Met behulp van de hulpprogramma's kunt u ook parameters zoals blokgrootte en wachtrijdiepte configureren, die u normaal gesproken niet kunt wijzigen voor een toepassing. Dit biedt u meer flexibiliteit om de maximale prestaties te verbeteren op een grootschalige VM die is ingericht met Premium-SSD's voor verschillende typen toepassingsworkloads. Ga voor meer informatie over elk benchmarkhulpprogramma naar DiskSpd en FIO.

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 er drie met hostcaching als 'Geen' en streept 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 over het maken van een Standard_D8ds_v4 met Premium SSD's.

De cache opwarmen

De schijf met ReadOnly-hostcaching kan een hogere IOPS geven dan de schijflimiet. Als u deze maximale leesprestaties uit de hostcache wilt halen, moet u eerst de cache van deze schijf opwarmen. Dit zorgt ervoor dat de Lees-IO's die door het benchmarking-hulpprogramma worden aangedreven op het CacheReads-volume, daadwerkelijk de cache raakt en niet rechtstreeks op de schijf. De cachetreffers resulteren in meer IOPS van de schijf met één cache.

Belangrijk

U moet de cache opwarmen voordat u benchmarks uitvoert telkens wanneer de VM opnieuw wordt opgestart.

DISKSPD

Download het hulpprogramma DISKSP op de VM. DISKSPD is een hulpprogramma dat u kunt aanpassen om uw eigen synthetische workloads te maken. We gebruiken dezelfde installatie die hierboven is 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: maakt (of maakt opnieuw) het voorbeeldbestand dat in de test wordt gebruikt. Deze kan worden ingesteld in bytes, KiB, MiB, GiB of blokken. In dit geval wordt een groot bestand van 200 GiB-doelbestand gebruikt om geheugencaching te minimaliseren.
  • -w100: hiermee geeft u het percentage bewerkingen op dat schrijfaanvragen zijn (-w0 is gelijk aan 100% lezen).
  • -b4K: geeft de blokgrootte aan in bytes, KiB, MiB of GiB. In dit geval wordt 4K-blokgrootte 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 belasten.
  • -W7200: Hiermee geeft u de duur van de opwarmtijd voordat de metingen beginnen.
  • -d30: hiermee geeft u de duur van de test op, exclusief opwarmen.
  • -Sh: software- en hardware-schrijfcache uitschakelen (gelijk aan -Suw).

Zie de GitHub-opslagplaats voor een volledige lijst met parameters.

Maximale schrijf-IOPS

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

Voer de volgende opdracht uit gedurende 30 seconden opwarmen en 30 seconden meten:

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

De resultaten tonen aan dat de Standard_D8ds_v4 VM de maximale IOPS-limiet voor schrijven van 12.800 biedt.

Voor 3208642560 totale bytes, maximum aantal I/O's van 391680, met een totaal van 101,97 MiB/s en een totaal van 13052,65 I/O per seconde.

Maximum aantal lees-IOPS

We gebruiken een hoge wachtrijdiepte van 128, een kleine blokgrootte van vier kB en vier werkthreads voor het aansturen van leesbewerkingen. De leeswerknemers sturen verkeer aan op het volume 'CacheReads', waarvoor één schijf is ingesteld op 'ReadOnly'.

Voer de volgende opdracht uit voor twee uur opwarmen en 30 seconden meten:

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

De resultaten laten zien dat de Standard_D8ds_v4 VM de maximale IOPS-limiet voor lezen heeft van 77.000.

Voor 9652785152 totale bytes waren er 2356637 totale I/O's, met in totaal 306,72 MiB/s en een totaal van 78521,23 I/O's per seconde.

Maximale doorvoer

Als u de maximale lees- en schrijfdoorvoer wilt, kunt u overschakelen naar een groter blok van 64 kB.

FIO

FIO is een populair hulpprogramma voor het benchmarken van opslag op de Linux-VM's. Het biedt de flexibiliteit om verschillende IO-grootten, opeenvolgende of willekeurige lees- en schrijfbewerkingen te selecteren. Hiermee worden werkthreads of -processen voortgeschreven om de opgegeven I/O-bewerkingen uit te voeren. U kunt het type I/O-bewerkingen opgeven dat elke werkrolthread moet uitvoeren met behulp van taakbestanden. We hebben één taakbestand per scenario gemaakt, zoals 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 ubuntu wordt uitgevoerd. Gebruik dezelfde installatie als 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 het op uw virtuele machine.

Voer de volgende opdracht uit voor Ubuntu,

apt-get install fio

We gebruiken vier werkthreads voor het aansturen van schrijfbewerkingen en vier werkthreads voor het aansturen van leesbewerkingen op de schijven. De schrijfwerkers sturen verkeer aan op het volume 'nocache', dat drie schijven heeft waarvoor de cache is ingesteld op 'Geen'. De leeswerknemers sturen verkeer op het volume 'readcache', waarvoor één schijf is ingesteld op 'ReadOnly'.

Maximale schrijf-IOPS

Maak het taakbestand met de volgende specificaties om maximale schrijf-IOPS te verkrijgen. 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 zaken die in overeenstemming zijn met de ontwerprichtlijnen die in de vorige secties zijn besproken. Deze specificaties zijn essentieel voor het stimuleren van een maximum aantal 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

Terwijl de test wordt uitgevoerd, kunt u het aantal schrijf-IOPS zien dat de VM en Premium-schijven leveren. Zoals in het onderstaande voorbeeld wordt weergegeven, biedt de Standard_D8ds_v4 VM de maximale IOPS-limiet voor schrijfbewerkingen van 12.800 IOPS.
Het aantal schrijf-IOPS-VM's en Premium SSD's dat wordt geleverd, geeft aan dat schrijfbewerkingen 13,1k IOPS zijn.

Maximum aantal 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 zaken die in overeenstemming zijn met de ontwerprichtlijnen die in de vorige secties zijn besproken. Deze specificaties zijn essentieel voor het stimuleren van een maximum aantal 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

Terwijl de test wordt uitgevoerd, kunt u het aantal lees-IOPS zien dat de VM en Premium-schijven leveren. Zoals in het onderstaande voorbeeld wordt weergegeven, levert de Standard_D8ds_v4 VM meer dan 77.000 lees-IOPS. Dit is een combinatie van de schijf en de cacheprestaties.
Schermopname van het aantal schrijf-IOPS-VM's en Premium-SSD's die worden geleverd, laat zien dat leesbewerkingen 78,6k zijn.

Maximale IOPS voor lezen en schrijven

Maak het taakbestand met de volgende specificaties om een maximale gecombineerde IOPS voor lezen en schrijven te krijgen. 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 zaken die in overeenstemming zijn met de ontwerprichtlijnen die in de vorige secties zijn besproken. Deze specificaties zijn essentieel voor het stimuleren van een maximum aantal 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

Terwijl de test wordt uitgevoerd, kunt u het aantal gecombineerde IOPS voor lezen en schrijven zien dat de VM en Premium-schijven leveren. Zoals in het onderstaande voorbeeld wordt weergegeven, 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.
Gecombineerde IOPS voor lezen en schrijven, laat zien dat leesbewerkingen 78,3k zijn en schrijfbewerkingen 12,6k IOPS.

Maximale gecombineerde doorvoer

Als u de maximale gecombineerde lees- en schrijfdoorvoer wilt krijgen, 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 een 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 benchmarkhulpprogramma's kunt u de workloads simuleren en de prestaties van de prototypetoepassing meten. Hierdoor kunt u bepalen welke schijfaanbiedingen overeenkomen met of beter zijn dan de prestatievereisten van uw toepassing. Vervolgens kunt u dezelfde richtlijnen implementeren voor uw productietoepassing.