16

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

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

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

git config core.fscache true

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

1 ответ1

9

Вот что говорит 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, которые не изменяют рабочую копию.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .