Enquanto a resposta do user121391 está correta, o limite de 1/4 para metadados não é mais o caso / não é o caso há muito tempo:
There's a limit to how much of the ZFS ARC cache can be allocated for metadata (and the dedup table falls under this category), and it is capped at 1/4 the size of the ARC
Em primeiro lugar, o zfs_arc_meta_limit (a quantidade de memória cache que pode ser usada para metadados, incluindo a tabela de descompactação) sempre foi ajustável (iirc). Portanto, mesmo em versões muito antigas do ZFS em que 25% pode ter sido o padrão, você poderia usar essa configuração para ajustar a quantidade de cache disponível para metadados. No caso de um sistema de backup em que a maioria dos dados do usuário raramente é acessada, > = 75% para metadados + < = 25% para os dados do usuário pode ser mais apropriado. Por favor, tenha em mente que o dito ajuste é a quantidade de memória disponível em bytes, não uma porcentagem.
Dependendo da sua implementação do ZFS, considere também o seguinte:
Para o ZFS no Oracle Solaris 11 , o limite foi completamente removido por padrão por completo:
Prior to this change being implemented, the ARC limited metadata to one quarter of memory. Whatever the rationale for this might once have been it carries now a serious adverse effect on dedup performance. Because the DDT is considered to be metadata, it is subject to the 1/4 limit. At this point, this limit is an anachronism; it can be eliminated (or rather, set to arc_c).
Então, enquanto você ainda pode definir o limite, não é mais recomendado.
Para o ZFS no Linux até 0.6. x , por exemplo no Ubuntu 16.04, o padrão parece ser 75%:
zfs_arc_meta_limit (ulong): The maximum allowed size in bytes that meta data buffers are allowed to consume in the ARC. When this limit is reached meta data buffers will be reclaimed even if the overall arc_c_max has not been reached. This value defaults to 0 which indicates that 3/4 of the ARC may be used for meta data.
Há também um ajuste se você quiser garantir que uma quantidade mínima de memória seja sempre reservada para metadados:
zfs_arc_meta_min (ulong): The minimum allowed size in bytes that meta data buffers may consume in the ARC. This value defaults to 0 which disables a floor on the amount of the ARC devoted meta data.
Em ZFS no Linux 0.7.0 , parece que há uma maneira de ajustar a quantidade de memória com um limite percentual:
zfs_arc_meta_limit_percent (ulong): Percentage of ARC buffers that can be used for meta data. See also zfs_arc_meta_limit which serves a similar purpose but has a higher priority if set to nonzero value.
Se você planeja usar uma implementação do ZFS baseada em Linux, antes de gastar muito dinheiro em hardware, considere simular seu caso de uso em uma máquina virtual. Eu recomendaria testar o pior caso de dedução (= 100% de dados aleatórios). Se você não tiver os recursos de virtualização necessários à mão, saiba que sempre é possível criar instâncias insanamente grandes na maioria dos provedores de nuvem por algumas horas por muito pouco dinheiro.
Uma última coisa a considerar: Você sempre pode ajustar o tamanho do registro do ZFS. De modo geral, pequenos tamanhos de registros renderão taxas de dedução melhores (mas obviamente exigem mais RAM para a tabela de desduplicação). Tamanhos de registro maiores resultarão em taxas de dedução piores, mas exigirão menos RAM para a tabela de desduplicação. Por exemplo: embora atualmente não utilizemos dedup em nosso armazenamento de backup do ZFS, definimos o tamanho do registro do ZFS como 1M para corresponder ao tamanho de bloco com o qual o aplicativo de backup está trabalhando.
Não sei por que eu acabei de escrever uma tese de doutorado sobre o cache de metadados do ZFS, mas espero que ajude. :)