O que o cache do sistema de arquivos faz no Windows 7?

O que o cache do sistema de arquivos faz no Windows 7?

ODiagnosticando por que o Git é tão lentoO artigo contém este item interessante:

Habilite o cache do sistema de arquivos

A camada do sistema de arquivos do Windows é inerentemente diferente da do Linux (para o qual o acesso ao sistema de arquivos do Git é otimizado). Como solução alternativa, o Git para Windows oferece um cache do sistema de arquivos que acelera as operações em muitos casos, após um "aquecimento" inicial. Você pode ativar o cache do sistema de arquivos por repositório:

git config core.fscache true

Se eu habilitar esta opção no Git, o que realmente muda? Qual é a aparência do cache do sistema de arquivos no Windows 7 e o que está sendo armazenado em cache? O que implica o “aquecimento inicial”?

Responder1

Aqui está o que git config --helpdiz:

núcleo.fscache
Habilite o cache adicional de dados do sistema de arquivos para algumas operações.

O Git para Windows usa isso para ler em massa e armazenar em cache dados lstat de diretórios inteiros (em vez de fazer lstat arquivo por arquivo).

Em vez de fazer muitas solicitações ao sistema de arquivos, o git fará apenas uma solicitação para obter informações sobre todos os arquivos no diretório.

Uma descrição mais técnica pode ser encontrada no commit que introduziu fscache:
Win32: adicione um cache abaixo das implementações lstat e dirent do mingw

A verificação do status da árvore de trabalho é bastante lenta no Windows, devido à lenta emulação do lstat (o git chama o lstat uma vez para cada arquivo no índice). As APIs do sistema operacional Windows parecem ser muito melhores na verificação do status de diretórios inteiros do que na verificação de arquivos únicos.

Adicione uma implementação lstat que use um cache para dados lstat. As falhas de cache leem todo o diretório pai e o adicionam ao cache. As chamadas lstat subsequentes para o mesmo diretório são atendidas diretamente do cache.

Implemente também opendir / readdir / closedir para que eles criem e usem listagens de diretórios no cache.

O cache não rastreia alterações no sistema de arquivos e não se conecta a nenhuma API de modificação de arquivo, portanto, deve ser explicitamente habilitado para funções git que não modificam a cópia de trabalho.

informação relacionada