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

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

ElDiagnosticar por qué Git es tan lentoEl artículo tiene este interesante artículo:

Habilitar la caché del sistema de archivos

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

git config core.fscache true

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

Respuesta1

Esto es lo que git config --helpdice:

núcleo.fscache
Habilite el almacenamiento en caché adicional de los datos del sistema de archivos para algunas operaciones.

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

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

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

Verificar el estado del árbol de trabajo es bastante lento en Windows, debido a la lenta emulación de 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 para verificar archivos individuales.

Agregue una implementación de lstat que utilice un caché para los datos de lstat. Los errores de caché leen todo el directorio principal y lo agregan al caché. Las llamadas lstat posteriores para el mismo directorio se sirven directamente desde la memoria caché.

Implemente también opendir/readdir/closedir para que creen y utilicen listados de directorios en el caché.

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

información relacionada