Apa yang dilakukan cache sistem file pada Windows 7?

16

Artikel Diagnosis mengapa Git sangat lambat memuat item menarik ini:

Aktifkan cache sistem file

Lapisan sistem file Windows secara inheren berbeda dari Linux '(di mana akses sistem file Git dioptimalkan). Sebagai solusi, Git untuk Windows menawarkan cache sistem file yang mempercepat operasi dalam banyak kasus, setelah "pemanasan" awal. Anda dapat mengaktifkan cache sistem file per-repositori:

git config core.fscache true

Jika saya mengaktifkan opsi ini di Git, apa yang sebenarnya berubah? Seperti apa cache sistem file di Windows 7, dan apa yang sedang di-cache? Apa yang dimaksud dengan "pemanasan awal"?

Uskup Jonah
sumber

Jawaban:

10

Inilah yang git config --helpdikatakan:

core.fscache
Mengaktifkan penyimpanan data sistem file caching tambahan untuk beberapa operasi.

Git untuk Windows menggunakan ini untuk membaca-massal dan menyimpan data lstat dari seluruh direktori (alih-alih melakukan file lstat demi file).

Alih-alih melakukan banyak permintaan sistem file, git hanya akan melakukan satu permintaan untuk mendapatkan informasi tentang semua file dalam direktori.

Deskripsi teknis lebih lanjut dapat ditemukan di komit yang memperkenalkan fscache:
Win32: tambahkan cache di bawah ini mingw's lstat dan implementasi dirent

Memeriksa status pohon kerja cukup lambat pada Windows, karena emulasi lstat lambat (git memanggil lstat sekali untuk setiap file dalam indeks). API sistem operasi Windows tampaknya jauh lebih baik dalam memindai status seluruh direktori daripada memeriksa file tunggal.

Tambahkan implementasi lstat yang menggunakan cache untuk data lstat. Tembolok salah membaca seluruh direktori induk dan menambahkannya ke cache. Panggilan lstat berikutnya untuk direktori yang sama dilayani langsung dari cache.

Juga laksanakan opendir / readdir / closedir sehingga mereka membuat dan menggunakan daftar direktori di cache.

Cache tidak melacak perubahan sistem file dan tidak menyambungkan ke API file modifikasi apa pun, sehingga harus diaktifkan secara eksplisit untuk fungsi git yang tidak mengubah copy pekerjaan.

ge0rdi
sumber