É possível dar preferências de cache ao sistema de arquivos?

2

Eu tenho um diretório ( /srv/data ) com um grande número (20.000.000) com vários arquivos pequenos (4-40KB). Esses arquivos estão todos localizados em subdiretórios de /srv/data , em que a concatenação dos nomes de subdiretórios e nomes de arquivos formam UUIDs. Por exemplo, o UUID 833ac041-28c4-4ea4-9bac-81fe781732b4 seria mapeado para o caminho /srv/data/83/3a/c0/41-28c4-4ea4-9bac-81fe781732b4 . Usando dois dígitos hexadecimais para cada nível de subdiretório, há uma saída de 255. Por exemplo, existem 255 diretórios em /srv/data , cada um com até 255 subdiretórios, e cada um deles com até 255 subdiretórios.

É possível dizer ao kernel para fornecer preferências de cache para esses arquivos, ou para um subconjunto desses arquivos?

Por exemplo, "Ei Linux, armazene em cache quantos arquivos você puder de /srv/data . Se não couber tudo na memória, armazene o máximo de cache possível e não se preocupe com nenhum arquivo fora desse diretório Se você conseguir colocar tudo na memória, sinta-se à vontade para usar o que restar para armazenar os arquivos fora desse diretório. "

    
por magnus 14.11.2016 / 22:57

1 resposta

3

sysctl vm.vfs_cache_pressure=10 pode ajudar. Para acelerar o trabalho com milhares de arquivos pequenos, deixe mais dentries e inodes no cache, não no conteúdo do arquivo. A maior sobrecarga é localizar os arquivos pequenos no disco rígido, o que requer muito mais operação de leitura (mais tempo) do que ler alguns kilobytes de um local exato. Quando o kernel já conhece as posições físicas armazenadas no cache, o gerenciamento de arquivos será visivelmente mais rápido.

    
por 15.11.2016 / 04:02