Що робить кеш файлової системи в 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: додайте кеш-пам'ять нижче lstat і mrentw-реалізацій 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.