【发布时间】:2010-11-03 09:52:43
【问题描述】:
我很惊讶将任何特定分支的非常小的更改合并到主干需要多长时间; 1-2 分钟将几行已更改的文本合并到一个仅 2k 长的文本文件中。
如果可能的话,我希望能够加快合并速度,但不知道从哪里开始。我做了一个快速的谷歌,缓慢合并的可能原因似乎包括以下任何和所有:-
- 大型存储库(磁盘大小和修订数量)。
- 大型源代码树(显然 SVN 必须沿着树向下爬才能得出更改)
- SVN服务器/客户端版本
- 非常大(几 MB)的文件(我们没有非常大的单个文件,所以我怀疑这会影响我们)
我想我真的很想知道如何找出上述哪些点使合并变得如此缓慢。
现在我不知道是在客户端上工作还是在服务器上工作最耗时(我怀疑是客户端,因为服务器上的 CPU 使用率并不高)。我确实认为可能是大量的合并信息已经积累了超过 100 次合并,但我做了一个测试,我从几个分支中删除了所有合并信息,然后进行了合并,发现同样的缓慢。
所以我想问的是:- * 如何诊断/分析 SVN 活动? * 根据以下信息,是否有明显的原因会导致性能不佳?
谢谢
克里斯
以下是关于我们的 SVN 设置的一些事实/数据
- 我们的 SVN 存储库有大约 32000 个修订版。
- 磁盘上的存储库大小:8.3GB
- 我们的每个开发分支都有大约 1400 个版本化文件夹(19,000 个版本化文件)
- SVN 服务器:1.6.6 (r40053)(托管在 Apache 中,在 Ubunto Lucid Lynx 上运行)
- 我在 Win7 上使用 tortoise 1.6.9(尽管团队的其他成员使用 SmartSVN,他们报告的速度相同)。
编辑
值得补充的是,当我们分支/合并时,我们从主干分支并始终将整个分支合并回主干。所以所有的合并信息都在主干(和分支)文件夹中。
结论
就我而言,磁盘访问似乎是合并过程中的瓶颈 - 当我将源树从 HDD 移动到 SSD 时,相同的合并从 50 +/- 5 秒变为 7 +/ - 1 秒。
在合并期间在进程资源管理器中观察乌龟 SVN 进程非常有说服力:在我的 HDD 上进行合并时,I/O 字节在大部分时间都在 500kb/s 和 3Mb/s 之间。在 SSD 上,I/O 字节高达 10-20Mb/s。 [相当令人困惑的是,我的 HDD 上的一些合并速度与我的 SSD 上的速度相当(并且 I/O 字节同样高) - 在这些情况下,我假设正在读取的许多文件已经在 Windows 文件缓存中].
我发现以下都提高了合并速度
- 从 & 合并到源层次结构更深的文件夹:这不是我们在“现实生活”中的真正选择,因为如果不记录在“主干级”文件夹中,合并跟踪几乎是不可能的,但确实显示合并小得多的树会使这个过程更快。
- 减小要合并的工作集的大小有助于(前提是您使用“工作集”深度合并选项而不是完全递归) - 因此只需删除文件夹(从我在主干下的工作集中)即可提高速度.
【问题讨论】:
-
5.00MB transferred in 29 minutes and 32 seconds.... 所以是的
标签: performance svn merge