Co robi pamięć podręczna systemu plików w systemie Windows 7?

16

Artykuł Diagnozowanie, dlaczego Git jest tak wolny, zawiera ten interesujący przedmiot:

Włącz pamięć podręczną systemu plików

„Warstwa systemu plików Windows z natury różni się od Linuksa” (dla którego dostęp do systemu plików Gita jest zoptymalizowany). Aby obejść ten problem, Git dla Windows oferuje pamięć podręczną systemu plików, która w wielu przypadkach przyspiesza operacje po początkowej „rozgrzewce”. Możesz aktywować pamięć podręczną systemu plików dla repozytorium:

git config core.fscache true

Jeśli włączę tę opcję w Git, co się właściwie zmieni? Jak wygląda pamięć podręczna systemu plików w systemie Windows 7 i co jest buforowane? Co oznacza „wstępne rozgrzanie”?

Jonasz Biskup
źródło

Odpowiedzi:

10

Oto, co git config --helpmówi:

core.fscache
Włącz dodatkowe buforowanie danych systemu plików dla niektórych operacji.

Git dla Windows używa tego do masowego odczytu i buforowania danych lstat całych katalogów (zamiast wykonywania pliku lstat plik po pliku).

Zamiast wykonywać wiele żądań systemu plików, git wykona tylko jedno żądanie, aby uzyskać informacje o wszystkich plikach w katalogu.

Więcej opisu technicznego można znaleźć w zatwierdzeniu, które wprowadziło fscache:
Win32: dodaj pamięć podręczną poniżej implementacji lstat i dirent mingw

Sprawdzanie stanu drzewa roboczego jest dość wolne w systemie Windows z powodu powolnej emulacji lstat (git wywołuje lstat jeden raz dla każdego pliku w indeksie). Interfejsy API systemu operacyjnego Windows wydają się być znacznie lepsze w skanowaniu statusu całych katalogów niż sprawdzanie pojedynczych plików.

Dodaj implementację lstat, która używa pamięci podręcznej dla danych lstat. Pamięć podręczna pomija odczyt całego katalogu nadrzędnego i dodaje go do pamięci podręcznej. Kolejne wywołania lstat dla tego samego katalogu są obsługiwane bezpośrednio z pamięci podręcznej.

Zaimplementuj także opendir / readdir / closedir, aby tworzyły i korzystały z list katalogów w pamięci podręcznej.

Pamięć podręczna nie śledzi zmian w systemie plików i nie podłącza się do żadnych modyfikujących interfejsów API plików, dlatego musi być jawnie włączona dla funkcji git, które nie modyfikują kopii roboczej.

ge0rdi
źródło