Basiswissen Flash Storage

So beheben Sie Performance-Probleme bei Flash-Storage

05.08.2016
Von Tobias  Engmann

Performance-Probleme innerhalb eines Storage-Arrays

Die CPU läuft einwandfrei innerhalb des Array-Controllers. Darüber hinaus sind die Prozessorkerne der Storage-Array-CPU multiplen Tasks zugeordnet. Trotzdem kommt es zu Leistungseinbußen. Das könnten die Ursachen sein:

Protocol-IO-Task: Üblicherweise benötigt jeder gelesene und geschriebene Block bei IO-Operationen in kleinen Blöcken (4k, 8k) Prozessorzyklen auf Protokollebene.

Wenn die zugewiesenen Prozessorkerne mit hundert Prozent ihrer Kapazität laufen, kann das Array nicht rasch mehr Eingabe-/Ausgabe-Operationen aufnehmen. Daraus ergibt sich eine Erhöhung der Latenz und somit eine geringere Performance bei Schreib-/Lese-Operationen. Dies bedeutet, dass mehr Prozessorleistung erforderlich ist und dass die Array-Controller oberhalb ihrer Kapazitätsgrenze arbeiten, um eine Latenz im Sub-Millisekunden-Bereich zu bieten.

Berechnung von Deduplikation und Kompression: Dieser Bereich ist normalerweise unkritisch da die meisten Arrays auch dann zuverlässig arbeiten. Es gibt aber Arrays die bei hoher Last in einen Post Prozess Modus verfallen und damit an Effizienz verlieren. Die Größe des Datasets kann reduziert werden um die Anzahl benötigter Arbeitsschritte beim Schreibvorgang auf den Flash-Speicher zu reduzieren.

Segment Cleaning/GC: Segment Cleaning (SC) dient dazu, mit ungenutzten Daten belegte Blöcke in Segmente zu unterteilen und zu ermitteln, welche Segmente gesäubert und dem freien Pool zurückgeführt werden müssen. Diese Datenbereinigung wirkt sich positiv auf die Schreibgeschwindigkeit und die Prozessorauslastung des Controllers aus. Der Prozess selbst sollte auf SSD-Ebene stattfinden, denn dann wird die Last für den Arraycontroller verringert.

Eingeschränkter RAID-Betrieb: Bei SSD-Fehlern im Array könnte es zu Leistungseinbußen kommen solange die betroffene SSD nicht ausgetauscht und die Wiederherstellung abgeschlossen wurde. Während im Gegensatz zur Festplatte mechanische Fehler nahezu ausgeschlossen sind, ist wie oben erwähnt die Art der SSDs (Consumer- oder eben Enterprise SSD) und deren Nutzung maßgeblich für die Lebensdauer der SSD.

Unaligned write IO seitens der Anwendung: Einige SSD-basierten Arrays besitzen Dateisysteme, die auf Block-variablen Log-Strukturen basieren. Diese können die Größe ihres IO Vorganges auf die jeweilige Anwendung anpassen.

Arrays ohne diese Fähigkeit verfügen über fix vorgegebenen Blockgrößen. In diesem Fall vervielfacht sich die Menge der Daten, die der Controller verwalten muss, da die Daten anteilig in mehrere Blöcke geschrieben werden müssen. Als Konsequenz muss die CPU vermehrt das IO-Protokoll abarbeiten, was wiederum zu einer höheren Latenz führt. Dabei kann sich die Lebensdauer der SSDs verringern und Kapazität durch Überprovisionierung kosten.

Moderne Betriebssysteme wie etwa Windows Server 2012 R2 und VMware vSphere übernehmen die Rolle der Partitionenverwaltung, wenn seitens des Arrays Blockprotokolle verwendet werden. Ältere hingegen, beispielsweise Windows Server 2003 und einige Versionen von Linux beziehungsweise von Linux-Dateisystemen übernehmen diese Funktionen nicht, solange die Erstellung nicht mit entsprechenden Attributen geschehen ist.