Mercurial > hg
comparison tests/test-simple-update.t @ 52060:8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
This case is easy to detect and we have all we need to generate a valid
working copy and dirstate entirely in Rust, which speeds things up
considerably:
On my machine updating a repo of ~300k files goes from 10.00s down to 4.2s,
all while consuming 50% less system time, with all caches hot.
Something to note is that further improvements will probably happen
with the upcoming `InnerRevlog` series that does smarter
mmap hanlding, especially for filelogs.
Here are benchmark numbers on a machine with only 4 cores (and no SMT enabled)
```
### data-env-vars.name = heptapod-public-2024-03-25-ds2-pnm
# benchmark.name = hg.command.update
# bin-env-vars.hg.py-re2-module = default
# bin-env-vars.hg.changeset.node = <this change>
# benchmark.variants.atomic-update = no
# benchmark.variants.scenario = null-to-tip
# benchmark.variants.worker = default
default: 5.328762 ~~~~~
rust: 1.308654 (-75.44%, -4.02)
### data-env-vars.name = mercurial-devel-2024-03-22-ds2-pnm
# benchmark.name = hg.command.update
# bin-env-vars.hg.py-re2-module = default
# bin-env-vars.hg.changeset.node = <this change>
# benchmark.variants.atomic-update = no
# benchmark.variants.scenario = null-to-tip
# benchmark.variants.worker = default
default: 1.693271 ~~~~~
rust: 1.151053 (-32.02%, -0.54)
### data-env-vars.name = mozilla-unified-2024-03-22-ds2-pnm
# benchmark.name = hg.command.update
# bin-env-vars.hg.py-re2-module = default
# bin-env-vars.hg.changeset.node = <this change>
# benchmark.variants.atomic-update = no
# benchmark.variants.scenario = null-to-tip
# benchmark.variants.worker = default
default: 38.901613 ~~~~~
rust: 11.637880 (-70.08%, -27.26)
### data-env-vars.name = netbsd-xsrc-public-2024-09-19-ds2-pnm
# benchmark.name = hg.command.update
# bin-env-vars.hg.py-re2-module = default
# bin-env-vars.hg.changeset.node = <this change>
# benchmark.variants.atomic-update = no
# benchmark.variants.scenario = null-to-tip
# benchmark.variants.worker = default
default: 4.793727 ~~~~~
rust: 1.505905 (-68.59%, -3.29)
```
author | Raphaël Gomès <rgomes@octobus.net> |
---|---|
date | Tue, 01 Oct 2024 13:49:11 +0200 |
parents | 2f2682f40ea0 |
children |
comparison
equal
deleted
inserted
replaced
52059:b332ae615714 | 52060:8b7123c8947b |
---|---|
94 update with worker processes | 94 update with worker processes |
95 | 95 |
96 #if no-windows | 96 #if no-windows |
97 | 97 |
98 $ cat <<EOF > forceworker.py | 98 $ cat <<EOF > forceworker.py |
99 > from mercurial import extensions, worker | 99 > from mercurial import extensions, merge, worker |
100 > def nocost(orig, ui, costperop, nops, threadsafe=True): | 100 > def nocost(orig, ui, costperop, nops, threadsafe=True): |
101 > return worker._numworkers(ui) > 1 | 101 > return worker._numworkers(ui) > 1 |
102 > def uisetup(ui): | 102 > def uisetup(ui): |
103 > extensions.wrapfunction(worker, 'worthwhile', nocost) | 103 > extensions.wrapfunction(worker, 'worthwhile', nocost) |
104 > merge.MAYBE_USE_RUST_UPDATE = False | |
104 > EOF | 105 > EOF |
105 | 106 |
106 $ hg init worker | 107 $ hg init worker |
107 $ cd worker | 108 $ cd worker |
108 $ cat <<EOF >> .hg/hgrc | 109 $ cat <<EOF >> .hg/hgrc |