Angenommen, ich habe einige Daten, auf die häufig zugegriffen wird, und einige Daten, auf die weniger häufig zugegriffen wird. Ich verstehe, dass der ARC irgendwann lernen wird, die häufig zugegriffenen Daten nicht mehr zu verdrängen, um Platz für andere Daten zu schaffen, nur weil auf die anderen Daten kürzlich zugegriffen wurde. Angenommen, ich betreibe schon seit einiger Zeit ein ZFS-System und es hat dieses Zugriffsmuster erkannt.
Wenn ich meine Box neu starte und häufig aufgerufene Daten gerade gelesen werden und sich somit im ARC befinden, führen dann neue Lesevorgänge anderer Daten zu deren Löschung? Oder merkt sich ZFS, dass diese Daten häufig verwendet werden?
Wenn es von der Implementierung abhängt, dann bezieht sich diese Frage speziell auf Solaris.
Antwort1
Der ARC hat keine persistenten Zähler, daher muss er Ihr Zugriffsmuster erneut prüfen, um festzustellen, ob etwas häufig verwendet wird. Allerdings wird er nichts auslagern, bis er voll ist / es Speicherdruck von etwas anderem im System gibt, also beim ersten Bootenallesdie gelesen oder geschrieben werden, landen im Cache. Sofern Ihre häufig aufgerufenen Daten vorher zweimal gelesen werden, sollten sie in die „MFU“-Liste gelangen.
Mehr zum ARC-Algorithmus erfahren Sie hierHier. Kurz gesagt besteht es eigentlich aus zwei LRU-Listen, eine für Sachen, auf die einmal zugegriffen wurde (die „MRU-Liste“), und eine für Sachen, auf die zweimal oder öfter zugegriffen wurde (die „MFU-Liste“ – ja, der Name ist falsch, es wird tatsächlich LRU zum Auslagern verwendet, weil LRU schneller und einfacher zu implementieren ist als MFU). Es gibt auch „Geisterlisten“, die kürzlich ausgelagerte Schlüssel (aber keine Daten) aus jeder Liste verfolgen, was dabei hilft zu bestimmen, wie groß die beiden Caches im Verhältnis zueinander sein sollten.
Der L2ARC ist persistent (normalerweise auf SSDs gespeichert), verwendet aber nicht den ARC-Algorithmus (noch ein suboptimaler Name). Ich glaube, er führt einfach einen Round-Robin-Vorgang für die Daten im Cache durch. Außerdem glaube ich, dass Sie ihn nach einem Neustart nicht wiederverwenden können, es sei denn, Sie verwenden Nexentas Fork von OpenZFS (ich glaube nicht, dass sie ihn bereits upstream bereitgestellt haben).
Mit Ausnahme der Funktion „Persistent L2ARC“ von Nexenta ist nichts in dieser Antwort plattformspezifisch.