Level und Größe bei RAID richtig wählen

© Ben, Fotolia

Genau vermessen

Welcher RAID-Level eignet sich am besten? Was muss der Server können? Lassen sich Engpässe vorausberechnen? Der Schlüssel zur Beantwortung vieler dieser Fragen liegt im Charakter des zu verarbeitenden Workloads. Wie man dessen Kenngrößen ermittelt und auf dieser Grundlage ein dazu passendes Storagesystem entwirft, erklärt dieser Artikel.
Was das Backup wert war, erweist sich, sobald man es versucht ganz oder teilweise wiederherzustellen. Spätestens dann macht sich die Wahl des richtigen Tools ... (mehr)

Ein-/Ausgabeoperationen (I/O) kommen prinzipiell in zwei Formen vor: Zufällig oder in einer geordneten Folge (sequenziell). Zufällige Zugriffe, wie sie für Datenbanken, E-Mail-, File- oder Webserver typisch sind, beinhalten eine große Anzahl Bewegungen der Schreib-/Leseköpfe. Sequenzieller I/O, wie er besonders durch das Lesen und Schreiben großer Files entsteht, etwa beim Backup, bei der Datenmigration oder beim Abspielen von Videos, ist auf der anderen Seite durch das Bearbeiten aufeinanderfolgender Blöcke gekennzeichnet. Dieser Artikel beschäftigt sich hauptsächlich mit zufälligem I/O – ähnliche Techniken sind aber auch für sequenzielles Schreiben und Lesen anwendbar.

Informationen zusammentragen

Die grundlegende Maßeinheit für die folgenden Betrachtungen heißt IOPS (Input/Output Operations Per Seconds), manchmal spricht man auch von der Transferrate und TPS (Transfers Per Second). Um abzuschätzen, wie viele I/O-Operationen eines gegebenen Workloads von einem bestimmten Subsystem maximal bewerkstelligt werden können, braucht man folgende Angaben:

  • die Umdrehungsgeschwindigkeit der Festplatten
  • gegebenenfalls den Level des RAID-Systems
  • die Anzahl Platten im RAID-Verbund
  • das Verhältnis von Lese- zu Schreiboperationen im Workload

Der RAID-Level, die Anzahl Festplatten (ohne Spare-Platten) und die Umdrehungsgeschwindigkeit der Platten sind schnell ermittelt. Das Verhältnis der Lese- und Schreiboperationen ist aber nicht so offensichtlich. Diese Kenngröße des Workloads misst man besten über eine gewisse Zeit. Dafür eignet sich sehr gut ein Network Monitoring System (NMS), das die passenden Zahlen (Anzahl der Schreib-/Lesevorgänge) sammelt, Mittelwerte berechnet und Grafen zeichnet. Sollte so ein System nicht zur Hand sein, leistet auch »sar« aus dem Sysstat-Paket gute Dienste.

Der Sysstat-Datensammler »sadc« (System Activity Data Collector) läuft auf den meisten Systemen nach der Installation als Cronjob (»/etc/cron.d/sysstat« ) und sammelt alle zehn Minuten eine Fülle von Daten zu Speicher- und CPU-Auslastung, Paging oder netzwerkbezogenen Metriken. Die Aktivität der Blockdevices steht aber normalerweise nicht auf der Liste. Das lässt sich leicht mit dem Kommando »sar -dp« überprüfen (vergleiche auch den Kasten Sar-Tipp). Wenn Blockdevicedaten ermittelt wurden, ergibt sich eine Ausgabe wie in Abbildung 1.

Abbildung 1: sadc sammelt auf Wunsch auch statistische Daten zu Blockdevices.

Sar-Tipp

Neben der periodischen Datensammlung durch einen Cronjob kann »sar« auch auf Anforderung Statistiken generieren. Für eine solche Ad-hoc-Statistik muss man dem Kommando noch den Wert für die Dauer eines Sammelintervalls und optional für eine Anzahl solcher Intervalle mitgeben. Bei neueren Sysstat-Versionen funktioniert beispielsweise »sar -dp 1« . Es gibt dann fortlaufend Daten im Sekundentakt aus. Ältere Versionen von Sysstat beenden sich allerdings bei diesem Kommando nach einer Sekunde. In diesem Fall erreicht man das Gewünschte mit »sar -dp 1 5« ; dabei werden die Daten fünfmal im Abstand einer Sekunde erhoben.

Wie man dem »sadc« -Kommando mitteilt, dass man von ihm auch Blockdevice-Daten erwartet, unterscheidet sich von Distribution zu Distribution ein wenig. Zumindest bei RHEL-kompatiblen Versionen bewirkt das aber die Sar-Option »-d« .

Der Anteil der Leseoperationen, der später für die Berechnung der maximalen IOPS benötigt wird, lässt sich relativ einfach nach folgender Formel ermitteln

 

Dafür sollten die »rd_sec/s« - und »wr_sec/s« -Werte über mehrere Tage gesammelt werden. Der Anteil der Schreiboperationen ergibt sich dann mit

 

Es kann günstig sein, die Daten nur während der Spitzenlast zu erheben, damit sie nicht durch zufällige Effekte verfälscht werden.

Zufälligen I/O identifiziert man mithilfe der Ausgabe von »sar -b« nach der Formel

(bread/s+bwrtn/s)/(rtps+wtps) < 16KByte

Wenn diese Bedingung erfüllt ist, ist der Work-load überwiegend zufällig. Ist der errechnete Wert sehr viel höher (>128 KByte), dann ist der Workload überwiegend sequenziell. Aber Achtung: Diese Unterscheidung ist zwar meistens ein ganz guter Indikator, aber ziemlich grob. Auch hier ist darauf zu achten, dass Messwerte und Erwartungen in Einklang zu bringen sind.

Berechnung des erwarteten IOPS-Maximums

Nun sind alle Informationen beisammen, um das erwartete Maximum an IOPS zu berechnen:

 

darin sind

  • d: die Anzahl Festplatten
  • dIOPS: Die IOPS pro Platte
  • %w: der prozentuale Anteil Schreiboperationen am Workload
  • %r: der prozentuale Anteil Leseoperationen am Workload
  • F: der RAID-Faktor (Anzahl der Schreiboperationen für den ausgewählten RAID-Typ, Tabelle 2).

Diese Berechnung bezieht allerdings keine Effekte ein, die sich durch einen Cache oder das Queueing des Controllers ergeben könnten. Die IOPS pro Disk (»dIOPS« ) lassen sich aus der zuvor ermittelten Umdrehungsgeschwindigkeit der Festplatte anhand von Tabelle 1 abschätzen.

Der IOPS-Wert für eine bestimmte Platte ist eine Funktion von Suchzeit (seek time) und Latenz. Eine genauere Abschätzung mit diesen Kenngrößen errechnet sich nach der folgenden Formel:

dIOPS=1/(seek time in sec + latency in sec).

Dabei gilt es zu berücksichtigen, dass sich die Seek Time beim Lesen und Schreiben unterscheidet. Nicht alle Hersteller geben beide Werte an. Findet man nur einen Wert, ist entweder ein Mittelwert gemeint oder die Seek Time für Leseoperationen, die kürzer ist und deshalb besser aussieht.

Die Platte aus dem Enterprise-Angebot von Seagate, deren Spezifikation Abbildung 2 zeigt, hat eine durchschnittliche Latenz von 2,0 ms, wobei sowohl der Wert für Lesen als auch der für Schreiben angegeben ist. Damit berechnet sich die maximale Anzahl IOPS für diese Platte wie folgt:

$ echo "scale=0; 1/(.0031 + .002)" | bc -l
196
Abbildung 2: Die Spezifikation der Seagate ST9146852SS.

Das Resultat 196 fällt in den Bereich 175 bis 210, den Tabelle 1 für eine Platte mit 15k RPM ausweist.

Kommt eine RAID-Konfiguration ins Spiel wird es etwas interessanter. Tabelle 2 illustriert einige grundlegende Unterschiede zwischen den RAID-Leveln und dem zugehörigen RAID-Faktor für die Berechnung der maximalen IOPS.

Ähnliche Artikel

comments powered by Disqus

Artikel der Woche

Registry für Docker-Images

Wer selber Docker-Images herstellt, braucht auch eine eigene Registry. Diese gibt es ebenfalls als Docker-Image, aber nur mit eingeschränkter Funktionalität. Mit einem Auth-Server wird daraus ein brauchbares Repository für Images. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Google+

Ausgabe /2018