[PATCH 01 of 10 V2] revlog: limit base to rev size ratio to 500 instead of 50

Boris Feld boris.feld at octobus.net
Fri Dec 21 11:47:04 UTC 2018


# HG changeset patch
# User Boris Feld <boris.feld at octobus.net>
# Date 1545213265 -3600
#      Wed Dec 19 10:54:25 2018 +0100
# Node ID d51d82a46d9545235be727b875deeffd9de324e9
# Parent  e88ced97151db99196c16b3db31a19daf6df5d5d
# EXP-Topic sparse-revlog
# Available At https://bitbucket.org/octobus/mercurial-devel/
#              hg pull https://bitbucket.org/octobus/mercurial-devel/ -r d51d82a46d95
revlog: limit base to rev size ratio to 500 instead of 50

While a value of 50 provided large speedup in some case (400s → 7s) it also
creates a slow down for a whole class of revision we are seeing in a private
repository (0.1s → 3s). A value of 500 makes them disappear improving the
total runtime (the slower revision still improve significantly (400s → 21s)).

We need to run a wider array of tests on various repositories to see the
effect on speed and size of different values for this acceptable constant.
However, in the meantime, it seems safer to move back to a less impactful
value.

diff --git a/mercurial/revlogutils/deltas.py b/mercurial/revlogutils/deltas.py
--- a/mercurial/revlogutils/deltas.py
+++ b/mercurial/revlogutils/deltas.py
@@ -604,7 +604,7 @@ def isgooddeltainfo(revlog, deltainfo, r
 # If a revision's full text is that much bigger than a base candidate full
 # text's, it is very unlikely that it will produce a valid delta. We no longer
 # consider these candidates.
-LIMIT_BASE2TEXT = 50
+LIMIT_BASE2TEXT = 500
 
 def _candidategroups(revlog, textlen, p1, p2, cachedelta):
     """Provides group of revision to be tested as delta base


More information about the Mercurial-devel mailing list