Skip to content
Snippets Groups Projects
Commit 3e5cfc11 authored by Pierre-Yves David's avatar Pierre-Yves David :octopus:
Browse files

hg-perf: add a benchmark for perf::delta-find

parent 4294bc73
No related branches found
No related tags found
1 merge request!16perf-delta-find
[meta]
format="0"
name="perf-delta-find"
method="mercurial-perf-extension"
[run]
copy-data-env = false
[hg-perf-ext]
command="perf::delta-find"
cwd="DATA-VARS:mercurial.main-repo-path"
[hg-perf-ext.variants.dimensions.rev.manifest-snapshot-any-tries-a]
args=["--manifest", "DATA-VARS:mercurial.revlog.delta-find.manifest.snapshot.many-tries.a"]
[hg-perf-ext.variants.dimensions.rev.manifest-snapshot-many-tries-b]
args=["--manifest", "DATA-VARS:mercurial.revlog.delta-find.manifest.snapshot.many-tries.b"]
[hg-perf-ext.variants.dimensions.rev.manifest-snapshot-many-tries-c]
args=["--manifest", "DATA-VARS:mercurial.revlog.delta-find.manifest.snapshot.many-tries.c"]
[hg-perf-ext.variants.dimensions.rev.manifest-snapshot-many-tries-d]
args=["--manifest", "DATA-VARS:mercurial.revlog.delta-find.manifest.snapshot.many-tries.d"]
[hg-perf-ext.variants.dimensions.rev.manifest-snapshot-many-tries-e]
args=["--manifest", "DATA-VARS:mercurial.revlog.delta-find.manifest.snapshot.many-tries.e"]
[hg-perf-ext.variants.dimensions.rev.manifest-snapshot-many-rounds-a]
args=["--manifest", "DATA-VARS:mercurial.revlog.delta-find.manifest.snapshot.many-rounds.a"]
[hg-perf-ext.variants.dimensions.rev.manifest-snapshot-many-rounds-b]
args=["--manifest", "DATA-VARS:mercurial.revlog.delta-find.manifest.snapshot.many-rounds.b"]
[hg-perf-ext.variants.dimensions.rev.manifest-snapshot-many-rounds-c]
args=["--manifest", "DATA-VARS:mercurial.revlog.delta-find.manifest.snapshot.many-rounds.c"]
[hg-perf-ext.variants.dimensions.rev.manifest-snapshot-many-rounds-d]
args=["--manifest", "DATA-VARS:mercurial.revlog.delta-find.manifest.snapshot.many-rounds.d"]
[hg-perf-ext.variants.dimensions.rev.manifest-snapshot-many-rounds-e]
args=["--manifest", "DATA-VARS:mercurial.revlog.delta-find.manifest.snapshot.many-rounds.e"]
[hg-perf-ext.variants.dimensions.rev.manifest-snapshot-many-both-a]
default=true
args=["--manifest", "DATA-VARS:mercurial.revlog.delta-find.manifest.snapshot.many-both.a"]
[hg-perf-ext.variants.dimensions.rev.manifest-snapshot-many-both-b]
args=["--manifest", "DATA-VARS:mercurial.revlog.delta-find.manifest.snapshot.many-both.b"]
[hg-perf-ext.variants.dimensions.rev.manifest-snapshot-many-both-c]
args=["--manifest", "DATA-VARS:mercurial.revlog.delta-find.manifest.snapshot.many-both.c"]
[hg-perf-ext.variants.dimensions.rev.manifest-snapshot-many-both-d]
args=["--manifest", "DATA-VARS:mercurial.revlog.delta-find.manifest.snapshot.many-both.d"]
[hg-perf-ext.variants.dimensions.rev.manifest-snapshot-many-both-e]
args=["--manifest", "DATA-VARS:mercurial.revlog.delta-find.manifest.snapshot.many-both.e"]
#!/usr/bin/env python3
"""Find suitable revision to run delta-find benchmark on
"""
import json
import pathlib
import subprocess
import sys
import poulpe.dataenvs
if len(sys.argv) != 2:
script_name = os.path.basename(sys.argv[0])
print(f"USAGE: {script_name} DATA-ENV-PATH", file=sys.stderr)
print(" DATA-ENV-PATH: the path to that data-env", file=sys.stderr)
sys.exit(32)
data_env_directory = pathlib.Path(sys.argv[1])
desc_path = data_env_directory / "data-env.poulpe"
data_env = poulpe.dataenvs.get_data_env(data_env_directory)
main_repo= data_env.get_benchmark_input_vars("mercurial.main-repo-path")
repo_path = data_env_directory / main_repo
cmd = [
'hg',
'--repository',
repo_path,
'debugdeltachain',
'--template',
'json',
'--manifest',
]
proc = subprocess.run(cmd, stdout=subprocess.PIPE, encoding='utf8')
proc.check_returncode()
delta_chain_data = json.loads(proc.stdout)
all_data = {}
target_type =('base', 'snap')
for rev_info in delta_chain_data:
if rev_info['deltatype'] not in target_type:
continue
cmd = [
'hg',
'--repository',
repo_path,
'debug-delta-find',
'--manifest',
'%d' % rev_info['rev']
]
proc = subprocess.run(cmd, stdout=subprocess.PIPE, encoding='utf8')
proc.check_returncode()
data = None
for line in proc.stdout.splitlines():
if line.startswith('DBG-DELTAS: MANIFESTLOG:'):
pieces = line.split()
data = {}
for p in pieces:
if '=' in p:
k, v = p.split('=', 1)
if '.' in v:
try:
v = float(v)
except ValueError:
pass
else:
try:
v = int(v)
except ValueError:
pass
data[k] = v
break
if data is not None:
all_data[rev_info['rev']] = data
items = list(all_data.items())
def set_one(key, value):
cmd = [
'env-desc',
'set',
str(desc_path),
f'bench-input-vars.mercurial.revlog.delta-find.manifest.{key}',
str(value),
]
subprocess.check_call(cmd)
# search snapshot with the most total try
items.sort(key=lambda i: (i[1]['try-count'], i[0]))
max_tries = items[:-6:-1]
for i, r in enumerate(max_tries):
c = chr(ord('a') + i)
set_one(f'snapshot.many-tries.{c}', r[0])
# search snapshot with the most search-rounds
items.sort(key=lambda i: (i[1]['search-rounds'], i[0]))
max_round = items[:-6:-1]
for i, r in enumerate(max_round):
c = chr(ord('a') + i)
set_one(f'snapshot.many-rounds.{c}', r[0])
# search snapshot with the most `try * rounds`
items.sort(key=lambda i: (i[1]['try-count'] * i[1]['search-rounds'], i[0]))
max_combined = items[:-6:-1]
for i, r in enumerate(max_combined):
c = chr(ord('a') + i)
set_one(f'snapshot.many-both.{c}', r[0])
......@@ -38,3 +38,5 @@
"${script_dir}"/setup-10-format.sh $data_env_directory
echo "setup for \`hg status\` benchmark"
"${script_dir}"/setup-50-status.sh $data_env_directory
echo "setup for \`delta-find\` benchmark"
"${script_dir}"/setup-55-delta-chain.py $data_env_directory
......@@ -4,6 +4,7 @@
This tests the data setup script for Mercurial.
$ PATH="${TESTDIR}/../bin:$PATH"
$ PYTHONPATH="${TESTDIR}/../python-libs:$PYTHONPATH"
$ SETUP_PATH="${TESTDIR}/../suites/hg/setup-data/"
Basic manual setup of the data-env data
......@@ -33,8 +34,9 @@
register graph details
register the format details
setup for `hg status` benchmark
setup for `delta-find` benchmark
$ env-desc show my-data-env/data-env.poulpe
bench-input-vars:
mercurial:
main-repo-path = base-repo
......@@ -36,8 +38,30 @@
$ env-desc show my-data-env/data-env.poulpe
bench-input-vars:
mercurial:
main-repo-path = base-repo
revlog:
delta-find:
manifest:
snapshot:
many-both:
a = 8152
b = 11355
c = 9151
d = 6939
e = 4345
many-rounds:
a = 11355
b = 9151
c = 8152
d = 5345
e = 3311
many-tries:
a = 8152
b = 6939
c = 11355
d = 9151
e = 4345
status:
clean:
no-iu = base-repo
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment