Mit den Tipps und Workshops im ADMIN-Magazin 03/2013 sichern Administratoren ihre Webserver und Netze gegen Angriffe ab: gegen Abhören sensibler Informationen, ... (mehr)

ZFS-Tuning unter FreeBSD

Die FreeBSD-Version von ZFS bietet viele Möglichkeiten, die Performance beim Schreiben und Lesen von Daten zu optimieren. Grundsätzlich gilt, dass schnelle Hardware mehr Freude bereitet. Moderne SCSI-Systeme mit SAS (Serial Attached SCSI) oder U320 mit hochtourigen Festplatten bieten genügend Potenzial. Bei SATA-Systemen sollte man auch darauf achten, möglichst schnelle Festplatten mit SATA2 zu verwenden.

Den Arbeitsspeicher betreffend gilt die bekannte Regel: RAM über alles. Unter vier GByte braucht man nicht anzufangen. Eine Richtgröße sind etwa 128 GByte RAM bei 18 TByte ZPool-Kapazität. Das ist schon ein gewaltiger Wert, aber bei den heutigen RAM-Preisen machbar.

Eine andere Möglichkeit der Optimierung besteht darin, dass man dem ZFS-Intent-Log ZIL einen SSD-Speicher mit möglichst hohem Datendurchsatz spendiert. Alle Dateisysteme-relevanten Schreiboperationen und Transaktionen werden durch den ZIL protokolliert. Im Falle eines Systemabsturzes benutzt ZFS die Informationen aus dem Protokoll dazu, eventuell beschädigte Dateien zu reparieren. Wie man schnell erkennt, fällt die Schreibgeschwindigkeit besonders ins Gewicht.

Intent Log auf SSD

In Standardkonfigurationen von ZPools wird das ZIL-Protokoll im ZPool selbst gespeichert. Für kleinere Server-Anwendungen ist das ausreichend. Für große Pools sollte man eine externe SSD einbinden:

zpool add pool log ada1

Auch sollte man auf Ausfallsicherheit achten. ZIL unterstützt auch gespiegelte Festplatten. Eingebunden wird ein solcher Mirror mit

zpool add tank log mirror ada1 ada2

Die Mindestgröße eines ZIL-Devices liegt bei 64 MByte. Die maximale Größe richtet sich nach dem verfügbaren Arbeitsspeicher, der Richtwert liegt bei 50 Prozent der Speichergröße. Auch der Datendurchsatz des Pools spielt bei der Berechnung eine Rolle. Als Faustformel gilt, dass pro 100 MByte/s circa 2GByte Speicherbedarf bestehen.

ZFS bietet wie bereits ausgeführt zwei Caches zur Beschleunigung des Lesezugriffs: ARC und L2ARC. Man sollte sich allerdings schon beim Anlegen des ZPools Gedanken machen, in welchem Dataset häufig benötigte Daten abgelegt werden. Für dieses Dataset legt man den L2ARC auf eine schnelle Festplatte oder auf ein SSD:

zpool add tank cache ada1

So richtig performant wird die ZFS-Installation, wenn man wieder einen Mirror bestehend aus zwei SSDs oder Partitionen einrichtet. Der Grund liegt darin, dass ZFS die Cache-Daten nach dem Round-Robin-Verfahren ablegt.

zpool add tank cache ada1p2 ada2p2

Wenn ZFS als Dateisystem für Datenbanken wie PostgreSQL dienen soll, sind zwei Einstellungen von Interesse:

zfs set primarycache=metadata tank/db
zfs set atime=off tank/db

Sie legen fest, dass für das Dataset »tank/db« , in dem die Tabellen der Datenbank liegen, im primären Cache (ARC) nur die Metadaten vorgehalten werden sollen. Das ist auch sinnvoll, da sich hauptsächlich die Tabellengröße verändert, aber eher selten die Zahl der Dateien. Eine weitere Beschleunigung erfährt das Dataset durch das Abschalten des Attributes »atime« , das angibt, wann zuletzt auf die Datei zugegriffen wurde.

Die hier gemachten Vorschläge zur Optimierung stellen nur einen kleinen aber wichtigen Teil dar. Es gibt noch eine Menge anderer SysCtl-MIBs, die zur Optimierung beitragen. Wer wissen möchte, wieviele Kenngrößen und Parameter es gibt, um ZFS zu beeinflussen, der sollte folgendes Kommando eingeben:

sysctl -a | grep zfs

Als Ergebnis erhält man 140 SysCtl-MIBs alleine für ZFS.

In vielen Tutorials zur FreeBSD-Installation in einem ZPool liest man, dass Swapping in ein ZFS-Dataset kein Problem darstelle. Das ist aber nicht ganz richtig. Das Problem liegt darin, dass beim Swappen das Schreiben in den ZPool zu einem Schreibzugriff auf den ARC führt. Das kostet aber weiteren Arbeitsspeicher. Wenn man Swapping auf ein ZFS-Dataset erlaubt, will der Kernel das auch nutzen, wenn der Speicher ausgeht. Aber dadurch wird noch mehr RAM genutzt.

Früher führte dies zwangsläufig zum Teufelskreis mit einem Absturz am Ende. Heute erkennt ZFS die Speicherknappheit und gibt einen Teil seines ARC wieder frei. Allerdings klappt das nur bis zu einem bestimmten Punkt. Daher sollte man die Swap-Partition weiterhin auf eine konventionelle Partition legen.

comments powered by Disqus

Artikel der Woche

Eigene 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

Ausgabe /2020