虽然在大型存储库上对Git进行性能分析,但我发现与Linux相比,mac上的git状态明显慢(10倍)。 git status在存储库中的每个文件上运行lstat
,这是缓慢的原因。
是否有特定原因导致与Linux相比,Mac上的此系统调用慢得多?
首先检查您的Git版本,因为最近的Git版本已有改进(例如git add
in 2.20,git add
甚至git stash in 2.22)。
甚至upcoming 2.27 with submodules
git status
improved with Git 2.24设置适用于工作目录中包含许多文件的存储库。通过设置git status
和feature.manyFiles
,诸如“index.version=4
”之类的命令将得到改进。
[[显然,macOS 10.14 Mojave已经获得了相对于macOS 10.13的性能工作!尽管有这些改进,APFS仍在内核中花费大量CPU时间。与Linux / EXT4相比,即使对于单进程操作,内核CPU时间仍然相对较高。
虽然我无法确认APFS的源代码,但分析结果显示花在git status
上的时间过多,再加上并行处理计数减少时执行时间减少这一事实,使我得出以下结论:APFS获得了只读操作(例如readdir())期间的全局内核锁定。
换句话说,当尝试执行并行只读I / O时,APFS的速度变慢。