diff --git a/suites/hg/benchmarks/perf-delta-find.pbd b/suites/hg/benchmarks/perf-delta-find.pbd
new file mode 100644
index 0000000000000000000000000000000000000000..3e5cfc11e27afd9ef5527160060b88598e62d69a_c3VpdGVzL2hnL2JlbmNobWFya3MvcGVyZi1kZWx0YS1maW5kLnBiZA==
--- /dev/null
+++ b/suites/hg/benchmarks/perf-delta-find.pbd
@@ -0,0 +1,57 @@
+[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"]
diff --git a/suites/hg/setup-data/setup-55-delta-chain.py b/suites/hg/setup-data/setup-55-delta-chain.py
new file mode 100755
index 0000000000000000000000000000000000000000..3e5cfc11e27afd9ef5527160060b88598e62d69a_c3VpdGVzL2hnL3NldHVwLWRhdGEvc2V0dXAtNTUtZGVsdGEtY2hhaW4ucHk=
--- /dev/null
+++ b/suites/hg/setup-data/setup-55-delta-chain.py
@@ -0,0 +1,112 @@
+#!/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])
diff --git a/suites/hg/setup-data/setup-full.sh b/suites/hg/setup-data/setup-full.sh
index 4294bc734731f1f405bcdfbeaee41b91e5c9b246_c3VpdGVzL2hnL3NldHVwLWRhdGEvc2V0dXAtZnVsbC5zaA==..3e5cfc11e27afd9ef5527160060b88598e62d69a_c3VpdGVzL2hnL3NldHVwLWRhdGEvc2V0dXAtZnVsbC5zaA== 100755
--- a/suites/hg/setup-data/setup-full.sh
+++ b/suites/hg/setup-data/setup-full.sh
@@ -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
diff --git a/tests/test-data-setup.t b/tests/test-data-setup.t
index 4294bc734731f1f405bcdfbeaee41b91e5c9b246_dGVzdHMvdGVzdC1kYXRhLXNldHVwLnQ=..3e5cfc11e27afd9ef5527160060b88598e62d69a_dGVzdHMvdGVzdC1kYXRhLXNldHVwLnQ= 100644
--- a/tests/test-data-setup.t
+++ b/tests/test-data-setup.t
@@ -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