zfs: liberar cache sem exportar

zfs: liberar cache sem exportar

Para testar, preciso que o cache do zfs esteja frio.

Posso liberar o cache do pool removendo os discos de cache, exportando e importando o pool. Isso dá o efeito que desejo. Mas gostaria muito de não exportar o pool.

Existe uma maneira menos drástica de obter o mesmo efeito?

O que procuro é o equivalente a:

echo 3 > /proc/sys/vm/drop_caches

que faz o que eu quero para o ext4.

Fundo

Posso executar meu algoritmo de diferentes maneiras. Eu não me importo com o melhor desempenho. EUfazerse preocupam com o desempenho do pior caso. O pior caso seria em dados frios (dados tocados há tanto tempo que não estão mais em ARC/L2ARC).

Para escolher a maneira ideal de executar o algoritmo, preciso poder executá-lo no mesmo conjunto de testes. E este conjunto de teste deve estar frio. Isso vai completamente contra a estratégia de cache do ZFS: se eu executar o mesmo conjunto de testes repetidamente, os dados serão colocados no ARC - o que faz todo o sentido em circunstâncias normais, mas não aqui.

Posso exportar/importar na minha máquina de desenvolvedor, mas não posso fazer isso na produção. Liberando o cache, no entanto,vaiser aceitável na produção.

Prefiro que o ARC ainda funcione, para que os dados frios sejam armazenados em cache após serem lidos (novamente semelhante ao ext4), mas posso conviver com o ARC completamente desabilitado durante o teste.

Responder1

echo 3 > /proc/sys/vm/drop_caches usadopara limpar o cache do ZFS, mas alguns commits recentes alteraram isso para limpá-lo apenas parcialmente.

Para restaurar o comportamento antigo, é necessário definir os zfs_arc_shrinker_limitparâmetros do módulo para 0(vejaaqui).

Então, para descartar o ARC sem exportar o pool:

echo 0 > /sys/module/zfs/parameters/zfs_arc_shrinker_limit
echo 3 > /proc/sys/vm/drop_caches

O acima irá cairquasetodo o ZFS ARC, deixando apenas alguns MB relacionados aos metadados básicos do pool.

informação relacionada