Flashcache

Aus Thomas-Krenn-Wiki
Wechseln zu: Navigation, Suche

FlashCache ist eine software-basierende Lösung für die Erstellung von Block-basierenden Caches unter Linux. Werden beispielsweise von einem größeren RAID-Volume mit mehreren Terabyte nur Teile der Daten regelmäßig verwendet, kann FlashCache diese häufig genutzten Daten auf SSDs cachen und den Datenzugriff damit beschleunigen. Basierend auf dem Linux Device Mapper (DM) stellt FlashCache als Kernel-Modul Werkzeuge zur Verfügung, um aus Block-Devices Caching-Devices zu erzeugen. Als Caching Modes unterstützt FlashCache Write-Back, Write-Trough und Write-Around. Ursprünglich entwickelt für die Skalierung von InnoDB/MySQL, kann es als generelle Beschleunigung für I/O-lastige Applikationen verwendet werden.[1]

Flashcache baut auf dem DM auf - ein Teil des Linux I/O-Stacks der unter anderem auch von LVM eingesetzt wird (s.a. Linux I/O-Stack Diagramm). Die Entwickler von Flashcache sind dem Unternehmen Facebook angehörig, das die Software hauptsächlich zur Beschleunigung ihrer Datenbanken einsetzt.[2]

Auch der SSD-Hersteller STEC bietet zu ihren SSDs eine Caching-Software namens EnhanceIO (basierend auf Flashcache) zum Download an.[3]

Flashcache siedelt sich als Device unter dem Filesystem unter über dem Storage Stack an. I/O-Blöcke werden dem Caching-Modus und den zugehörigen Einstellung gemäß auf dem schnelleren Caching-Device abgelegt und verbessern dadurch die Geschwindigkeit gegenüber dem langsameren Storage-Device.

Flashcache besitzt zur Zeit jedoch noch keine Hot-Spot-Detection, die erkennen könnten welche Daten am häufigsten verwendet werden und somit gute Kandidaten für den Cache sind. Stattdessen basiert die Auswahl der Blöcke für den Cache auf einfachen Mechanismen wie FIFO oder LRU.

Die folgenden Informationen über Flashcache basieren vor allem auf den beiden Dateien "flashcache-doc.txt" und "flashcache-sa-guide.txt".[4] Weitere Informationen über SSD Caching finden sich auch:

Alternativen

Die folgenden Alternativen verfolgen ähnliche Ziele wie FlashCache:

Caching Modes Überblick

Die unterschiedlichen Caching Varianten von Flashcache

Flashcache unterstützt folgende Caching Modes:

  • Write-Back

Der Write-Back Cache beschleunigt als einziger Caching Modus auch Schreib-Operationen. Diese Writes werden in erster Linie auf die SSD geschrieben und später im Hintergrund mit der Festplatte (HDD) synchronisiert. In diesem Zusammenhang wird auch von "Lazy Cleaning" gesprochen. Blöcke, die sich noch auf der SSD befinden, aber noch nicht auf die HDD geschrieben wurden, werden als "Dirty Pages" bezeichnet. Die Dirty Pages sind der ausschlaggebende Grund um Write-Back nur mit einer redundanten Cache-Architektur zu betreiben. Fällt eine SSD aus - z.B. aufgrund eines Hardware-Defekts - gehen die Dirty Pages auf diesem Device verloren. Ist in diesem Fall keine zweite gespiegelte Backup-SSD als redundantes Cache-Device vorhanden, sind diese Daten verloren.

  • Write-through

Bei diesem Caching Modus werden alle Write-Operationen sowohl auf der SSD gecacht als auch gleichzeitig auf die HDD geschrieben. Bei einem darauf folgenden Lesezugriff der soeben geschriebenen Daten können diese von der SSD zur Verfügung gestellt werden. Write-Operationen werden von der SSD nicht beschleunigt, da diese synchron auch auf die HDD durchgeführt werden. Read-Operation, die auf die HDD durchgehen und somit einen Cache Miss verursachen, werde erst bei einem zweiten Lesen dieser Daten durch die SSD beschleunigt.

  • Write-around

Ein reiner Lese-Cache, bei dem Writes nur auf die HDD abgesetzt werden und sich der Cache erst beim Lesen von Daten füllt.

Lazy Cleaning

Im Write-Back-Modus müssen im Hintergrund die Daten von der SSD auf die HDD synchronisiert werden. Der Zeitpunkt dieser Synchronisation der Dirty-Blocks wird zum einen durch ein Timeout und zum anderen durch einen Schwellwert bestimmt:

  • fallow_delay: Dirty-Blocks, die länger als "fallow_delay" Sekunden idle waren, werden auf die HDD geschrieben (Default: 15 Minuten).
  • dirty_thresh_pct: Flashcache versucht die Anzahl der Dirty-Blocks in einem Cache Set unter diesem Wert zu halten. Ein geringerer Wert führt zu mehr Schreibvorgängen, erhöht aber die Anzahl an vorhanden Plätzen zum Cachen.

Cache Persistenz

Bei Flashcache bietet nur die Write-Back-Variante eine Cache-Persistenz über Reboots und Device-Removals hinweg. Das kommt daher, dass nur für Write-Back die Caching-Metadaten auf der SSD abgelegt werden. Für die anderen Modi werden diese im Arbeitsspeicher gehalten sind daher nicht persistent. Eine Diskussion darüber findet sich auch auf der Flashcache Google Group wieder: Persistence and drive mode (groups.google.com).

Sequentieller I/O

Es macht durchaus Sinn sequentiellen I/O nicht zu cachen. Vor allem wenn die Storage-Architektur neben dem Cache-Device für sequentielle Zugriffe eine höhere Performance erreichen kann als die SSD, kann der SSD Cache das System sogar verlangsamen. Es ist daher möglich, für Flashcache einen Schwellwert zu definieren, über dem sequentieller I/O nicht mehr gecacht wird:

  • skip_seq_thresh_kb: Dieser Parameter bestimmt die Anzahl an Kilobytes über dem sequentieller I/O nicht mehr gecacht wird.

Einzelnachweise

  1. Releasing Flashcache (Paul Saab, facebook.com)
  2. Flashcache Presentation (oscon.com)
  3. Stec Rolls Out EnhanceIO SSD Caching Software (storagenewsletter.com)
  4. Flashcache github (github.com)

Weitere Informationen


Foto Georg Schönberger.jpg

Autor: Georg Schönberger

Georg Schönberger, Abteilung DevOps bei der XORTEX eBusiness GmbH, absolvierte an der FH OÖ am Campus Hagenberg sein Studium zum Bachelor Computer- und Mediensicherheit, Studium Master Sichere Informationssysteme. Seit 2015 ist Georg bei XORTEX beschäftigt und arbeitet sehr lösungsorientiert und hat keine Angst vor schwierigen Aufgaben. Zu seinen Hobbys zählt neben Linux auch Tennis, Klettern und Reisen.


Das könnte Sie auch interessieren

CacheCade Pro 2.0 Laufwerk mit StorCLI erstellen
Flashcache Commands
LVM Caching mit SSDs einrichten