我不确定这是 ubuntu 问题还是 git 问题......
我有两台电脑
- 一个是 ubuntu VM(称为 VM PC)
- 另一台是 Ubuntu PC(称为 Build PC)
两者都运行 Ubuntu 18.04。
两者都在相同的硬件上运行(不同的物理机器 - 但相同的硬件构建)。
我有一个非常大的 repo 结构,但是当我运行时,time git submodule foreach --recursive git status
我得到的时间却大不相同:
- 构建 PC:~40 秒
- VM PC:~9 秒
如果我只是git status
在顶层执行此操作,那么在 Build PC 上我会得到~2 秒,在 VM PC 上我会得到~0.5 秒。
两者都运行相同的 git 版本 2.17.1 - 事实上,这两个 Ubuntu 使用相同的安装脚本进行设置 - 所以它们实际上非常相似。
主要区别在于 Build PC 有 3 个物理 1 NVmem 和 2xSSD:
- 256GB 操作系统 (NVM)
- 1TB sw 存储库(正在测试的存储库在此处)
- 1TB 其他存储库
而在虚拟机上,所有内容都位于虚拟机盒磁盘映像中的一个 SSD 上(大约 500GB)
我不确定从哪里开始调试这个问题所以我想我会从这个论坛开始:)
更新
我在 Build PC 上的 OS SSD 上尝试过这个,但速度仍然比较慢......所以这不是第 2/3 个 SSD 的问题,也不是它们的安装方式的问题......
更新 2
在两台不同的机器上 - 它们针对完全相同的 repo 进行测试(以相同的方式从同一个远程克隆)。Build PC 是一个较新的克隆 - 但我希望计数调试是相同的。以下是结果git count-objects -v
::
虚拟机
count: 281
size: 1184
in-pack: 1698
packs: 2
size-pack: 112961
prune-packable: 0
garbage: 0
size-garbage: 0
构建 PC
count: 0
size: 0
in-pack: 1972
packs: 1
size-pack: 112994
prune-packable: 0
garbage: 0
size-garbage: 0
值非常不同...我不确定那是什么意思。所以我删除并重新克隆了 VM PC 存储库,以查看新克隆是否会产生不同的结果。这些值如下:
count: 0
size: 0
in-pack: 1972
packs: 1
size-pack: 112994
prune-packable: 0
garbage: 0
size-garbage: 0
我重新进行了git status
测试,得到了完全相同的结果 - VM PC 的速度要快得多
更新 3
运行起来真的很奇怪:time GIT_TRACE_PERFORMANCE=1 git st
在 Build PC 上打印了大量调试信息 - 但运行速度与 VM PC 一样快(< 1s)。但如果我运行其他任何东西,则需要更长时间:
time GIT_TRACE_PERFORMANCE=1 git st
~0.5秒time GIT_TRACE_PERFORMANCE=1 git st 2> /dev/null
~2秒time git st
~2秒