Im Prinzip geht es immer darum dass jeder schnelles, großes und günstiges Storage will. Leider ist es so dass wenn man zwei dieser Forderungen festlegt, die dritte eine Folge ist. Meist legt man Preis und Kapazität fest und Performance ist dann suboptimal. Man kann sich dann Gedanken machen, wie man einzelne Daten wie temp Files, Datenformate wie Datenbankfiles oder Datenarten wie kleine io Packete beschleunigt.
Ein erster Ansatz ist ein SSD Schreib-Lesecache. Arbeitet der aber filebasiert ist er schnell voll. Ein Absturz beim Schreiben darf zudem keinen Datenverlust oder korrupte Dateisysteme zur Folge haben. Mit Copy on Write oder BBU/ Flashsicherung zu realisieren. Ein weiterer Ansatz ist Tiering. Dabei nutzt man ein Speichersystem das aus einem großen, billigen, langsamen (Platten) und kleinerem, schnellem und teurem SSD Teil besteht. Man kann dann ktitische oder "hot" Daten auf den schnelleren Teil legen. Ändern sich die Anforderungen aber, ist Umkopieren angesagt. Das kostet Zeit und Performance.
ZFS bietet hier eine ganze Reihe von Ansätzen, die immer noch "State of the Art" sind.
Erster Ansatz ist der, dass ein ZFS Pool sequentiell immer schnell genug ist (viel schneller als Netz). Probleme hat man üblicherweise bei kleinen Datenpaketen insbesondere < 64k. Wenn man sich einen Atto Plattentest anschaut wird das sehr anschaulich. Beim Schreiben von 8k hat man gerne ein paar KB/s, bei 512k dann hunderte MB/s. ZFS tut daher alles um das Lesen und Schreiben kleiner Blöcke zu vermeiden.
Erster ZFS Ansatz ist der rambasierte Schreib/Lesecache Arc (z.B. 4GB Schreibcache, Lesecache ca 80% vom freien RAM). Der vermeidet wirkungsvoll das Schreiben kleiner Blöcke und beschleunigt wiederholtes Lesen. Da er auf ZFS Blöcken basiert und mit Read Last + Read Most arbeitet, ist er auch nicht voll wenn man mal ein Video liest.
Erweitern kann man den RAM Lesecache durch eine SSD/NVMe L2Arc (max 5x RAM). Kann für viele Nutzer/kleine Daten sehr viel bringen zumal er persistent ist (überlebt Reboot). Bei ausreichend RAM und für wenige Nutzer oder übliche Office Filernutzung meist wirkungslos.
Benötigt man sicheres Schreiben, darf der Inhalt des rambasierten Schreibcaches nicht verloren gehen. ZFS kann daher sync write bei dem jeder bestätigte Schreibvorgang sofort auf dem Pool landet. Das sind aber meist besonders kleine sehr langsame Writes. ZFS bietet da mit Slog die Möglichkeit diese auf eine extra Platte auszulagern, die dafür besonders ausgelegt ist, z.B. Intel Optane oder WD SS530/540.
Ein weiterer Ansatz sind special vdev - eine Intel Entwicklung. Das schreibt wie Tiering besondere Datenarten auf einen schnelleren Bereich, arbeitet aber dynamischer indem es gezielt lediglich besonders zeitkritische Datenarten darauf ablegt, z.B. Metadaten, small io oder Deduptabellen.
Insgesamt erreicht man durch diese ZFS Möglichkeiten meist eine Performance die auch kritische Vorgaben abdeckt wie sicheres sync write oder Verschlüssellung mit 10G Netzen - trotz all der Performance kostenden ZFS Sicherheitsmaßnahmen wie Copy on Write (höhere Fragmentierung, kein korruptes Dateisystem nach Absturz), Prüfsummen auf Daten und Metadaten (immer verifizierte Daten, selbstheilendes Dateisystem) und Raid Arrays bei denen Daten gleichmäßig im Pool verteilt werden und nicht sequentiell auf einzelnen Platten (konstante Performance).