usage: configure uncompressed chunk cache through resource configuration
Let's use this new concept for what it is meant for.
This provides a sizable speed up for reading multiple revision for some complexe
repositories.
### data-env-vars.name = pypy-2018-08-01-zstd-sparse-revlog
# benchmark.name = hg.perf.read-revisions
# benchmark.variants.order = reverse
memory-medium: 1.892400
memory-high: 1.722934 (-8.61%)
# benchmark.variants.order = default
memory-medium: 1.751542
memory-high: 1.589340 (-9.49%)
--- a/mercurial/configitems.toml Mon Oct 09 15:12:16 2023 +0200
+++ b/mercurial/configitems.toml Wed Nov 08 01:58:16 2023 +0100
@@ -1111,28 +1111,6 @@
[[items]]
section = "experimental"
-name = "revlog.uncompressed-cache.enabled"
-default = true
-experimental = true
-documentation = """Enable some caching of uncompressed chunk, greatly boosting
-performance at the cost of memory usage."""
-
-[[items]]
-section = "experimental"
-name = "revlog.uncompressed-cache.factor"
-default = 4
-experimental = true
-documentation = """The size of the cache compared to the largest revision seen."""
-
-[[items]]
-section = "experimental"
-name = "revlog.uncompressed-cache.count"
-default = 10000
-experimental = true
-documentation = """The number of chunk cached."""
-
-[[items]]
-section = "experimental"
name = "stream-v3"
default = false
--- a/mercurial/localrepo.py Mon Oct 09 15:12:16 2023 +0200
+++ b/mercurial/localrepo.py Wed Nov 08 01:58:16 2023 +0100
@@ -369,7 +369,7 @@
common=None,
bundlecaps=None,
remote_sidedata=None,
- **kwargs
+ **kwargs,
):
chunks = exchange.getbundlechunks(
self._repo,
@@ -378,7 +378,7 @@
common=common,
bundlecaps=bundlecaps,
remote_sidedata=remote_sidedata,
- **kwargs
+ **kwargs,
)[1]
cb = util.chunkbuffer(chunks)
@@ -1089,15 +1089,12 @@
if chunkcachesize is not None:
data_config.chunk_cache_size = chunkcachesize
- if ui.configbool(b'experimental', b'revlog.uncompressed-cache.enabled'):
- factor = ui.configint(
- b'experimental', b'revlog.uncompressed-cache.factor'
- )
- count = ui.configint(
- b'experimental', b'revlog.uncompressed-cache.count'
- )
- data_config.uncompressed_cache_factor = factor
- data_config.uncompressed_cache_count = count
+ memory_profile = scmutil.get_resource_profile(ui, b'memory')
+ if memory_profile >= scmutil.RESOURCE_MEDIUM:
+ data_config.uncompressed_cache_count = 10_000
+ data_config.uncompressed_cache_factor = 4
+ if memory_profile >= scmutil.RESOURCE_HIGH:
+ data_config.uncompressed_cache_factor = 10
delta_config.delta_both_parents = ui.configbool(
b'storage', b'revlog.optimize-delta-parent-choice'
@@ -2401,7 +2398,7 @@
data: bytes,
flags: bytes,
backgroundclose=False,
- **kwargs
+ **kwargs,
) -> int:
"""write ``data`` into ``filename`` in the working directory
@@ -2584,7 +2581,7 @@
repo.hook(
b'pretxnclose-bookmark',
throw=True,
- **pycompat.strkwargs(args)
+ **pycompat.strkwargs(args),
)
if hook.hashook(repo.ui, b'pretxnclose-phase'):
cl = repo.unfiltered().changelog
@@ -2596,7 +2593,7 @@
repo.hook(
b'pretxnclose-phase',
throw=True,
- **pycompat.strkwargs(args)
+ **pycompat.strkwargs(args),
)
repo.hook(
@@ -2671,7 +2668,7 @@
repo.hook(
b'txnclose-bookmark',
throw=False,
- **pycompat.strkwargs(args)
+ **pycompat.strkwargs(args),
)
if hook.hashook(repo.ui, b'txnclose-phase'):
@@ -2687,7 +2684,7 @@
repo.hook(
b'txnclose-phase',
throw=False,
- **pycompat.strkwargs(args)
+ **pycompat.strkwargs(args),
)
repo.hook(