EXT4 desempenho tornou-se muito ruim no sistema com muitos pequenos arquivos

10

Eu tenho um pequeno dispositivo incorporado que tem apenas 128 MB de RAM

anexado a este dispositivo é um disco rígido USB 2TB

Fiquei muito feliz com o desempenho do dispositivo até recentemente, quando o número de arquivos ultrapassou um limite da capacidade do disco ultrapassou um limite (não sei ao certo qual)

no disco há muitos arquivos pequenos, devido à natureza dos arquivos do aplicativo de gravação serem organizados de uma maneira muito equilibrada - nenhum diretório de nó folha tem mais de 200 arquivos e há pouco mais de 800.000 arquivos.

Espero ter uma pista sobre algo para investigar. O desempenho do disco caiu significativamente, o dispositivo estava funcionando muito bem e, em seguida, todo o desempenho repentino caiu como uma rocha.

Minha suposição é que a estrutura organizacional que eu escolhi no disco para meus arquivos de alguma forma prejudicou a capacidade dos caches de inode de permanecer zippy.

como um experimento, eu desmontei o disco (liberando caches, verificado com livre). Então, a partir de um prompt de comando, naveguei profundamente na estrutura do diretório. Todos disseram que este diretório (e seus filhos) tinha apenas cerca de 3200 arquivos contidos abaixo dele, e neste momento 'livre' mostrou > 117MB de memória livre

neste momento, digitei o comando 'find' seguido de 'free'

'find' mostrou cerca de 3000 arquivos, mas o uso da memória passou de ~ 117MB para ~ 2MB

Eu entendo os balanços de cache versus memória livre, e como o kernel considera uma página vazia como uma página ruim - no entanto, 115 MB de conteúdo em cache de um diretório de 3.000 arquivos aponta para uma lacuna séria no meu entendimento. Eu espero que alguém me ajude a entender o que está acontecendo

posso supor que uma árvore balanceada é o caminho a percorrer para ter muitos arquivos?

    
por stuck 25.03.2013 / 15:55

1 resposta

9

Muito boa descrição do problema.

Com base no que você disse, acho que o que você está vendo é o uso de placas em alta. Uma boa experiência seria executar um cat /proc/meminfo e cat /proc/slabinfo em um atraso de 3 segundos enquanto você mergulha na hierarquia fs e descobre os 3000 arquivos. O que essencialmente está acontecendo é que o kernel irá percorrer a estrutura fs e varrer os arquivos individuais e seus inodes e todos eles serão armazenados na memória. Se você verificar /proc/slabinfo , verá um objeto chamado ext4_inode_cache , que informa quanta memória cada inode levará. Multiplique isso pelo número de objetos (obj_size * no_obj) e você terá a quantidade de memória usada pelo objeto. Quanto mais fundo você entrar na hierarquia fs, mais memória será consumida até que o sistema atinja a marca d'água alta da zona de memória. Nesse ponto, o kernel começará a recuperar.

Se você digitar meminfo e slabinfo, receberá os detalhes que procura. Se você quiser que eu olhe, pastebin;)

    
por 25.03.2013 / 18:14