it-swarm-pt.tech

sistema de arquivos para milhões de arquivos pequenos

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% de acesso de leitura
  • 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 folha contém cerca de mil arquivos.

Como você avaliaria isso?

44
bene

Aqui estão alguns resultados comparando todas as principais FSes do Linux com o bonnie ++ que você pode usar como ponto de partida.

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

Você pode procurar em unidades compatíveis com o NCQ e garantir que sua instalação esteja configurada para usá-lo. Sob busca pesada, deve fornecer um aumento de velocidade.

Por fim, verifique se sua máquina possui uma tonelada de RAM. Como os arquivos não são atualizados com frequência, o linux acabará armazenando a maioria deles em cache, se houver espaço livre. Se os seus padrões de uso estiverem corretos, isso proporcionará um enorme aumento de velocidade.

20
Andrew Cholakian

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

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

8
Mike

Sei que essa não é uma resposta direta à sua pergunta, mas nesses casos acho que um banco de dados pode ser mais adequado para hospedar 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 ...

4
Jeroen Landheer

Alguém no StackExchange do Unix criou um benchmark (com origem) para testar apenas 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.

3
thenickdude

Na minha experiência, o ext2 sopra o ext4 para fora da água para arquivos pequenos. Se você não se importa com a integridade da gravação, é ótimo. Por exemplo, o Subversion cria muitos, muitos arquivos pequenos, nos quais o ext4 e outros sistemas de arquivos (XFS) se engasgam (execute uma tarefa cron que sincroniza os dados para o ext4 a partir do ext2 a cada meia hora, praticamente resolvendo o problema.)

A execução desses comandos torna o ext2 ainda mais rápido (embora 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 de travar). 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
3
Jason Hall

Eu acho que ext3 (ou ext4), talvez o JFS seja uma boa solução. Eu ficaria cauteloso com ext4 e btrfs (os sistemas de arquivos são complicados - esteja preparado com backups se você quiser usar as coisas mais recentes e mais 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 XFS. Não porque é um sistema de arquivos ruim, mas a criação/exclusão é uma operação cara.


Para evitar problemas com pesquisas de diretório, use um esquema de nomeação inteligente, por exemplo:

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

ou similares, esquemas mais complicados. Isso irá acelerar as pesquisas no diretório e, portanto, as velocidades gerais de acesso. (É um velho truque unix, de volta à V7, eu acho)

1
p_l

A maioria FS irá sufocar com mais de 65K arquivos em um diretório, acho que ainda é verdade para o ext4. Os sistemas de arquivos Reiser não têm esse limite (o pessoal do mp3.com pagou para fazer Não tenho certeza de mais nada, mas esse é um dos cenários de uso para os quais o ReiserFS foi criado.

1
Ronald Pottol