Что делает кеш файловой системы в Windows 7?


16

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

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

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

git config core.fscache true

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

Ответы:


10

Вот что git config --helpговорит:

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

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

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

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

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.