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

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

诊断 Git 速度慢的原因这篇文章中有这样一个有趣的内容:

启用文件系统缓存

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

git config core.fscache true

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

答案1

以下是内容git config --help

核心.fscache
为某些操作启用文件系统数据的额外缓存。

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

git 不会发出许多文件系统请求,而是只发出一个请求来获取有关目录中所有文件的信息。

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

由于 lstat 模拟速度较慢(git 对索引中的每个文件调用一次 lstat),因此在 Windows 上检查工作树状态非常慢。Windows 操作系统 API 似乎更擅长扫描整个目录的状态,而不是检查单个文件。

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

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

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

相关内容