Número de arquivos por diretório

18

Eu tenho um diretório com cerca de 100.000 arquivos pequenos (cada arquivo é de 1-3 linhas, cada arquivo é um arquivo de texto). Em tamanho, o diretório não é muito grande (< 2GB). Esses dados residem em um servidor NFS administrado profissionalmente. O servidor executa o Linux. Eu acho que o sistema de arquivos é ext3, mas não tenho certeza. Além disso, não tenho acesso root ao servidor.

Esses arquivos são a saída de um experimento científico em grande escala, sobre o qual eu não tenho controle. No entanto, tenho que analisar os resultados.

Qualquer operação / processamento de E / S neste diretório é muito, muito lento. Abrindo um arquivo (fopen em python), lendo de um arquivo aberto, fechando um arquivo, são todos muito lentos. No bash sl, du, etc. não funcionam.

A questão é:

Qual é o número máximo de arquivos em um diretório no Linux de tal forma que é prático fazer processamento, fopen, read, etc? Eu entendo que a resposta depende de muitas coisas: tipo fs, versão do kernel, versão do servidor, hardware, etc. Eu só quero uma regra geral, se possível.

    
por carlosdc 03.11.2010 / 06:46

1 resposta

21

Como você supõe, isso depende de muitas coisas, principalmente do tipo e das opções do sistema de arquivos e até certo ponto da versão do kernel. Na série ext2 / ext3 / ext4, houve uma grande melhoria quando a opção dir_index apareceu (algum tempo após o lançamento inicial do ext3): ela torna os diretórios armazenados como árvores de pesquisa (acesso logarítmico de tempo) em vez de listas lineares ( acesso linear ao tempo). Isso não é algo que você pode ver através do NFS, mas se você tiver algum contato com os administradores, você pode pedir que eles executem tune2fs -l /dev/something |grep features (talvez até convencê-los a atualizar?). Apenas o número de arquivos é importante, não seu tamanho.

Mesmo com dir_index , 100000 parece grande. O ideal é obter os autores do programa que cria os arquivos para adicionar um nível de subdiretórios. Para nenhuma degradação de desempenho, eu recomendaria um limite de aproximadamente 1000 arquivos por diretório para ext2 ou ext3 sem dir_index e 20000 com dir_index ou reiserfs. Se você não pode controlar como os arquivos são criados, mova-os para diretórios separados antes de fazer qualquer outra coisa.

    
por 03.11.2010 / 09:10