# HG changeset patch # User Joerg Sonnenberger # Date 1603237689 -7200 # Node ID 8719a5b684199bcdfb8e5137573e91c9f5a8a62b # Parent 6620caf427ecf0b8b1dbc77aff9b498c15857a08 revlog: use LRU for the chain cache For a large repository, this reduces the number of filelog instances and associated data a lot. For a 1% speed penalty, it reduces peak RSS by 20% for the full NetBSD test repository. Differential Revision: https://phab.mercurial-scm.org/D9235 diff -r 6620caf427ec -r 8719a5b68419 mercurial/revlog.py --- a/mercurial/revlog.py Wed Oct 14 08:38:58 2020 -0700 +++ b/mercurial/revlog.py Wed Oct 21 01:48:09 2020 +0200 @@ -668,7 +668,7 @@ if not self._chunkcache: self._chunkclear() # revnum -> (chain-length, sum-delta-length) - self._chaininfocache = {} + self._chaininfocache = util.lrucachedict(500) # revlog header -> revlog compressor self._decompressors = {} @@ -2550,7 +2550,7 @@ # then reset internal state in memory to forget those revisions self._revisioncache = None - self._chaininfocache = {} + self._chaininfocache = util.lrucachedict(500) self._chunkclear() del self.index[rev:-1]