diff --git a/benchmarks/basic_commands.py b/benchmarks/basic_commands.py
index f132ac6588cd14e70a26120afa1cbeebb561599c_YmVuY2htYXJrcy9iYXNpY19jb21tYW5kcy5weQ==..ef7a11a41ae9b29dc32440ca00ae4da696d343fe_YmVuY2htYXJrcy9iYXNpY19jb21tYW5kcy5weQ== 100644
--- a/benchmarks/basic_commands.py
+++ b/benchmarks/basic_commands.py
@@ -171,10 +171,6 @@
         time = self._execute("id", "-r", ". ")
         return time
 
-    def time_up_tip_100(self, *args, **kwargs):
-        self._execute("up", "-r", "tip~100")
-        self._execute("up", "-r", "tip")
-
 
 class LogTimeTestSuite(object):
 
@@ -217,3 +213,46 @@
 
     def time_log_history(self, repo, n):
         self._execute("log", "-r", "tip~%d::" % n)
+
+class UpdateTimeTestSuite(object):
+
+    params = [REPOS, [10, 100, 1000, 10000]]
+    param_names = ["repo", "changesets"]
+
+    def __init__(self):
+        super(UpdateTimeTestSuite, self).__init__()
+
+        self.timer = timeit.default_timer
+        self.goal_time = 10
+
+    def setup(self, repo_name, n):
+        venv = os.path.abspath(os.path.join(os.path.dirname(sys.executable), ".."))
+        self.repo_name = repo_name
+        self.hgpath = os.path.join(venv, "bin", "hg")
+        self.repo_path = os.path.join(REPOS_DIR, self.repo_name)
+
+    def _execute(self, command, *args):
+        cmd = self._prepare_cmd(command, *args)
+
+        try:
+            return self._single_execute(cmd)
+        except subprocess.CalledProcessError as error:
+            print("ERROR OUTPUT", error.output)
+            raise
+
+    def _prepare_cmd(self, command, *args):
+        cmd = [
+                self.hgpath,
+                "--cwd", self.repo_path,
+                "--traceback",
+                command,
+        ] + list(args)
+
+        return cmd
+
+    def _single_execute(self, cmd):
+        return subprocess.check_output(cmd, stderr=subprocess.STDOUT)
+
+    def time_up_tip(self, repo, n):
+        self._execute("up", "-r", "tip~%d" % n)
+        self._execute("up", "-r", "tip")