Nimble Storage: woher kommt die Performance?

Freitag, 1. Februar 2013

Für jemanden mit einiger Erfahrung im Bereich Speichersysteme hören sich die Performance-Werte von Nimble Storage Systemen zunächst eher unglaublich an.

Lange galt ja schließlich: Performance kommt durch die Spindeln von Festplatten zustande. Also: je mehr Spindeln, desto mehr I/O-Leistung - gemeinhin in "IOPS" gemessen.

Woran liegt es also, dass die Nimble Systeme dem ganz offensichtlich nicht folgen mögen?

Es ist eine Mischung aus durchaus schon bekannten Ansätzen (Striping der Daten über die verfügbaren Spindeln, Einsatz von Flash Speicher als Cache) mit intelligenten Konzepten zum integrierten Management von Disk und Flash Speicher: "CASL" (Cache Accelerated Sequential Layout) heisst das Verfahren bei Nimble Systemen.

Zunächst ist dabei die unterschiedliche Leistungscharakteristik der beiden verwendeten Speicherkomponenten zu berücksichtigen. Kurz zusammengefasst:

Flash Speicher ist - aufgrund der fehlenden "Positionierungszeiten" - sehr schnell beim Lesen (insbesondere bei Random I/O), eher mäßig beim Schreiben (Stichwort "Write Amplification") und - relativ teuer.

Die Festplatte ist hingegen im Vergleich preiswert und - ist der Kopf einmal "in Position gebracht" - durchaus zügig beim sequentiellen Schreiben. Letzteres gilt übrigens das für beide Varianten - SAS und SATA, so dass aufgrund des Preis-/Leistungsverhältnisses immer öfter SATA den Vorzug erhält. (Bevor jetzt irgendjemand etwas zur vermeintlichen Haltbarkeit erzählt: bitte erst mal hier nachlesen.)

Da gerade durch die Virtualisierung der Anteil von Random I/O aus Sicht eines Speichersystems eher zunimmt, ist es sehr hilfreich, diesen intern sequentiell abzubilden. Und genau das tun die Nimble Systeme:

  • zunächst werden die Daten im NVRAM in 512kB Einheiten gesammelt und komprimiert;
  • diese Daten werden in Stripes für die RAID-Gruppen zusammengefasst (bei typischerweise 9 nutzbaren Platten also ca. 4.5 MB);
  • dieser Stripe wird dann sequentiell auf die Platten geschrieben;
  • und je nach Beurteilung durch den Cache Algorithmus eventuell auch der Flash Speicher gefüllt.

Im letztgenannten Schritt profitiert auch der Flash Cache von der Bildung des Stripes: durch Schreiben dieser Daten in einem Zug wird die Write Amplification weitgehend vermieden und die Lebensdauer des Flash Speichers erhöht. Und dadurch, dass die Daten ja komprimiert sind, steigt auch effektiv die Nutzung des Caches - er erscheint größer.

Erfreulich ist dabei, dass auch das Überschreiben einzelner Datenblöcke die Performance nicht beeinträchtigt: CASL weiss, wo der alte Block geschrieben steht, invalidiert diesen und schreibt den neuen einfach in einen der nächsten Stripes.

Dadurch entsteht natürlich eine gewisse Fragmentierung der Daten. Diese wird zum einen durch die hervorragende Random Access Performance des Flash Cache kompensiert, zum anderen durch einen "Aufräumprozess" (Sweeping), der im Hintergrund dafür sorgt, dass immer genug Platz für neu zu schreibende Stripes vorhanden ist.

So bleibt die Performance selbst bei der Verwendung von Snapshots - wo der zu überschreibende Block eben nicht einfach verworfen werden kann - unbeeinträchtigt hoch. Dies ist die beste Basis dafür, das Storage System gleichzeitig auch für Backup-Zwecke zu nutzen.