Sind die ARC-Zähler von ZFS persistent?

324
lungj

Angenommen, ich habe einige Daten, auf die häufig zugegriffen wird, und einige Daten, auf die seltener zugegriffen wird. Ich verstehe, dass der ARC irgendwann lernen wird, die Daten zu entfernen, auf die häufig zugegriffen wird, um Platz für andere Daten zu schaffen, nur weil auf die anderen Daten kürzlich zugegriffen wurde. Nehmen wir an, ich habe ein ZFS-System schon länger im Einsatz und dieses Zugriffsmuster hat es erkannt.

Wenn ich meine Box neu starte und häufig auf Daten zugegriffen wird, die gerade gelesen werden, und dann in der ARC, werden neue Lesevorgänge anderer Daten dazu führen, dass sie gelöscht werden? Oder erinnert sich ZFS daran, dass Daten häufig verwendet werden?

Wenn es implementierungsabhängig ist, bezieht sich diese Frage speziell auf Solaris.

2

1 Antwort auf die Frage

1
Dan

Der ARC hat keine permanenten Leistungsindikatoren, so dass er Ihr Zugriffsmuster erneut sehen muss, um festzustellen, dass etwas häufig verwendet wird. Es wird jedoch nichts aufheben, bis es voll ist / es gibt Speicherdruck von etwas anderem im System, so dass beim ersten Start alles, was gelesen oder geschrieben wird, im Cache landet. Solange Ihre Daten, auf die Sie häufig zugreifen, zuvor zweimal gelesen werden, sollten sie in die Liste „MFU“ aufgenommen werden.

Weitere Informationen zum ARC-Algorithmus finden Sie hier . Kurz gesagt, es besteht eigentlich aus zwei LRU-Listen, eine für Sachen, die einmalig erworben wurden (die "MRU-Liste"), und eine für Sachen, auf die zweimal oder mehr zugegriffen wurde (die "MFU-Liste" - ja, die Der Name ist falsch, er verwendet LRU wirklich zum Entfernen, da LRU schneller und einfacher zu implementieren ist als MFU. Es gibt auch "Geisterlisten", die die zuletzt geräumten Schlüssel (aber keine Daten) aus jeder Liste nachverfolgen, sodass sie feststellen kann, wie groß die beiden Caches relativ zueinander sein sollten.

Der L2ARC ist dauerhaft (wird normalerweise auf SSDs gespeichert), verwendet jedoch nicht den ARC-Algorithmus (noch einen anderen suboptimalen Namen). Ich glaube, es werden einfach die Daten im Cache abgerundet. Ich glaube auch, dass Sie es nach einem Neustart nicht wiederverwenden können, es sei denn, Sie verwenden Nexentas Gabel von OpenZFS (ich glaube nicht, dass sie bisher im Upstream gelandet sind).

Abgesehen von Nexentas „Persistent L2ARC“ -Funktion ist nichts in dieser Antwort plattformspezifisch.