filesystem para milhões de arquivos pequenos

40

Qual sistema de arquivos Linux você escolheria para melhor velocidade no seguinte cenário:

  • cem milhões de arquivos
  • ~ 2k tamanho do arquivo em média
  • 95% read access

  • acesso bastante aleatório
  • alta simultaneidade (> 100 processos)

Nota: Os arquivos são armazenados em uma árvore hierárquica profunda para evitar diretórios grandes. Cada diretório de folhas contém cerca de mil arquivos.

Como você avaliaria isso?

    
por bene 09.05.2009 / 22:38

7 respostas

19

Aqui estão alguns resultados comparando todos os principais FSs do Linux com o bonnie ++ que você pode usar como ponto de partida .

Em termos de busca aleatória, Reiser ganha, seguido por EXT4, seguido por JFS. Não tenho certeza se isso se correlacionará exatamente com as pesquisas de diretório, mas parece que seria um indicador. Você terá que fazer seus próprios testes para isso especificamente. EXT2 bate as calças fora tudo para tempos de criação de arquivos, provavelmente devido à sua falta de um diário, ainda EXT4 bate tudo, exceto Reiser que você não pode querer usar devido ao status atual do hans reiser.

Você pode querer olhar para drives que suportam NCQ, e certifique-se de que sua instalação está configurada para usá-lo. Sob a procura pesada, deve proporcionar um aumento de velocidade.

Por último, verifique se sua máquina tem uma tonelada de memória RAM. Como os arquivos não são atualizados com freqüência, o linux acaba armazenando em cache a maioria deles para que ele tenha espaço livre. Se os seus padrões de uso estiverem corretos, isso proporcionará um enorme aumento de velocidade.

    
por 09.05.2009 / 23:37
8

Concordo com a maior parte do que Andrew disse, exceto que eu recomendaria o Reiser4 ou o antigo (mas com melhor suporte) ReiserFS . Como esses testes (e a documentação do ReiserFS) indicam, ele foi projetado para a situação que você está perguntando (grandes números de arquivos ou diretórios pequenos). Eu usei o ReiserFS no passado com o Gentoo e o Ubuntu sem problemas.

Quanto ao status do Hans Reiser, não vejo isso como sendo um problema com o código ou a estabilidade do próprio Sistema de Arquivos. O Reiser4 é patrocinado pela DARPA e pela Linspire, então, embora eu concorde que o desenvolvimento do Reiser File System é indeterminado, não acho que seja um fator decisivo se alguém deve usá-lo ou não.

    
por 10.05.2009 / 00:34
3

Eu sei que isso não é uma resposta direta à sua pergunta, mas nesses casos eu acho que um banco de dados pode ser mais adequado para isso. Arquivos pequenos podem ser armazenados em formato binário em uma tabela de banco de dados e recuperados em wil. O software que está usando esses arquivos deve ser capaz de suportar isso ...

    
por 10.05.2009 / 07:09
3

Alguém no Unix StackExchange criou um benchmark (com fonte) para testar exatamente este cenário:

P: Qual é o sistema de arquivos Linux de mais alto desempenho para armazenar muitos arquivos pequenos (HDD, não SSD)?

O melhor desempenho de leitura parece vir do ReiserFS.

    
por 04.04.2013 / 06:22
3

Na minha experiência, o ext2 leva o ext4 para fora da água para arquivos pequenos. Se você não se importa com a integridade da escrita, é ótimo. Por exemplo, o subversion cria muitos e muitos arquivos pequenos, nos quais o ext4 e outros sistemas de arquivos (XFS) se engasgam (executa uma tarefa cron que rsyncs os dados para ext4 do ext2 a cada meia hora ou virtualmente resolve o problema.)

A execução desses comandos torna o ext2 ainda mais rápido (mesmo que a maioria dessas opções torne o sistema de arquivos instável após uma falha, a menos que você execute a sincronização antes que ele falhe). Esses comandos quase não têm efeito no ext4 com arquivos pequenos.

echo 15 > /proc/sys/vm/swappiness
echo 10 > /proc/sys/vm/vfs_cache_pressure
echo 99 > /proc/sys/vm/dirty_ratio
echo 50 > /proc/sys/vm/dirty_background_ratio
echo 360000 > /proc/sys/vm/dirty_expire_centisecs
echo 360000 > /proc/sys/vm/dirty_writeback_centisecs
echo "2000" > /proc/sys/vm/vfs_cache_pressure
    
por 30.10.2015 / 16:51
1

Eu acho que ext3 (ou ext4), talvez o JFS seja uma boa solução. Eu ficaria desconfiado com o ext4 e o btrfs (os sistemas de arquivos são complicados - prepare-se com backups se você quiser usar as coisas mais recentes e recentes).

Também existem vários parâmetros que você pode ajustar durante o tempo do mkfs para ajustar o sistema de arquivos ao seu gosto.

Eu certamente recomendaria contra o XFS. Não porque é um sistema de arquivos ruim, mas a criação / exclusão é uma operação dispendiosa.

Para evitar problemas com pesquisas de diretório, use um esquema de nomenclatura inteligente, por exemplo:

<first letter of id>_<last letter of id>/<id>

ou similar, esquemas mais complicados. Isso acelerará as pesquisas de diretório e, assim, as velocidades gerais de acesso. (É um velho truque unix, voltando do V7 eu acho)

    
por 31.05.2009 / 17:07
1

A maioria dos FS irá se engasgar com mais de 65 mil arquivos em um diretório, acho que isso ainda é verdade para o ext4. Os sistemas de arquivos Reiser não têm esse limite (o pessoal da mp3.com pagou para ter certeza disso). Não tenho certeza sobre mais nada, mas esse é um dos cenários de uso para o qual o ReiserFS foi feito.

    
por 08.06.2009 / 04:38