Voorheen heb ik de basisprincipes van metrische gegevens over opslagsubsystemen en testen behandeld in mijn artikel Analyse van I/O-subsysteemprestaties voor SQL Server, inclusief een introductie van CrystalDiskMark 4.0. CrystalDiskMark is onlangs herschreven om Microsoft DiskSpd te gebruiken voor het testen, waardoor het een nog waardevoller hulpmiddel is voor uw initiële testinspanningen voor opslagsubsystemen. DiskSpd biedt de functionaliteit die nodig is om een breed scala aan schijfverzoekpatronen te genereren, wat zeer nuttig kan zijn bij de diagnose en analyse van I/O-prestatieproblemen met veel meer flexibiliteit dan oudere benchmarktools zoals SQLIO. Het is uitermate handig voor het testen van synthetische opslagsubsystemen als u meer controle wilt dan dat beschikbaar is in CrystalDiskMark.
Nu gaan we wat dieper in op hoe u Microsoft DiskSpd daadwerkelijk kunt gebruiken om uw opslagsubsysteem te testen zonder CrystalDiskMark 4.0 te gebruiken. Om dit te doen, moet u DiskSpd downloaden en uitpakken. Om dingen gemakkelijker te maken, kopieer ik altijd het gewenste uitvoerbare bestand diskspd.exe van de juiste uitvoerbare map (amd64fre, armfre of x86fre) naar een kort, eenvoudig pad zoals C:\DiskSpd
. In de meeste gevallen wilt u de 64-bits versie van DiskSpd uit de amd64fre-map.
Zodra u het uitvoerbare bestand diskspd.exe beschikbaar heeft, moet u een opdrachtprompt met beheerdersrechten openen (door "Als administrator uitvoeren" te kiezen) en vervolgens naar de map navigeren waar u het bestand diskspd.exe heeft gekopieerd.
Hier zijn enkele van de opdrachtregelparameters waarmee u wilt beginnen:
Parameter | Beschrijving |
-b | Blokgrootte van de I/O, gespecificeerd als (K/M/G). Bijvoorbeeld –b8K betekent een blokgrootte van 8 KB, wat relevant is voor SQL Server |
-d | Testduur in seconden. Tests van 30-60 seconden zijn meestal lang genoeg om geldige resultaten te krijgen |
-o | Uitstekende I/O's (dat wil zeggen wachtrijdiepte) per doel, per werkthread |
-t | Worker-threads per testbestandsdoel |
-h | Schakel softwarecaching uit op besturingssysteemniveau en hardware-schrijfcaching, wat een goed idee is voor het testen van SQL Server |
-r | Willekeurige of opeenvolgende vlag. Als –r wordt gebruikt, worden willekeurige tests gedaan, anders worden opeenvolgende tests gedaan |
-w | Schrijf percentage op. Bijvoorbeeld, –w25 betekent 25% schrijft, 75% leest |
-Z | Buffergrootte werkbelastingtest schrijfbron, opgegeven als (K/M/G). Wordt gebruikt om willekeurige gegevens voor schrijfbewerkingen te leveren, wat een goed idee is voor het testen van SQL Server |
-L | Leg latency-informatie vast tijdens de test, wat een heel goed idee is voor het testen van SQL Server |
-c | Maakt werklastbestand(en) van de opgegeven grootte, gespecificeerd als (K/M/G) |
Tabel 1:Basisopdrachtregelparameters voor DiskSpd
U wilt ook de locatie van het testbestand en de bestandsnaam voor de resultaten aan het einde van de regel specificeren. Hier is een voorbeeld van een opdrachtregel:
diskspd –b8K –d30 –o4 –t8 –h –r –w25 –L –Z1G –c20G T:\iotest.dat> DiskSpeedResults.txtDeze voorbeeldopdrachtregel voert een willekeurige I/O-test van 30 seconden uit met een testbestand van 20 GB op de T:-schijf, met een schrijf- en 75% leesratio van 25% en een blokgrootte van 8K. Het zal acht werkthreads gebruiken, elk met vier uitstekende I/O's en een schrijf-entropiewaarde seed van 1 GB. Het zal de resultaten van de test opslaan in een tekstbestand met de naam DiskSpeedResults.txt. Dit is een redelijk goede set parameters voor een SQL Server OLTP-workload.
Figuur 1:Voorbeeldopdrachtregel voor DiskSpd
Het uitvoeren van de test begint met een standaard opwarmtijd van vijf seconden (voordat de metingen daadwerkelijk starten), waarna de eigenlijke test gedurende de opgegeven duur in seconden wordt uitgevoerd met een standaard afkoeltijd van nul seconden. Wanneer de test is voltooid, geeft DiskSpd een beschrijving van de test en de gedetailleerde resultaten. Standaard is dit een eenvoudige tekstsamenvatting in een tekstbestand met de bestandsnaam die u hebt opgegeven, die zich in dezelfde map bevindt als het uitvoerbare bestand diskspd.
Zo zien de resultaten eruit voor deze specifieke testrun op mijn werkstation.
Figuur 2:Voorbeeld DiskSpd-testresultaten
Het eerste deel van de resultaten geeft u de exacte opdrachtregel die voor de test is gebruikt en specificeert vervolgens alle invoerparameters die zijn gebruikt voor de testrun (inclusief de standaardwaarden die mogelijk niet zijn opgegeven in de daadwerkelijke opdrachtregel ). Vervolgens worden de testresultaten weergegeven, te beginnen met de werkelijke testtijd, het aantal threads en het aantal logische processors. De CPU-sectie toont het CPU-gebruik voor elke logische processor, inclusief gebruikers- en kerneltijd, voor het testinterval.
Het interessantere deel van de testresultaten komt hierna. U krijgt het totale aantal bytes, totale I/O's, MB/seconde, I/O per seconde (IOPS) en uw gemiddelde latentie in milliseconden. Deze resultaten zijn uitgesplitst voor elke thread (vier in ons geval), met afzonderlijke secties in de resultaten voor Total IO, Read IO en Write IO. De resultaten voor elke thread zouden in de meeste gevallen zeer vergelijkbaar moeten zijn. In plaats van me in eerste instantie te concentreren op de absolute waarden voor elke meting, vergelijk ik graag de waarden wanneer ik dezelfde test op verschillende logische stations uitvoer (nadat ik de locatie van het testbestand in de opdrachtregel heb gewijzigd), zodat u de prestaties kunt vergelijken voor elke logische schijf.
Het laatste deel van de testresultaten is nog interessanter. Het toont een percentielanalyse van de distributie van de latentietestresultaten vanaf de minimumwaarde in milliseconden tot de maximumwaarde in milliseconden, uitgesplitst voor lezen, schrijven en totale latentie. De "negen" in de kolom %-ile verwijzen naar het aantal negens, waarbij 3-negen 99,9 betekent, 4-negen 99,99 enz. De reden waarom de waarden voor de hogere percentielrijen hetzelfde zijn, is omdat deze test een relatief laag aantal totale operaties. Als u de hogere percentielen nauwkeurig wilt karakteriseren, moet u een langere duurtest uitvoeren die een groter aantal afzonderlijke I/O-bewerkingen genereert.
Waar je in deze resultaten naar wilt zoeken, is het punt waar de waarden een grote sprong maken. In deze test kunnen we bijvoorbeeld zien dat 99% van de leesbewerkingen een latentie van 1.832 milliseconden of minder hadden.
Figuur 3:Distributie van latentieresultaten
Zoals u kunt zien, is het uitvoeren van DiskSpd eigenlijk vrij eenvoudig als u eenmaal begrijpt wat de basisparameters betekenen en hoe ze worden gebruikt. U kunt DiskSpd niet alleen uitvoeren vanaf een ouderwetse opdrachtregel, u kunt het ook uitvoeren met PowerShell. DiskSpd geeft u ook veel meer gedetailleerde informatie dan u van SQLIO krijgt. Het meer gecompliceerde deel van het gebruik van DiskSpd is het analyseren en interpreteren van de resultaten, iets wat ik in een toekomstig artikel zal behandelen.