文件系统缓存在 Windows 7 中有什么作用?

Jon*_*hop 18 windows-7 filesystems git cache

诊断为什么Git是如此缓慢的文章中有这样有趣的项目:

启用文件系统缓存

Windows 的文件系统层本质上不同于 Linux(为此优化了 Git 的文件系统访问)。作为一种解决方法,Git for Windows 提供了一个文件系统缓存,在初始“热身”之后,它可以在许多情况下加速操作。您可以激活每个存储库的文件系统缓存:

git config core.fscache true

如果我在 Git 中启用此选项,实际上会发生什么变化?Windows 7 中的文件系统缓存是什么样的,正在缓存什么?“初始热身”意味着什么?

ge0*_*rdi 12

这是什么git config --help说:

core.fscache
为某些操作启用文件系统数据的附加缓存。

Git for Windows 使用它来批量读取和缓存整个目录的 lstat 数据(而不是逐个文件执行 lstat )。

git 不会做很多文件系统请求,只会做一个请求来获取目录中所有文件的信息。

更多技术描述可以在引入的提交中找到fscache
Win32:在 mingw 的 lstat 和 dirent 实现下面添加缓存

由于 lstat 模拟缓慢(git 为索引中的每个文件调用 lstat 一次),在 Windows 上检查工作树状态非常慢。Windows 操作系统 API 在扫描整个目录的状态方面似乎比检查单个文件要好得多。

添加一个 lstat 实现,它使用 lstat 数据的缓存。缓存未命中读取整个父目录并将其添加到缓存中。对同一目录的后续 lstat 调用直接从缓存中提供。

还要实现 opendir / readdir / closedir 以便它们在缓存中创建和使用目录列表。

缓存不会跟踪文件系统更改,也不会插入任何修改文件的 API,因此必须为不修改工作副本的 git 函数显式启用它。