Zum Testen muss der ZFS-Cache kalt sein.
Ich kann den Cache aus dem Pool leeren, indem ich die Cache-Festplatten entferne und den Pool exportiere und importiere. Das ergibt den gewünschten Effekt. Aber ich möchte den Pool wirklich nicht exportieren.
Gibt es eine weniger drastische Möglichkeit, den gleichen Effekt zu erzielen?
Was ich suche, ist das Äquivalent zu:
echo 3 > /proc/sys/vm/drop_caches
das macht, was ich für ext4 will.
Hintergrund
Ich kann meinen Algorithmus auf verschiedene Arten ausführen. Die beste Leistung ist mir egal. IchTunKümmern Sie sich um die Worst-Case-Leistung. Der Worst-Case wäre bei kalten Daten (Daten, die vor so langer Zeit berührt wurden, dass sie nicht mehr in ARC/L2ARC sind).
Um die optimale Art und Weise zum Ausführen des Algorithmus zu wählen, muss ich in der Lage sein, denselben Testsatz auszuführen. Und dieser Testsatz muss kalt sein. Dies widerspricht völlig der Caching-Strategie von ZFS: Wenn ich immer wieder denselben Testsatz ausführe, werden die Daten in ARC abgelegt – was unter normalen Umständen durchaus Sinn ergibt, hier aber nicht.
Ich kann auf meinem Entwicklercomputer exportieren/importieren, aber nicht in der Produktion. Das Leeren des Caches jedochWillein der Produktion akzeptabel sein.
Mir wäre es lieber, wenn ARC weiterhin funktionieren würde, sodass die kalten Daten nach dem Lesen zwischengespeichert würden (wiederum ähnlich wie bei ext4), aber ich könnte damit leben, wenn ARC während des Tests vollständig deaktiviert wäre.
Antwort1
echo 3 > /proc/sys/vm/drop_caches
gebrauchtum den ZFS-Cache zu leeren, aber durch ein aktuelles Commit wurde dies geändert, sodass er nur noch teilweise geleert wird.
Um das alte Verhalten wiederherzustellen, muss man die zfs_arc_shrinker_limit
Modulparameter auf 0
(sieheHier).
So löschen Sie ARC, ohne den Pool zu exportieren:
echo 0 > /sys/module/zfs/parameters/zfs_arc_shrinker_limit
echo 3 > /proc/sys/vm/drop_caches
Die oben genannten fallenfastalles ZFS ARC, sodass nur eine Handvoll MB für die grundlegenden Pool-Metadaten übrig bleiben.