Also wäre aufrüsten auf 32GB RAM sinnvoll?
Bei einer reinen Performance und Effizienzbetrachtung macht ZFS alles falsch. Es fügt an Daten und Metadaten Prüfsummen an und muss damit viel mehr Daten lesen, schreiben und verarbeiten. Da keine Daten auf dem Pool geändert werden sondern wegen Copy on Write immer als neue Blöcke in recsize geschrieben werden, erhöht sich die Datenmenge nochmals beträchtlich. Da Daten über den Pool verteilt werden, gibt es keine echten sequentiellen Transfers sondern viel random io.
Im Gegenzug kann ZFS feststellen ob Daten oder Raid korrekt sind. Bei einem Absturz bei Schreiben bleibt ZFS heile und Copy on Write liefert ganz nebenbei Snaps ohne Overhead. Auch bei vielen Nutzern und vielen kleinen Dateien bleibt die Performance von ZFS recht konstant.
Dass ZFS dennoch sehr schnell ist, liegt neben modernen/schnellen CPUs daran dass fast der komplette RAM als extrem effizienter
Lese-/Schreibcache genutzt wird. Meine
Daumenregel lautet:
Ein 64 bit OS mit ZFS braucht etwa 4 GB RAM. Solaris/Illumos etwas weniger da die ZFS Speicherververwaltung noch wie Solaris arbeitet,
BSD und Linux etwas mehr. Dazu kommt noch ein Zuschlag für webbasiertes Management zwischen 512k und 2 GB.
Ca 10% RAM werden als Schreibcache genutzt. Dieser dient ausschließlich dazu kleine Writes z.B. < 128k wann immer möglich zu vermeiden. Da brechen sogar NVMe übel ein.
Ca 70% RAM werden als Lesecache für kleine random reads (Metadaten und kleine Daten aus read last/read most). Große Daten/Files werden nicht gecacht.
Falls man rambasiertes realtime Dedup nutzt, kommt dazu bis zu 5 GB RAM je TB deduplizierte Daten (nicht Poolsize).
Bei 32GB kann man also phi x Daumen rechnen
32-6 GB (OS und Web-ui, BSD/Linux)=26GB frei
Schreibcache 2,6GB, nutzbar 1,3 GB für alle User.
Wenn man keine Writes < 128k möchte, könnte man in diesem Fall 10 User je mit ausreichend Schreibcache bedienen
Lesecache wären dann max ca 18GB. Da landen vor allem Metadaten und kleine/letzte Reads.
Mit wenigen Usern und Dateien liefert das eine Cache hitrate von gerne > 80%.
Bei einem Enterprise Mailserver mit vielen Usern und Millionen Dateien wäre das viel zu wenig Cache.
Die oft genannte Regel 1 GB RAM per TB Pool ist Unsinn sondern es kommt darauf an. Gibt Fälle wo 4 GB RAM gerade noch ok sind, manchmal sind 128 GB sinnvoller.