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

2

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 eu não vi nenhuma melhoria.

O que DID ajudou a 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 strongmente armazenado em cache e a velocidade do disco rígido não deve interferir com o caminho percorrido.

Acho que o arquivo do diretório inicial agora está cheio de falhas depois de remover os arquivos antigos e os diretórios. * e, portanto, demora a 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 arquivos, é verdade, mas parece que ninguém se importa com diretórios.

edit: 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.

    
por rkfg 24.02.2015 / 10:13

0 respostas