Como o número de arquivos na mesma pasta afeta o desempenho de E/S em um sistema de arquivos ext4

Como o número de arquivos na mesma pasta afeta o desempenho de E/S em um sistema de arquivos ext4

estou a usarGabinete de Quioto(um armazenamento de valores-chave) para meu projeto. O tipo específico de banco de dados que estou usando éDirDBque cria muitos arquivos em um diretório para armazenar os pares de valores-chave. O servidor em que estou executando este projeto possui sistema de arquivos ext4. O problema que estou encontrando é que a latência de E/S aumenta à medida que o número de arquivos no diretório aumenta. Além disso, quando o diretório tem muitos arquivos (digamos, mais de 1 milhão de arquivos), quando tento excluir a pasta inteira, leva uma eternidade (já mais de 5 horas e ainda em execução). Alguém pode explicar por que a latência de E/S aumenta à medida que o número de arquivos aumenta e por que rm leva uma eternidade para excluir a pasta?

Responder1

O exemplo mais simples de atrasos é que, obviamente, o tempo para listar o diretório inteiro varia de acordo com o tamanho do diretório.

Em segundo lugar, dependendo das configurações do sistema de arquivos, o ext4 usa listas vinculadas ou uma árvore b com hash para pesquisas de diretório. Você só precisa verificar como essas duas estruturas de dados funcionam para ter uma ideia das diferenças que uma configuração incorreta pode causar. A versão resumida é que as listas vinculadas são muito lentas e adequadas apenas para diretórios pequenos, enquanto os hashes são muito mais rápidos e muito mais adequados para diretórios grandes.

Processar uma lista vinculada significa passar por cada item da lista, porque, na maioria das vezes, apenas o item n-1 sabe onde está o item n, então você deve ler o item n primeiro.

O processamento de uma árvore hash envolve calcular um número na memória e pular diretamente para os detalhes com base nesse número. Embora possa ser necessário fazer isso algumas vezes para diretórios grandes, é muito mais rápido do que processar cada nó.

Enfim, se você realmente quiser entender os detalhes, toda a documentação está disponível online. Você poderia começar aqui, por exemplo:https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#Hash_Tree_Directories

informação relacionada