Questão Como desfragmentar ou minimizar um “arquivo de diretório” no ext4?


Eu tenho um diretório home antigo no HDD. Muitos arquivos foram criados e removidos e agora o tamanho de / home / username é 995328 bytes. Por favor note, quero dizer o tamanho do "arquivo de diretório" (todo diretório é um arquivo especial que contém links para outros arquivos e diretórios), não o tamanho total de arquivos dentro. Em outras palavras, esse é o tamanho de "." (ponto) diretório que você vê na saída ls -la.

Meu diretório home tem apenas 244 arquivos + dirs dentro. Em outro PC eu tenho 203 arquivos + dirs no diretório inicial, e o "." dir tem apenas 4096 bytes. Isso pode não ser preocupante, mas notei uma grande degradação de performance quando joguei Natural Selection 2. Em particular, ele mantém shaders e mods compilados em "~ / .config / Natural Selection 2" e então cada vez que ele acessa um arquivo lá, ele tem para percorrer este enorme diretório inicial ~ 1 Mb.

Para acelerar as coisas, mudei seu diretório para / opt / confs (minha partição raiz está em SSD, o jogo em si também reside lá, em / opt) e ajudou bastante. No entanto, outros jogadores ainda carregados antes de mim, eles estão no Windows e SSD também. Eu também tentei montar --bind esse diretório de "/ opt / confs / Natural Selection 2" para "~ / .config / Natural Selection 2", mas não vi nenhuma melhoria.

O que DID ajudou é criar um novo usuário em / opt / home (ou seja, no SSD) e usá-lo para iniciar o jogo, portanto / home / username não é mais usado. Eu tive uma melhoria enorme, como duas vezes, 37 segundos em vez de 1 minuto e 15 segundos. Eu tenho 32 Gb de RAM (apenas 10-12 estão ocupados a qualquer momento), então tudo isso deve ser fortemente armazenado em cache e a velocidade do disco rígido não deve interferir com o caminho percorrido.

Eu acho que o arquivo de diretório inicial agora está cheio de falhas depois de remover arquivos antigos e diretórios. * E, portanto, é lento para procurar. Não consegui encontrar uma maneira de torná-lo menor e mais rápido do que criar um novo diretório e mover os arquivos e diretórios para ele, remover o diretório home antigo, agora vazio, e renomeá-lo. Mas isso é uma maneira hacky e se isso é realmente um problema, deve haver uma maneira de lidar com diretórios esparsos. Especialmente quando todos dizem que os sistemas de arquivos ext não precisam de desfragmentação. Bem, para os arquivos é verdade, mas parece que ninguém se importa com diretórios.

editar: esqueci de testar outros casos para descartar outras possibilidades. Mudei o diretório home desse usuário para / home (que está no HDD) e o diretório de configuração do jogo para / opt / confs (SSD). Então agora o caminho é como / (SSD) / home / (HDD) / newuser/.config/ (ainda HDD) Seleção Natural 2 (link simbólico para / opt / confs / Seleção Natural 2, SSD). Ainda carrega muito rápido, nenhuma diferença com o caminho SSD puro (43 segundos). Então fiz uma medição de controle: movi o diretório home do novo usuário para o homedir de meu usuário principal, então o caminho é / home / rkfg / newuser, onde / home / rkfg é o diretório fragmentado problemático. O diretório de configuração do jogo ainda é vinculado a SSD, todo o resto é o mesmo. E os longos tempos de carregamento estão de volta: 1 minuto e 39 segundos! Agora ele tem que atravessar o arquivo de diretório grande e como o jogo faz isso dezenas de vezes por segundo, tudo isso se soma. Sim, não é muito otimizado nesta parte, espero que melhore. Mas o ponto é: arquivos de diretório enormes e fragmentados produzem tempos de busca maiores. E o cache não ajuda muito apesar de todas as otimizações.


2


origem


Qual o tamanho ls -ld ~ relatório, então? (Note também que os diretórios ext4 são HTrees, o SO não precisa fazer uma varredura linear de todo o diretório apenas para encontrar um arquivo. E sim, isso é muito armazenado em cache; o cache dentry é uma das partes mais otimizadas do kernel. ) - grawity
> ls -ld ~  drwxrwx---+ 145 rkfg rkfg 995328 Feb 24 12:42 /home/rkfg Eu tentei recriar essa situação através da criação de milhares de arquivos (com toque) em um novo diretório e, em seguida, removê-los, o tamanho do diretório não fica menor após a remoção, mas o desempenho parece não ser afetado. No entanto, o arquivo de diretório não é fragmentado (1 extensão), enquanto o diretório inicial possui 46 extensões (conforme relatado por filefrag). - rkfg


Respostas: