Configurações ideais de ARC e L2ARC para aplicativos de armazenamento específicos

2

Estou configurando um servidor que executa 3 pools do ZFS, 2 dos quais são específicos de propósito e sinto que as recomendações padrão simplesmente não são otimizadas para eles. A rede é facilitada por adaptadores duplos de 10gbit.

O Pool 1 é um grande armazenamento de arquivos, contém dados de vídeo brutos que raramente são gravados e lidos e também backups ocasionais. Não há absolutamente nenhum ponto no armazenamento em cache de qualquer coisa daquele conjunto, pois são os dados de alta largura de banda que são lidos de uma só vez, começando a terminar, o armazenamento em cache de qualquer coisa será um completo desperdício de memória. A latência não é um grande problema e a largura de banda é grande devido a dados altamente compactáveis. A piscina é composta por 8 HDDs no modo z2, capacidade útil de 24 TB.

O Pool 2 é o armazenamento de quadros de vídeo compactados. Partes desse conteúdo são lidas com frequência durante a composição de projetos de vídeo. A parte dos dados usados com freqüência é geralmente maior do que a quantidade total de RAM que o servidor tem, há um requisito de baixa latência, mas não muito baixo, a largura de banda é mais importante. A piscina é composta por 3 HDDs em z1, capacidade utilizável de 8 TB e 1 TB NVME SSD para L2ARC.

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

Minha intenção na 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 do cache, então qual é a quantidade mínima segura de ARC que eu posso definir para ele?

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

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

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

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

    
por dtech 24.03.2018 / 19:16

1 resposta

2

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

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

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

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

Por fim, você pode definir sua instância do ZFS para usar mais de (o padrão) 50% da sua RAM para ARC (procure zfs_arc_max no página man do módulo )

    
por 24.03.2018 / 20:58