优化在大型Git仓库中的Git命令执行速度
最近由于一些原因,我阅读了一些浏览器源代码。然而,由于文件数量太多,导致在终端上执行每个操作都非常缓慢,给我带来了很大的压力。看起来磁盘的输入/输出是瓶颈,通过增加文件系统的vnode数可以进行调优。这个设置对应的是内核参数kern.maxvnode。
$ sudo sysctl kern.maxvnodes=$((512*1024))
更改maxvode并比较执行时间
amendments to maxvode, and comparing execution time of $ git status. Note that the current value of kern.maxvode is
$ sysctl -a | egrep kern.maxvnodes
可以通过检查来确认。我使用的是macOS,但在BSD系统中,kern.maxvnode的默认值似乎是263168。
在之前
kern.maxvnodes的值为263168。
-
- 0.86s user 4.71s system 222% cpu 2.504 total
-
- 0.88s user 3.91s system 208% cpu 2.305 total
- 0.85s user 5.35s system 241% cpu 2.569 total
平均时间:2.45秒
之后
kern.maxvnodes = 524288 可以变成:最大节点数为524288。
-
- 0.87s user 2.92s system 184% cpu 2.053 total
-
- 0.84s user 1.39s system 152% cpu 1.463 total
- 0.87s user 1.37s system 155% cpu 1.435 total
平均值:1.64秒
平均而言,速度快了大约1秒。第一个运行较慢的原因可能是,实际上改变了磁盘I/O类的内核参数需要一些时间才能体现出效果。顺便说一句,即使将kern.maxvnodes增加到更高,也没有特别明显的变化。此外,在其他命令中也能看到改善,但$ git status特别显著。
请参阅
-
- Tuning Kernel Limits
-
- Tuning maxvnodes for better system peformance
- Improving performance of git status