studentbox / zusammenfassung-ssm

Eine Zusammenfassung der Lernziele im Modul SSM an der Hochschule Luzern
MIT License
3 stars 3 forks source link

ZFS Allokation #36

Closed simonerni closed 9 years ago

simonerni commented 9 years ago

ZFS "Bei Änderungen werden nie Datenblöcke überschrieben".

Wenn ich en snapshot mache, wird ja nüd kopiert, sondern nur de Zeiger uf de aktuelle Wurzel gmerkt. Wenn ich jetzt Date ändere, den wird ja mit CoW, äbä nüd überschriebe. Aber irgendwenn mal muss, das züg ja überschriebe werde, süsch han ich ja gar kei Platz meh uf de Disk, wenn das uf immer und ewig phalte wird?! -- Alex Suter

@alexander-suter

simonerni commented 9 years ago

Wie jedes andere Dateisystem auch, benötigt ZFS eine Methode zur Verwaltung von freiem und belegtem Speicherplatz. Wäre es nicht möglich würde aufgrund des Copy On Write Verfahrens der Pool-Speicher sehr schnell voll sein, da jede einzelne Änderung zu einer Neuallokierung führt.

ZFS teilt jedes virtuelle Device (vdef) in mehrere hundert Regionen ein. Diese werden Metaslab genannt. Jede Metaslab hat eine eigene Space Map, in der sämtliche Allokierungen und Freigaben von Speicher in zeitlicher Reihenfolge (wie in einer Log Datei) gespeichert sind. Dies gewährleistet auch bei nicht sequentiellem Löschen eine sehr schnelle Bearbeitung.

Sollte ZFS freien Speicherplatz zum Schreiben benötigen, wird die spacemap einer Metaslap gelesen. Die Auswahl der Metaslab geschieht nach verschiedenen Kriterien. Ein Hauptkriterium ist die größe des freien Speicherplatzes. Zusätzlich beachtet ZFS die Position der Blöcke auf der Festplatte, da weiter außen liegenden Blöcke eine höhere Bandbreite haben. Die gewählte Spacemap wird dann in einen binären Suchbaum (AVL Baum) umgewandelt und im Speicher abgelegt. Anhand dieses Suchbaumes kann nun sehr einfach aneinander hängender Speicher in dieser Region der Festplatte gefunden werden. Zusätzlich wird die existierende Spacemap für spätere Zugriffe optimiert.

Die Spacemaps müssen bei Erstellung eines Pools nicht initialisiert werden, da eine leere Spacemap einem Bereich ohne Allokierungen und Freigaben entspricht. Da wie in einer Logdatei immer nur am Ende der Map angehängt wird, lassen sich Änderungen sehr schnell durchführen.

Sollte eine Spacemap komplett gefüllt werden, wird dies durch einen einzelnen Eintrag festgehalten. Hierdurch schrumpft die Größe der Spacemap sehr stark, so dass mehr Speicher für Nutzdaten zur Verfügung steht.

Quelle: http://www.fh-wedel.de/~si/seminare/ws08/Ausarbeitung/02.zfs/funktionen.html#n20b