DiskSPD

Das Tool DiskSPD hat nichts mit politischen Parteien zu tun, sondern ist ein weiteres Werkzeug um die Performance von Festplatten unter Windows zu testen. Exchange Administratoren kennen natürlich auch das Programm JetStress, welches die typische Last eines Exchange Servers simuliert. Aber nicht jeder will die damit verbundenen DLLs, Performance Counter und Eventlog-Einträge auf einem Testserver haben. Zudem dauert JetStress auch etwas länger um bezüglich Exchange entsprechend aussagekräftige Daten zu erhalten.

Für einfache Tests reicht es aber durchaus möglichst schnell zufällig Daten auf der Festplatte zu verteilen und dies über mehrere Threads zu machen. "Echte" Server arbeiten ja auch nicht sequentiell. DiskSPD ist wohl auch ein Ersatz für das in die Jahre gekommene SQLIO.

Achtung
Diese IOPS sind gut zum Vergleich von Storage-Systemen und verschiedenen RAID-Leveln. Die Werte sind aber in der Regel viel zu Hoch um als Grundlage für den Exchange Sizer nutzbar zu sein. Ein Exchange Storage System sollten Sie immer über JetStress belasten.

Software

Die Software DiskSPD ist Open Source und über folgende URLs zu beziehen.

Download
EXE https://aka.ms/DiskSpd
https://gallery.technet.microsoft.com/DiskSpd-a-robust-storage-6cd2f223 
Source: https://GitHub.com/microsoft/diskspd.

GUI für die Steuerung von DiskSPD
https://gallery.technet.microsoft.com/DiskSpeed-90d37d55

Das ZIP-Archiv enthält neben einen PDF und DOCX als ausführliche Beschreibung auch den ausführbaren Code in drei Versionen.

Auf einem 64bit Server ist natürlich die Version aus "AMD64FRE" zu nutzen. Denken Sie dran, dass Sie das Programm möglichst als "Administrator" aufrufen, damit die entsprechenden Systemfunktionen aufgerufen werden.

Aufruf

Damit die "Messung" überhaupt eine Aussagekraft hat, muss zumindest die entsprechende Disk oder das Subsystem "idle" sein und der ausführende Server sollte nicht gerade eine hohe CPU-Last haben. Idealerweise führen Sie das Programm auf einem frisch installierten Server aus, der noch nicht produktiv ist. Damit reduzieren Sie auch das Risiko eines Datenverlustes, besonders wenn man damit auf eine "Physical Disk" schreibt und nicht auf eine Datei.

Wer eine bereit belegte Festplatte testen will, muss dies über eine "Datei" machen. Da sich IOPS aber aus der Zugriffszeit ermitteln, reicht hier keine kleine Datei, die sich gerade mal über wenige Spuren erstreckt. Ideal ist eine Datei, die fast so groß ist wie die Festplatte. Jeder nicht genutzte Bereich und vor allem eine z.B.: 50% vom Anfang an gefüllte Disk verändert die Messung. Wenn der Lesekopf nur einen Teilbereich nutzen kann, dann wird es weniger Weg zurück legen und entsprechen mehr IOPS liefern.

# Testdatei (Capacity) 1 GB auf Laufwerk X
# Dauer (Duration) 600 Sekunden.  Mindestens 60 sollten sie immer testen
# Schreibtanteil (Write) 0, d.h. es wird hier nur gelesen
# Blockgroesse (blocksize)  4Kbyte
# Outstanding IOPS per target per Thread (o) 2 
# Hardwarecache (-h) Disable Software und Hardware Caching
# Messe Latenz statistic (-L)
# Threads per Target (-t) 8

c:\diskspd.exe -c1G -d600 -r -w0 -b4K -t8 -o2 -h -L X:diskspd.dat

# Die gleiche Messung gegen die physikalische Disk 4
c:\diskspd.exe -c1G -d600 -r -w0 -b4K -t8 -o2 -h -L #4

Hinweis: Auch wenn wir uns auf Windows bewegen, so ist bei den Parametern die Groß/Klein-Schreibung wichtig. In dem ZIP-Archiv sind entsprechende Beschreibungen ausführlich enthalten.

Wenn Sie DiskSPD ohne Parameter aufrufen, bekommen Sie eine lange Beschreibung zu sehen. Die einfachste und kürzeste Option ist einfach die Angabe eines Laufwerksbuchstabens, worauf DiskSPD folgenden "ReadOnly" Test macht.

 

Hier wird eine SD-Karte 10 Sekunden lang mit 64kByte Blöcken sequentiell bearbeitet. Das 30 GB-File wurde allerdings in den 10 Sekunden nicht angelegt. Die SD-Karte ist aber mit 273 IOPS schneller als manche 10k-Disk aber beim Datendurchsatz versagt sie natürlich. Aktiviere ich aber z.B.: 65% Schreiben, dann sehen die Werte gleich anders aus:

ACHTUNG: Ein Schreibzugriff löscht ohne weitere Rückfrage das angegebene Laufwerk !!!!

 

Durch das aktivierte "Schreiben" sackt nicht nur der Wert für IOPS ab, sondern auch die Schreibgeschwindigkeit kommt nun eher in einen "realistischen" Bereich. Das die SD-Karte aber wohl beim Schreiben etwas "länger" braucht, müssen die anderen IOs hinten anstehen. So bleiben also nicht mehr viele IOPS übrig.

Wenn Sie eine "Datei" zum Testen nutzen wollen, dann sollten Sie diese nicht nur als Pfad angeben, sondern auch die Größe mit -c spezifizieren, z.B. "-c1G",

Ohne Angabe einer Dateigröße wird keine Datei angelegt und der Test abgebrochen. Eine kleine Datei ist viel schneller angelegt als eine große Datei, aber Sie haben so natürlich keine Kontrolle über die Verteilung der Blöcke auf der Festplatte. Die Daten sind daher nicht besonders aussagekräftig. Auch im Ressourcenmonitor ist die Aktivität zu sehen:

DiskSPD selbst misst und zeigt die CPU-Last in der Auswertung mit an. Dies ist wichtig, da eine überlastete CPU nicht eine maximale Last auf einem Disk-System generieren kann. Die Anzeige hier erlaubt auch eine Kontrolle, ob und welche andere Dienste eventuell noch IOPS generieren und die Messung verfälschen.

Messwerte

Bei der Menge an Parametern stellt sich natürlich die Frage, mit welchen "Messwerten" sie auch relevante Werte bekommen. Ein Dateiserver hat natürlich andere Anforderungen als ein SQL-Server oder Exchange Server. Dennoch sollen die Werte ja vergleichbar sein. Auf http://www.altaro.com/hyper-v/storage-performance-baseline-diskspd/ wird für SQL folgendes Muster angegeben:

512B sequential write using 2 threads with 1 outstanding IO
64KB quential write using 2 threads with 1 outstanding IO
8KB random read using 2 threads with 1 outstanding IO
12128KB random read using 2 threads with 1 outstanding IO

Das geht natürlich nur mit vier parallelen Aufrufen auf der gleichen Disk. Ich haben daher mal die Werte von JetStress als Basis genommen, da die meisten Administratoren hier ja mit Exchange zu tun haben. Die Definition ist natürlich etwas "willkürlich" und kann nicht die ausgefeilte Messung von JetStress ersetzen. Aber es ist ja zumindest mal ein kleiner Schnelltest, wenn man Server mit Disks zusammen baut und einfach nur mal "Vorher/Nachher-Vergleiche nach TreiberUpdates etc. machen will oder eine grobe Richtung für die IOPS-Leistung bekommen möchte.

# -c1G    1GB Testdatei - für Disks mit Daten ist es ein kompromiss Besser ist es leere Disks komplett zu nutzen.
# -t6      6  Threads  -bei sehr vielen CPUs sollten sie mehr Threads vresuchen.
# -w65    65% Write-Anteil - Exchange schreibt mehr als dass es liest. Bei Dateiservern ist es anders
# -b64k   64k Blocksize - Exchange arbeitet mit 64k Blöcken
# -r          Random Zugriff ist für Server anzusetzen. Ergibt den niedrigeren Wert
# -o2      2  Outstanding Requests - 2 Requests pro Thread in der Queue zu halten verhindert Pausen
# -h          kein Cache - nicht dass hier eine Software oder ein RAID-Controller mit viel RAM die Werte verschiebt
# -L          Latenz Statistik anzeigen
# -d60        60 Sekunden Laufzeit sind eine erste Stichprobe.
# D:diskspd.dat  Dateiname

c:\diskspd.exe -c1G -t6 -w65 -b64K -r -o2 -h -L -d60 a:\diskspd.dat

Mit dem Parameter habe ich nun einige Disks "gemessen". Beachten Sie, dass bei ihren Messungen die Disks "idle" sind und der Host-CPU nicht durch andere Prozesse "beschränkt" sein sollte. Der Schwerpunkt der Messung ist nicht die CPU, der RAID-Controller oder der RAM, sondern möglichst nur das Storage Subsystem. RAID-Disks messen natürlich den RAID-Controller indirekt mit. Als Negativ-Beispiel für eine ungültige Messung ist die SSHD hier zu sehen. die bei der ersten Messung mehr als doppelt so schnell war. Wenn Sie nicht sicher sind, ob ein Cache dazwischen funkt, dann sollten Sie auf jeden Fall eine größere Datei und eine längere Laufzeit in Betracht ziehen und die Werte vergleichen.

Disk U/Min Anzahl RAID Total MB/Sec Total-IOPS Bemerkung

Samsung 840 EVO 1TB

SSD

Single

364 

5832

Meine primäre SSD für Windows 7

ST1750LM000 2,5" SATA

5400

Single

8,84

141

Meine zweite Festplatte im Notebook mit 1,75TB als großer "Datenspeicher"

"Platinum" Class 10 SD-Karte 

Flash

1

Single

0,13

2,1

Eine einfache SD-Karte Class 10. Extrem lahm

WD 1TB US 3.0

1

Single

8,8 

141

Einfache USB 3.0 Festplatte

Samsung 840EVO 256 GB

SSD

1

Single

220

3528

Eine Consumer SSD in einem Server von 2012 unter Windows 2012.

Kingston 480GB SSD 

SSD

1

Single

244
144
149

3912
2305
2395

Eine weite SSD im gleichen Server
Zweite Messung mit einer 100 GB Datei über 10 Minuten
Dritte Messung über 400GB und 10 Min

Hitachi HDS721075CLA332 

7200

1

Single 

13,5 

210

Eine Single SATA Disk in einem Hyper-V-Server

ST3750528AS 

7200 

1

Single

11

165

Eine Single SATA Disk in einem Hyper-V-Server 

Transcend MTS400 TS256GMTS400 

SSD

1

Single

235 

3774

M.2-SSD in einem Thinkpad Yoga 

ST500LM000-SSHD 8GB 

SSHD

1

Single

38 
16

618
269

SATA-SSHD mit 8 GB Flash in einem Thinkpad Yoga. Hier dürfte der SSHD-Cache die Werte zu hoch halten, da in 60 Sek nur 2,4 GB geschrieben wurden. Der zweite Durchlauf ist dann auch schon langsamer. (http://www.seagate.com/de/de/solutions/solid-state-hybrid/)

 

 

 

 

 

 

 

Hier fehlen noch einige Messwerte, speziell von potenteren Servern

Achtung
Beachten Sie bitte, dass die meiste dieser Messungen einfach nur "Single Disks" sind und wenn sie nur mit einer 1GB Datei arbeiten, dann sind die Werte sicher zu hoch, da der Test nur einen Teilbereich der Festplatte überstreicht. Aussagekräftig sind solche Daten erst bei einem Test über eine gesamte "leere" Disk im "Idle"-Zustand.
Der Test mit einer kleinen Datei auf einem "aktiven" Dateisystem kann aber dennoch einen ersten Eindruck speziell bei schon aktiven Servern liefern. Es ist aber eher Autofahren auf einer belebten Autobahn und weniger ein Höchstgeschwindigkeitstest auf einer leeren Piste.

Vergessen sie nicht danach die Testdatei "diskspd.dat" zu löschen, speziell wenn Sie etwas "Größer" war.

Weitere Links