ZFS の ARC カウンターは永続的ですか?

ZFS の ARC カウンターは永続的ですか?

頻繁にアクセスされるデータと、それほど頻繁にアクセスされないデータがあるとします。ARC は、他のデータが最近アクセスされたという理由だけで、他のデータのためのスペースを確保するために頻繁にアクセスされるデータを追い出すのをやめることを最終的に学習するだろうと理解しています。ZFS システムをかなり長い間実行していて、このアクセス パターンが認識されているとします。

ボックスを再起動して、頻繁にアクセスされるデータが読み取られて ARC 内にある場合、他のデータの新しい読み取りによってそのデータが削除されるのでしょうか? それとも、ZFS はそのデータが頻繁に使用されていることを記憶しているのでしょうか?

実装に依存する場合、この質問は特に Solaris に関係します。

答え1

ARCには永続的なカウンタがないので、頻繁に使用されているかどうかを判断するには、アクセスパターンを再度確認する必要があります。ただし、いっぱいになるまで、またはシステム上の他の何かからメモリが圧迫されるまで、何も削除されないため、最初の起動時にはすべて読み込まれたり書き込まれたりしたデータはキャッシュに保存されます。頻繁にアクセスされるデータがそれまでに 2 回読み取られる限り、「MFU」リストに追加されるはずです。

ARCアルゴリズムの詳細については、ここ簡単に言うと、これは実際には 2 つの LRU リストから構成されています。1 つは 1 回アクセスされたもの用 (「MRU リスト」)、もう 1 つは 2 回以上アクセスされたもの用 (「MFU リスト」 — はい、名前は間違っています。LRU は MFU よりも高速で実装が簡単なため、実際には LRU を使用して削除します)。また、各リストから最近削除されたキー (データではありません) を追跡する「ゴースト リスト」もあり、これは 2 つのキャッシュを相対的にどの程度の大きさにするかを決定するのに役立ちます。

L2ARC は永続的です (通常は SSD に保存されます) が、ARC アルゴリズム (これもまた最適とは言えない名前です) は使用しません。キャッシュ内のデータを単純にラウンドロビンするだけだと思います。また、Nexenta の OpenZFS フォークを使用していない限り、再起動後に再利用することはできないと思います (まだアップストリームにリリースされていないと思います)。

Nexenta の「Persistent L2ARC」機能を除き、この回答にはプラットフォーム固有のものはありません。

関連情報