Для чего нужен кэш файловой системы в Windows 7?

Для чего нужен кэш файловой системы в Windows 7?

TheДиагностика того, почему Git работает так медленноВ статье есть интересный момент:

Включить кэш файловой системы

Уровень файловой системы Windows по своей сути отличается от уровня Linux (для которого оптимизирован доступ к файловой системе Git). В качестве обходного пути Git для Windows предлагает кэш файловой системы, который во многих случаях ускоряет операции после первоначального «разогрева». Вы можете активировать кэш файловой системы для каждого репозитория:

git config core.fscache true

Если я включу эту опцию в Git, что на самом деле изменится? Как выглядит кэш файловой системы в Windows 7 и что кэшируется? Что подразумевает под собой "начальный разогрев"?

решение1

Вот что там git config --helpнаписано:

core.fscache
Включить дополнительное кэширование данных файловой системы для некоторых операций.

Git для Windows использует это для массового чтения и кэширования данных lstat целых каталогов (вместо выполнения lstat пофайлово).

Вместо того чтобы выполнять множество запросов к файловой системе, git выполнит только один запрос, чтобы получить информацию обо всех файлах в каталоге.

Более подробное техническое описание можно найти в коммите, который ввел fscache:
Win32: добавьте кэш ниже lstat и реализаций dirent от mingw

Проверка статуса рабочего дерева в Windows выполняется довольно медленно из-за медленной эмуляции lstat (git вызывает lstat один раз для каждого файла в индексе). API операционной системы Windows, похоже, гораздо лучше справляются со сканированием статуса целых каталогов, чем с проверкой отдельных файлов.

Добавьте реализацию lstat, которая использует кэш для данных lstat. Промахи кэша считывают весь родительский каталог и добавляют его в кэш. Последующие вызовы lstat для того же каталога обслуживаются напрямую из кэша.

Также реализуйте opendir / readdir / closedir, чтобы они создавали и использовали списки каталогов в кэше.

Кэш не отслеживает изменения файловой системы и не подключается ни к одному API для изменения файлов, поэтому его необходимо явно включить для функций git, которые не изменяют рабочую копию.

Связанный контент