O impacto de uma alta proporção entre diretório e arquivo no XFS

6

Estamos criando um produto com grande probabilidade de gerar volumes XFS muito grandes, e estou tentando descobrir os gargalos de dimensionamento com maior probabilidade de execução, considerando a arquitetura.

Conforme manipulamos os arquivos, eles são colocados em diretórios nos volumes XFS. Devido ao número de arquivos que manipulamos, a contagem de arquivos está na casa das dezenas de milhões e provavelmente chegará às centenas de milhões antes do lançamento. Sabemos disso porque nosso produto atual se comporta dessa maneira, por isso é razoável esperar que o nosso próximo faça da mesma forma.

Portanto, a engenharia correta correta está em ordem.

Esta semana, os arquivos são baseados no seguinte layout aproximado:

$ProjectID/$SubProjectID/[md5sum chunked into groups of 4]/file

O que dá diretórios parecidos com:

0123456/001/0e15/a644/8972/19ac/b4b5/97f6/51d6/9a4d/file

A razão para chunking o md5sum é evitar o problema "grande pilha de arquivos / diretórios em um diretório". Devido ao md5sum chunking, significa que 1 arquivo faz com que 8 diretórios sejam criados. Isso tem impactos inode bem claros, mas não estou claro quais serão esses impactos para o XFS quando chegarmos à escala.

Quais são os impactos?

Isto é com o kernel 2.6.32, a propósito, o CentOS 6.2 no momento (isso pode mudar se necessário).

Em testes, criei o volume xfs com padrões e não estou usando nenhuma opção de montagem. Isso é para acabar com os problemas cedo. noatime é algo óbvio, já que não precisamos disso. O ajuste geral do XFS é outro problema que preciso resolver, mas agora estou preocupado com o efeito multiplicador de metadados que criamos agora.

Eu já sei qual será a melhor solução, só não sei se tenho um caso para pressionar pela mudança.

Como os md5sums são significativamente únicos nos primeiros dígitos, e os subprojetos individuais raramente excedem 5 milhões de arquivos, parece-me que precisamos apenas dos dois primeiros blocos. O que daria layouts como:

0123456/001/0e15/a644/897219acb4b597f651d69a4d/file

Um primeiro e segundo níveis completamente completos teriam 2 diretórios de primeiro nível 16 e 2 diretórios de segundo nível 16 em cada diretório de primeiro nível, para um total de 2 32 diretórios no volume.

O subprojeto hipotético de 5 milhões de arquivos teria, portanto, 2 diretórios de primeiro nível, aproximadamente 76 diretórios de segundo nível em cada e um ou dois diretórios de terceiro nível em cada um. diretório de segundo nível.

Esse layout é muito mais eficiente para metadados. Eu só não sei se vale a pena o esforço para mudar como as coisas estão indo agora.

    
por sysadmin1138 21.05.2012 / 16:50

1 resposta

3

Nenhuma recomendação importante além da que o XFS deve escalar para isso. Comecei a usar o sistema de arquivos em 2003, porque precisava trabalhar com um aplicativo que pudesse facilmente ter 800.000 arquivos em um único diretório. ext2 e ext3 rotineiramente cairiam em operações dentro desses sistemas de arquivos.

Grande parte disso depende da sua aplicação e de como ela acessa arquivos (travessia de diretórios, etc.).

Se tudo isso estiver em um servidor, eu procuraria em diários SSD externos com base na sua expectativa de um alto número de operações de metadados. Mas você conhece essa parte. Eu ainda insistiria na reestruturação usando o segundo exemplo do md5. Quer dizer, esse é um bom momento para refatorar, certo?

    
por 21.05.2012 / 17:46