檔案系統快取在 Windows 7 中扮演什麼角色?

檔案系統快取在 Windows 7 中扮演什麼角色?

診斷 Git 為什麼這麼慢文章中有一個有趣的項目:

啟用檔案系統快取

Windows 的檔案系統層本質上與 Linux 不同(Git 的檔案系統存取針對 Linux 進行了最佳化)。作為一種解決方法,Git for Windows 提供了一個檔案系統緩存,可以在許多情況下在初始「預熱」後加速操作。您可以啟動每個儲存庫的檔案系統快取:

git config core.fscache true

如果我在 Git 中啟用此選項,實際上會發生什麼變化? Windows 7 中的檔案系統快取是什麼樣的? 「初步預熱」意味著什麼?

答案1

內容如下git config --help

核心.fscache
為某些操作啟用檔案系統資料的額外快取。

Windows 版 Git 使用它來批次讀取和快取整個目錄的 lstat 資料(而不是逐一執行 lstat)。

git 不會執行許多檔案系統請求,只會執行一個請求來取得目錄中所有檔案的資訊。

更多技術描述可以在引入的 commit 中找到fscache
Win32:在 mingw 的 lstat 和 dirent 實作下面新增緩存

由於 lstat 模擬速度慢(git 對索引中的每個檔案呼叫一次 lstat),在 Windows 上檢查工作樹狀態相當緩慢。 Windows 作業系統 API 似乎更擅長掃描整個目錄的狀態,而不是檢查單一檔案。

新增一個使用 lstat 資料快取的 lstat 實作。快取未命中會讀取整個父目錄並將其新增至快取。對同一目錄的後續 lstat 呼叫直接從快取提供服務。

也實作 opendir / readdir / closeir ,以便它們在快取中建立和使用目錄清單。

快取不會追蹤檔案系統更改,也不會插入任何修改檔案的 API,因此必須為不修改工作副本的 git 函數明確啟用它。

相關內容