Eu tenho um diretório com cerca de 100000 arquivos pequenos (cada arquivo é de 1 a 3 linhas, cada arquivo é um arquivo de texto). Em tamanho, o diretório não é muito grande (<2 GB). 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 o resultado de um experimento científico em larga escala, sobre o qual não tenho controle. No entanto, tenho que analisar os resultados.
Qualquer operação / processamento de E / S neste diretório é muito, muito lenta. Abrir um arquivo (aberto em python), ler de um arquivo aberto, fechar um arquivo, são todos muito lentos. No bash ls, du, etc. não funcionam.
A questão é:
Qual é o número máximo de arquivos em um diretório no Linux de forma que seja prático processar, abrir, ler, etc? 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.
fonte
Respostas:
Como você supõe, depende de muitas coisas, principalmente do tipo e das opções do sistema de arquivos e, até certo ponto, da versão do kernel. Nas séries ext2 / ext3 / ext4, houve uma grande melhoria quando a
dir_index
opção apareceu (algum tempo após o lançamento inicial do ext3): faz com que os diretórios sejam armazenados como árvores de pesquisa (acesso logarítmico de tempo) em vez de listas lineares (acesso linear de tempo ) Isso não é algo que você pode ver no NFS, mas se você tiver algum contato com os administradores, poderá solicitar que eles executemtune2fs -l /dev/something |grep features
(talvez até convencê-los a atualizar?). Apenas o número de arquivos é importante, não o tamanho.Mesmo com
dir_index
, 100000 parece grande. Idealmente, peça aos autores do programa que cria os arquivos para adicionar um nível de subdiretórios. Para nenhuma degradação do desempenho, eu recomendaria um limite de cerca de 1000 arquivos por diretório para ext2 ou ext3 semdir_index
e 20000 comdir_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.fonte