[PATCH 1 of 4] manifest: make lru size configurable

Augie Fackler raf at durin42.com
Tue Feb 3 09:26:48 CST 2015


On Mon, Feb 02, 2015 at 07:19:59PM -0800, Durham Goode wrote:
> # HG changeset patch
> # User Durham Goode <durham at fb.com>
> # Date 1422061563 28800
> #      Fri Jan 23 17:06:03 2015 -0800
> # Node ID 83bf8c0ecb425fb64903d93918227c162bca111d
> # Parent  8b88870cbd1eeefaee0af053ae36728f8c0a1847
> 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.
>
> diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
> --- a/mercurial/localrepo.py
> +++ b/mercurial/localrepo.py
> @@ -323,6 +323,9 @@ class localrepository(object):
>          maxchainlen = self.ui.configint('format', 'maxchainlen')
>          if maxchainlen is not None:
>              self.svfs.options['maxchainlen'] = maxchainlen
> +        manifestcachesize = self.ui.configint('ui', 'manifestcachesize')

After looking at patch 4, I started channelling my inner marmoute, and
manifestcachesize doesn't want to be in [ui] either.

> +        if manifestcachesize is not None:
> +            self.svfs.options['manifestcachesize'] = manifestcachesize
>
>      def _writerequirements(self):
>          reqfile = self.vfs("requires", "w")
> diff --git a/mercurial/manifest.py b/mercurial/manifest.py
> --- a/mercurial/manifest.py
> +++ b/mercurial/manifest.py
> @@ -222,7 +222,11 @@ class manifest(revlog.revlog):
>      def __init__(self, opener):
>          # we expect to deal with not more than four revs at a time,

This comment appears to be out of date. Are you sure it's worth making
this a knob, rather than just doing some experimentation and changing
the fixed value?

>          # during a commit --amend
> -        self._mancache = util.lrucachedict(4)
> +        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):
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel


More information about the Mercurial-devel mailing list