Windows 7のファイルシステムキャッシュは何をしますか?


16

Gitはとても遅いですなぜ診断の記事はそれでこの興味深い項目があります。

ファイルシステムキャッシュを有効にする

Windowsのファイルシステム層は、本質的にLinux(Gitのファイルシステムアクセスが最適化されている)とは異なります。回避策として、Git for Windowsは、多くの場合、最初の「ウォームアップ」後に操作を高速化するファイルシステムキャッシュを提供します。リポジトリごとにファイルシステムキャッシュをアクティブにできます。

git config core.fscache true

Gitでこのオプションを有効にすると、実際に何が変わるのですか?Windows 7のファイルシステムキャッシュはどのように見えますか?また、キャッシュされているものは何ですか?「初期ウォームアップ」には何が必要ですか?

回答:


10

以下がそのgit config --help意味です:

core.fscache
一部の操作でファイルシステムデータの追加キャッシュを有効にします。

Git for Windowsは、これを使用して、ファイルごとにlstatを実行する代わりに、ディレクトリ全体のlstatデータを一括読み取りおよびキャッシュします。

多くのファイルシステム要求を行う代わりに、gitはディレクトリ内のすべてのファイルに関する情報を取得するために1つの要求のみを行います。

より技術的な説明は、導入されたコミットで見つけることができますfscache
Win32:mingwのlstatおよびdirent実装の下にキャッシュを追加します

Windowsでは、lstatエミュレーションが遅いため、作業ツリーのステータスのチェックは非常に遅くなります(gitはインデックス内の各ファイルに対して1回ずつlstatを呼び出します)。WindowsオペレーティングシステムAPIは、単一のファイルをチェックするよりもディレクトリ全体のステータスをスキャンする方がはるかに優れているようです。

lstatデータにキャッシュを使用するlstat実装を追加します。キャッシュミスは親ディレクトリ全体を読み取り、キャッシュに追加します。同じディレクトリに対する後続のlstat呼び出しは、キャッシュから直接提供されます。

また、opendir / readdir / closedirを実装して、キャッシュにディレクトリリストを作成して使用するようにします。

キャッシュはファイルシステムの変更を追跡せず、ファイルAPIの変更にプラグインしないため、作業コピーを変更しないgit関数に対して明示的に有効にする必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.