Was macht der Dateisystem-Cache in Windows 7?

16

Der Artikel Diagnose, warum Git so langsam ist, enthält den folgenden interessanten Artikel:

Aktivieren Sie den Dateisystem-Cache

Die Dateisystemschicht von Windows unterscheidet sich grundsätzlich von der von Linux (für das der Zugriff auf das Dateisystem von Git optimiert ist). Um dieses Problem zu umgehen, bietet Git für Windows einen Dateisystem-Cache an, der in vielen Fällen nach einem anfänglichen "Aufwärmen" Vorgänge beschleunigt. Sie können den Dateisystem-Cache pro Repository aktivieren:

git config core.fscache true

Was ändert sich tatsächlich, wenn ich diese Option in Git aktiviere? Wie sieht der Dateisystem-Cache in Windows 7 aus und was wird zwischengespeichert? Was beinhaltet das "anfängliche Aufwärmen"?

Jonah Bishop
quelle

Antworten:

10

Hier ist was git config --helpsagt:

core.fscache Aktivieren Sie
für einige Vorgänge die zusätzliche Zwischenspeicherung von Dateisystemdaten.

Git für Windows verwendet dies, um lstat-Daten ganzer Verzeichnisse in großen Mengen zu lesen und zwischenzuspeichern (anstatt lstat Datei für Datei auszuführen).

Anstatt viele Dateisystemanforderungen auszuführen, wird git nur eine Anforderung ausführen, um Informationen zu allen Dateien im Verzeichnis abzurufen.

Weitere technische Beschreibungen finden Sie in Commit fscache:
Win32: Fügen Sie einen Cache unter den lstat- und dirent-Implementierungen von mingw hinzu

Das Überprüfen des Status des Arbeitsbaums unter Windows ist aufgrund der langsamen lstat-Emulation recht langsam (git ruft lstat für jede Datei im Index einmal auf). Windows-Betriebssystem-APIs scheinen den Status ganzer Verzeichnisse viel besser zu prüfen als einzelne Dateien zu überprüfen.

Fügen Sie eine lstat-Implementierung hinzu, die einen Cache für lstat-Daten verwendet. Cachefehler lesen das gesamte übergeordnete Verzeichnis und fügen es dem Cache hinzu. Nachfolgende lstat-Aufrufe für dasselbe Verzeichnis werden direkt aus dem Cache bedient.

Implementieren Sie auch opendir / readdir / closedir, damit Verzeichnislisten im Cache erstellt und verwendet werden.

Der Cache protokolliert keine Dateisystemänderungen und stellt keine Verbindung zu modifizierenden Datei-APIs her. Daher muss er explizit für Git-Funktionen aktiviert werden, die die Arbeitskopie nicht modifizieren.

ge0rdi
quelle