manifest: make lru size configurable
On machines with lots of ram, it's beneficial to increase the lru size of the
manifest cache. On a large repo, configuring the lru to be size 10 can shave a
large rebase (~12 commits) down from 95s to 70s.
--- a/mercurial/localrepo.py Wed Feb 04 11:38:30 2015 -0500
+++ b/mercurial/localrepo.py Fri Jan 23 17:06:03 2015 -0800
@@ -323,6 +323,9 @@
maxchainlen = self.ui.configint('format', 'maxchainlen')
if maxchainlen is not None:
self.svfs.options['maxchainlen'] = maxchainlen
+ manifestcachesize = self.ui.configint('format', 'manifestcachesize')
+ if manifestcachesize is not None:
+ self.svfs.options['manifestcachesize'] = manifestcachesize
def _writerequirements(self):
reqfile = self.vfs("requires", "w")
--- a/mercurial/manifest.py Wed Feb 04 11:38:30 2015 -0500
+++ b/mercurial/manifest.py Fri Jan 23 17:06:03 2015 -0800
@@ -220,9 +220,14 @@
class manifest(revlog.revlog):
def __init__(self, opener):
- # we expect to deal with not more than four revs at a time,
- # during a commit --amend
- self._mancache = util.lrucachedict(4)
+ # During normal operations, we expect to deal with not more than four
+ # revs at a time (such as during commit --amend). When rebasing large
+ # stacks of commits, the number can go up, hence the config knob below.
+ cachesize = 4
+ opts = getattr(opener, 'options', None)
+ if opts is not None:
+ cachesize = opts.get('manifestcachesize', cachesize)
+ self._mancache = util.lrucachedict(cachesize)
revlog.revlog.__init__(self, opener, "00manifest.i")
def readdelta(self, node):