Os contadores ARC do ZFS são persistentes?

Os contadores ARC do ZFS são persistentes?

Suponha que eu tenha alguns dados que são acessados ​​com frequência e alguns dados acessados ​​com menos frequência. Entendo que a ARC acabará por aprender a parar de despejar os dados frequentemente acedidos para dar espaço a outros dados apenas porque os outros dados foram acedidos recentemente. Suponha que eu esteja executando um sistema ZFS há algum tempo e ele tenha percebido esse padrão de acesso.

Se eu reiniciar minha caixa e os dados acessados ​​com frequência forem apenas lidos e, portanto, no ARC, novas leituras de outros dados causarão seu despejo? Ou o ZFS lembra que esses dados são usados ​​com frequência?

Se depender da implementação, esta questão pertence especificamente ao Solaris.

Responder1

O ARC não possui contadores persistentes, portanto será necessário ver seu padrão de acesso novamente para determinar se algo é usado com frequência. No entanto, ele não removerá nada até que esteja cheio/há pressão de memória de alguma outra coisa no sistema, portanto, na primeira inicializaçãotudoque for lido ou escrito terminará no cache. Contanto que seus dados acessados ​​com frequência sejam lidos duas vezes antes disso, eles deverão entrar na lista “MFU”.

Você pode ler mais sobre o algoritmo ARCaqui. Resumindo, na verdade é feito a partir de duas listas LRU, uma para coisas que foram acessadas uma vez (a “lista MRU”) e outra para coisas que foram acessadas duas ou mais (a “lista MFU” – sim, a nome está incorreto, ele realmente usa LRU para despejar porque LRU é mais rápido e simples de implementar que MFU). Existem também “listas fantasmas” que rastreiam as chaves recentemente despejadas (mas não os dados) de cada lista, o que ajuda a determinar o tamanho que os dois caches devem ter em relação um ao outro.

O L2ARC é persistente (geralmente armazenado em SSDs), mas não usa o algoritmo ARC (outro nome abaixo do ideal). Eu acredito que ele simplesmente faz um round-robin dos dados no cache. Além disso, acredito que você não pode reutilizá-lo após uma reinicialização, a menos que esteja usando o fork do OpenZFS da Nexenta (não acho que eles o tenham lançado no upstream ainda).

Exceto o recurso “Persistent L2ARC” da Nexenta, nada nesta resposta é específico da plataforma.

informação relacionada