tests/test-debug-revlog-stats.t
author Pierre-Yves David <pierre-yves.david@octobus.net>
Tue, 09 Apr 2024 02:54:19 +0200
changeset 51586 1cef1412af3e
parent 50681 47b44d80d836
permissions -rw-r--r--
phases: rework the logic of _pushdiscoveryphase to bound complexity This rework the various graph traversal in _pushdiscoveryphase to keep the complexity in check. This is done though a couple of things: - first, limiting the space we have to explore, for example, if we are not in publishing push, we don't need to consider remote draft roots that are also draft locally, as there is nothing to be moved there. - avoid unbounded descendant computation, and use the faster "rev between" computation. This provide a massive boost to performance when exchanging with repository with a massive amount of draft, like mozilla-try: ### data-env-vars.name = mozilla-try-2023-03-22-zstd-sparse-revlog # benchmark.name = hg.command.push # bin-env-vars.hg.flavor = default # bin-env-vars.hg.py-re2-module = default # benchmark.variants.explicit-rev = all-out-heads # benchmark.variants.issue6528 = disabled # benchmark.variants.protocol = ssh # benchmark.variants.reuse-external-delta-parent = default ## benchmark.variants.revs = any-1-extra-rev before: 20.346590 seconds after: 11.232059 seconds (-38.15%, -7.48 seconds) ## benchmark.variants.revs = any-100-extra-rev before: 24.752051 seconds after: 15.367412 seconds (-37.91%, -9.38 seconds) After this changes, the push operation is still quite too slow. Some of this can be attributed to general phases slowness (reading all the roots from disk for example) and other know slowness (not using persistent-nodemap, branchmap, tags, etc. We are also working on them, but with this series, phase discovery during push no longer showing up in profile and this is a pretty nice and bit low-hanging fruit out of the way. ### (same case as the above) # benchmark.variants.revs = any-1-extra-rev pre-%ln-change: 44.235070 this-changeset: 11.232059 seconds (-74.61%, -33.00 seconds) # benchmark.variants.revs = any-100-extra-rev pre-%ln-change: 49.234697 this-changeset: 15.367412 seconds (-68.79%, -33.87 seconds) Note that with this change, the `hg push` performance is now much closer to the `hg pull` performance, even it still lagging behind a bit. (and the overall performance are still too slow). ### data-env-vars.name = mozilla-try-2023-03-22-ds2-pnm # benchmark.variants.explicit-rev = all-out-heads # benchmark.variants.issue6528 = disabled # benchmark.variants.protocol = ssh # benchmark.variants.pulled-delta-reuse-policy = default # bin-env-vars.hg.flavor = rust ## benchmark.variants.revs = any-1-extra-rev hg.command.pull: 6.517450 hg.command.push: 11.219888 ## benchmark.variants.revs = any-100-extra-rev hg.command.pull: 10.160991 hg.command.push: 14.251107 ### data-env-vars.name = mozilla-try-2023-03-22-zstd-sparse-revlog # bin-env-vars.hg.py-re2-module = default # benchmark.variants.explicit-rev = all-out-heads # benchmark.variants.issue6528 = disabled # benchmark.variants.protocol = ssh # benchmark.variants.pulled-delta-reuse-policy = default ## bin-env-vars.hg.flavor = default ## benchmark.variants.revs = any-1-extra-rev hg.command.pull: 8.577772 hg.command.push: 11.232059 ## bin-env-vars.hg.flavor = default ## benchmark.variants.revs = any-100-extra-rev hg.command.pull: 13.152976 hg.command.push: 15.367412 ## bin-env-vars.hg.flavor = rust ## benchmark.variants.revs = any-1-extra-rev hg.command.pull: 8.731982 hg.command.push: 11.178751 ## bin-env-vars.hg.flavor = rust ## benchmark.variants.revs = any-100-extra-rev hg.command.pull: 13.184236 hg.command.push: 15.620843
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
49819
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
     1
Force revlog max inline value to be smaller than default
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
     2
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
     3
  $ mkdir $TESTTMP/ext
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
     4
  $ cat << EOF > $TESTTMP/ext/small_inline.py
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
     5
  > from mercurial import revlog
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
     6
  > revlog._maxinline = 8
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
     7
  > EOF
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
     8
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
     9
  $ cat << EOF >> $HGRCPATH
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    10
  > [extensions]
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    11
  > small_inline=$TESTTMP/ext/small_inline.py
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    12
  > EOF
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    13
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    14
  $ hg init repo
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    15
  $ cd repo
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    16
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    17
Try on an empty repository
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    18
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    19
  $ hg debug-revlog-stats
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    20
  rev-count   data-size inl type      target 
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    21
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    22
  $ mkdir folder
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    23
  $ touch a b folder/c folder/d
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    24
  $ hg commit -Aqm 0
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    25
  $ echo "text" > a
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    26
  $ hg rm b
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    27
  $ echo "longer string" > folder/d
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    28
  $ hg commit -Aqm 1
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    29
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    30
Differences in data size observed with pure is due to different compression
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    31
algorithms
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    32
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    33
  $ hg debug-revlog-stats
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    34
  rev-count   data-size inl type      target 
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    35
          2         138 no  changelog  (no-pure !)
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    36
          2         137 no  changelog  (pure !)
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    37
          2         177 no  manifest   (no-pure !)
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    38
          2         168 no  manifest   (pure !)
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    39
          2           6 yes file      a
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    40
          1           0 yes file      b
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    41
          1           0 yes file      folder/c
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    42
          2          15 no  file      folder/d
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    43
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    44
Test 'changelog' command argument
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    45
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    46
  $ hg debug-revlog-stats -c
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    47
  rev-count   data-size inl type      target 
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    48
          2         138 no  changelog  (no-pure !)
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    49
          2         137 no  changelog  (pure !)
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    50
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    51
Test 'manifest' command argument
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    52
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    53
  $ hg debug-revlog-stats -m
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    54
  rev-count   data-size inl type      target 
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    55
          2         177 no  manifest   (no-pure !)
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    56
          2         168 no  manifest   (pure !)
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    57
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    58
Test 'file' command argument
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    59
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    60
  $ hg debug-revlog-stats -f
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    61
  rev-count   data-size inl type      target 
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    62
          2           6 yes file      a
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    63
          1           0 yes file      b
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    64
          1           0 yes file      folder/c
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    65
          2          15 no  file      folder/d
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    66
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    67
Test multiple command arguments
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    68
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    69
  $ hg debug-revlog-stats -cm
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    70
  rev-count   data-size inl type      target 
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    71
          2         138 no  changelog  (no-pure !)
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    72
          2         137 no  changelog  (pure !)
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    73
          2         177 no  manifest   (no-pure !)
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    74
          2         168 no  manifest   (pure !)
b1e4c74beb6f debug: add debug-revlog-stats command
Franck Bret <franck.bret@octobus.net>
parents:
diff changeset
    75