¿Qué hace el caché del sistema de archivos en Windows 7?

16

El artículo Diagnóstico de por qué Git es tan lento tiene este elemento interesante:

Habilitar el caché del sistema de archivos

La capa del sistema de archivos de Windows es inherentemente diferente de Linux (para lo cual el acceso al sistema de archivos de Git está optimizado). Como solución alternativa, Git para Windows ofrece una memoria caché del sistema de archivos que acelera las operaciones en muchos casos, después de un "calentamiento" inicial. Puede activar el caché del sistema de archivos por repositorio:

git config core.fscache true

Si habilito esta opción en Git, ¿qué cambia realmente? ¿Cómo se ve el caché del sistema de archivos en Windows 7 y qué se está almacenando en caché? ¿Qué implica el "calentamiento inicial"?

Jonah Bishop
fuente

Respuestas:

10

Aquí está lo que git config --helpdice:

core.fscache
Habilita el almacenamiento en caché adicional de los datos del sistema de archivos para algunas operaciones.

Git para Windows usa esto para leer en bloque y almacenar en caché los datos lstat de directorios completos (en lugar de hacer lstat archivo por archivo).

En lugar de hacer muchas solicitudes de sistema de archivos, git solo hará una solicitud para obtener información sobre todos los archivos en el directorio.

Se puede encontrar una descripción más técnica en commit que introdujo fscache:
Win32: agregue un caché debajo de lstat y las implementaciones directas de mingw

Verificar el estado del árbol de trabajo es bastante lento en Windows, debido a la lenta emulación lstat (git llama a lstat una vez para cada archivo en el índice). Las API del sistema operativo Windows parecen ser mucho mejores para escanear el estado de directorios completos que verificar archivos individuales.

Agregue una implementación de lstat que use un caché para los datos de lstat. La memoria caché no lee todo el directorio principal y lo agrega a la memoria caché. Las llamadas lstat posteriores para el mismo directorio se atienden directamente desde la memoria caché.

También implemente opendir / readdir / closedir para que creen y usen listados de directorios en la memoria caché.

El caché no rastrea los cambios en el sistema de archivos y no se conecta a ninguna API de modificación de archivos, por lo que debe habilitarse explícitamente para las funciones de git que no modifican la copia de trabajo.

ge0rdi
fuente