Cosa fa la cache del filesystem in Windows 7?


16

La diagnosi del perché l'articolo Git è così lento contiene questo interessante articolo:

Abilita la cache del filesystem

Il livello del filesystem di Windows è intrinsecamente diverso da Linux (per cui è ottimizzato l'accesso al filesystem di Git). Come soluzione alternativa, Git per Windows offre una cache del filesystem che accelera le operazioni in molti casi, dopo un "riscaldamento" iniziale. È possibile attivare la cache del filesystem per repository:

git config core.fscache true

Se abilito questa opzione in Git, cosa cambia effettivamente? Che aspetto ha la cache del filesystem in Windows 7 e che cosa viene memorizzato nella cache? Cosa comporta il "riscaldamento iniziale"?

Risposte:


10

Ecco cosa git config --helpdice:

core.fscache
Abilita la memorizzazione nella cache aggiuntiva dei dati del file system per alcune operazioni.

Git per Windows lo utilizza per leggere in blocco e memorizzare nella cache i dati lstat di intere directory (invece di eseguire lstat file per file).

Invece di fare molte richieste di file system, git farà una sola richiesta per ottenere informazioni su tutti i file nella directory.

Una descrizione più tecnica può essere trovata in commit che ha introdotto fscache:
Win32: aggiungi una cache sotto le implementazioni dirst e mstw di mingw

Il controllo dello stato dell'albero di lavoro è piuttosto lento su Windows, a causa della lenta emulazione di lstat (git chiama lstat una volta per ogni file nell'indice). Le API del sistema operativo Windows sembrano essere molto meglio nella scansione dello stato di intere directory piuttosto che nel controllo di singoli file.

Aggiungi un'implementazione di lstat che utilizza una cache per i dati di lstat. I mancati cache leggono l'intera directory principale e la aggiungono alla cache. Le successive chiamate a lstat per la stessa directory vengono servite direttamente dalla cache.

Implementare anche opendir / readdir / closedir in modo che creino e utilizzino elenchi di directory nella cache.

La cache non tiene traccia delle modifiche al file system e non si collega a nessuna API di modifica dei file, quindi deve essere esplicitamente abilitata per le funzioni git che non modificano la copia di lavoro.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.