Os contadores ARC do ZFS são persistentes?

2

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

Se eu reinicializar 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 for dependente de implementação, então esta questão pertence especificamente ao Solaris.

    
por lungj 03.04.2018 / 17:48

1 resposta

1

O ARC não tem nenhum contador persistente, por isso ele terá que ver seu padrão de acesso novamente para determinar se algo é usado com frequência. No entanto, não vai despejar nada até que esteja cheia de pressão de memória de outra coisa no sistema, então, na primeira inicialização, tudo que for lido ou escrito terminará no cache. Contanto que seus dados acessados com frequência sejam lidos duas vezes antes disso, ele deverá entrar na lista “MFU”.

Você pode ler mais sobre o algoritmo ARC aqui . Em suma, na verdade é feito a partir de duas listas LRU, uma para coisas que foram acedidas uma vez (a "lista MRU"), e uma para coisas que foram acessadas duas vezes ou mais (a "lista MFU" - sim, o nome está incorreto, ele realmente usa o LRU para remover porque o LRU é mais rápido e simples de implementar do que o MFU). Há também “listas fantasmas” que rastreiam as chaves recentemente despejadas (mas não os dados) de cada lista, que ajudam a determinar o tamanho dos dois caches em relação um ao outro.

O L2ARC é persistente (geralmente armazenado em SSDs), mas não usa o algoritmo ARC (outro nome sub-ótimo). Acredito que basta rodar os dados no cache. Além disso, acredito que você não poderá reutilizá-lo depois de uma reinicialização, a menos que você esteja usando o fork do OpenZFS da Nexenta (ainda não achei que ele tenha desembarcado no upstream).

Exceto pelo recurso "L2ARC persistente" da Nexenta, nada nesta resposta é específico da plataforma.

    
por 04.04.2018 / 16:53

Tags