diff --git a/benchmarks/basic_commands.py b/benchmarks/basic_commands.py
index 4998bff404541941fa0df3a4bb6c48f4f098cbef_YmVuY2htYXJrcy9iYXNpY19jb21tYW5kcy5weQ==..631ac20986344c4736551919a5b1494fd452147d_YmVuY2htYXJrcy9iYXNpY19jb21tYW5kcy5weQ== 100644
--- a/benchmarks/basic_commands.py
+++ b/benchmarks/basic_commands.py
@@ -370,10 +370,10 @@
 )
 
 
-class DiscoveryTimeSuite(BaseExchangeTimeSuite):
+class BaseDiscoveryTimeSuite(BaseExchangeTimeSuite):
     # debugdiscovery does not support revset argument
     params = BaseTestSuite.params + [
         ['local', 'ssh', 'http'],
         STRIP_VARIANTS_LIST,
         [None]]
 
@@ -374,9 +374,23 @@
     # debugdiscovery does not support revset argument
     params = BaseTestSuite.params + [
         ['local', 'ssh', 'http'],
         STRIP_VARIANTS_LIST,
         [None]]
 
+    def _track_discovery(self, *args, **kwargs):
+        data = self.role_data.get(kwargs['strip'], {})
+        data = data.get(self.repo_name)
+        if data is None:
+            raise NotImplementedError("no roles data for this partials' key")
+        source = self.repo_path_from_id(data['source'])
+        target = self.repo_path_from_id(data['target'])
+        return self.perfext('perfdiscovery', '--repository', source, target)
+
+@setup_role
+class DiscoverySubsetTimeSuite(BaseDiscoveryTimeSuite):
+    role_action = 'discovery'
+    role_subtype = 'subset'
+
     @params_as_kwargs
     @not_broken_hgweb
     def track_discovery_subset(self, *args, **kwargs):
@@ -380,13 +394,14 @@
     @params_as_kwargs
     @not_broken_hgweb
     def track_discovery_subset(self, *args, **kwargs):
-        """Local repository is a subset of remote."""
-        # self.hg() passes self.repo_path through --cwd, we override
-        # that with -R
-        return self.perfext('perfdiscovery',
-                            '--repository', self.clone_path,
-                            self.repo_path)
+        return self._track_discovery(self, *args, **kwargs)
+    track_discovery_subset.benchmark_name = 'basic_commands.DiscoveryTimeSuite.track_discovery_subset'
+
+@setup_role
+class DiscoverySupersetTimeSuite(BaseDiscoveryTimeSuite):
+    role_action = 'discovery'
+    role_subtype = 'superset'
 
     @params_as_kwargs
     @not_broken_hgweb
     def track_discovery_superset(self, *args, **kwargs):
@@ -389,9 +404,9 @@
 
     @params_as_kwargs
     @not_broken_hgweb
     def track_discovery_superset(self, *args, **kwargs):
-        """Local repository is a superset of remote."""
-        return self.perfext('perfdiscovery', self.clone_path)
+        return self._track_discovery(self, *args, **kwargs)
+    track_discovery_superset.benchmark_name = 'basic_commands.DiscoveryTimeSuite.track_discovery_superset'
 
 
 class UnbundleTimeSuite(BaseExchangeTimeSuite):