revlog: increase I/O bound to 4x the amount of data consumed
authorSiddharth Agarwal <sid0@fb.com>
Tue, 11 Nov 2014 20:08:19 -0800
changeset 23288 2b9bc7963504
parent 23287 426d7f901789
child 23289 ae5d0a22ee7e
revlog: increase I/O bound to 4x the amount of data consumed This doesn't affect normal clones since they'd be bound by the CPU bound below anyway -- it does, however, improve generaldelta clones significantly. This also results in better deltaing for generaldelta clones -- in generaldelta clones, we calculate deltas with respect to the closest base if it has a higher revision number than either parent. If the base is on a significantly different branch, this can result in pointlessly massive deltas. This reduces the number of bases and hence the number of bad deltas. Empirically, for a highly branchy repository, this resulted in an improvement of around 15% to manifest size.
mercurial/revlog.py
--- a/mercurial/revlog.py	Tue Nov 11 20:01:19 2014 -0800
+++ b/mercurial/revlog.py	Tue Nov 11 20:08:19 2014 -0800
@@ -1267,7 +1267,7 @@
         #   the amount of I/O we need to do.
         # - 'compresseddeltalen' is the sum of the total size of deltas we need
         #   to apply -- bounding it limits the amount of CPU we consume.
-        if (d is None or dist > textlen * 2 or l > textlen or
+        if (d is None or dist > textlen * 4 or l > textlen or
             compresseddeltalen > textlen * 2 or
             (self._maxchainlen and chainlen > self._maxchainlen)):
             text = buildtext()