Configurações ideais de ARC e L2ARC para aplicações de armazenamento específicas

Configurações ideais de ARC e L2ARC para aplicações de armazenamento específicas

Estou configurando um servidor que executa três pools ZFS, dois dos quais são bastante específicos para uma finalidade e sinto que as recomendações padrão simplesmente não são otimizadas para eles. A rede é facilitada por adaptadores duplos de 10 Gbit.

O Pool 1 é um grande armazenamento de arquivos, contém dados brutos de vídeo que raramente são gravados e lidos, além de backups ocasionais. Não há absolutamente nenhum sentido em armazenar em cache qualquer coisa desse pool, já que são dados de alta largura de banda que são lidos em uma varredura do início ao fim, armazenar em cache qualquer coisa a partir dele será um completo desperdício de memória. A latência não é um grande problema e a largura de banda é ampla devido aos dados altamente compressíveis. O pool é composto por 8 HDDs no modo z2, com capacidade útil de 24 TB.

Pool 2 é um armazenamento de quadros de vídeo compactados. Partes deste conteúdo são lidas frequentemente ao compor projetos de vídeo. A porção de dados usados ​​com frequência é geralmente maior do que a quantidade total de RAM que o servidor possui, há um requisito de baixa latência, mas não ultrabaixo, a largura de banda é mais importante. O pool é composto por 3 HDDs em z1, capacidade utilizável de 8 TB e um SSD NVME de 1 TB para L2ARC.

O Pool 3 é um armazenamento geral usado como armazenamento para vários sistemas de computador que inicializam e executam software a partir dele, em vez do armazenamento local. Como ele precisa atender diversas máquinas e armazenamento primário do sistema, os requisitos de latência e largura de banda aqui são os mais altos. Esse pool é principalmente lido, as gravações são limitadas ao que os sistemas clientes fazem. O pool é composto por 3 SSDs SATA no modo z1, 1 TB de capacidade utilizável.

Minha intenção de otimização tem a ver com minimizar o tamanho do ARC para os dois primeiros pools, a fim de maximizar o tamanho do ARC para o terceiro.

O pool 1 não tem nenhum benefício de armazenamento em cache, então qual é a quantidade mínima segura de ARC que posso definir para ele?

O Pool 2 pode se beneficiar do ARC, mas não vale a pena, pois o L2ARC é rápido o suficiente para esse propósito e a unidade tem 1 TB de capacidade. Idealmente, eu ficaria feliz se pudesse escapar sem usar nenhum ARC para este volume e usar o terabyte completo de L2ARC, mas parece que pelo menos algum ARC é necessário para os dados do cabeçalho L2ARC.

Portanto, considerando a capacidade L2ARC de 1 TB e o tamanho do registro do pool de 64k, 1tb/64kb * 70b me dá ~0,995gb. Isso significa que posso limitar com segurança o ARC desse pool em 1 GB? Ou talvez precise de mais?

Parece que o ARC contém tanto o cache de leitura quanto as informações para lidar com o L2ARC, então parece que o que eu preciso é de alguma opção para dar ênfase ao gerenciamento de um L2ARC maior do que me preocupar em armazenar dados reais em cache na RAM. E, se necessário, determine que quaisquer despejos de cache do ARC sejam movidos para L2ARC caso as políticas de despejo de cache não cumpram as políticas usuais de hierarquia de cache.

As recomendações gerais que li sugerem cerca de 1 GB de RAM por 1 TB de armazenamento, estou planejando 32 GB de RAM por 33 TB de armazenamento, o que estou quase certo, mas 4 ou 5 para 1 para L2ARC vs ARC, o que estou aquém de bastante. O objetivo é reduzir o ARC do pool 1 o máximo possível e reduzir o ARC do pool 2 apenas o necessário para poder utilizar todo o 1 TB de L2ARC, a fim de maximizar a RAM disponível para ARC para o pool 3 .

Responder1

Primeiro, eu realmente sugiro que você reconsidere seu layout para os pools n.2 e n.3: um espelho de 3 vias não proporcionará baixa latência nem alta largura de banda. Em vez de um disco NVMe caro de 1 TB para L2ARC (que, a propósito, é desequilibrado devido ao pequeno ARC de 32 GB), eu usaria mais discos de 7200 RPM no estilo RAID10 ou SSDs ainda mais baratos, mas confiáveis ​​(por exemplo: Samsung 850 Pro/Evo ou Crucial MX500).

No mínimo, você pode colocar todos os discos em um único pool RAID10 (com SSD L2ARC) e segmentar o pool único em virtude de vários conjuntos de dados.

Dito isso, você pode especificar como o ARC/L2ARC deve ser usado em uma base de conjunto de dados usando as opções primarycachee secondarycache:

  • zfs set primarycache=none <dataset1> ; zfs set secondarycache=none <dataset1>irá desativarqualquerCache ARC/L2ARC para o conjunto de dados. Você também pode zfs set logbias=throughput <dataset1>privilegiar a taxa de transferência em vez da latência durante as operações de gravação;
  • zfs set primarycache=metadata <dataset2>ativará o cache somente de metadados para o segundo conjunto de dados. Observe que o L2ARC é alimentado pelo ARC; isso significa que se o ARC estiver armazenando em cache apenas metadados, o mesmo será verdadeiro para L2ARC;
  • deixe a opção padrão ARC/L2ARC para o terceiro conjunto de dados.

Finalmente, você pode configurar sua instância ZFS para usar mais de (o padrão) 50% de sua RAM para ARC (procure zfs_arc_maxnopágina de manual do módulo)

informação relacionada