Mercurial > hg
annotate README.rst @ 47120:7109a38830c9
dirstate-tree: Fold "tracked descendants" counter update in main walk
For the purpose of implementing `has_tracked_dir` (which means "has tracked
descendants) without an expensive sub-tree traversal, we maintaing a counter
of tracked descendants on each "directory" node of the tree-shaped dirstate.
Before this changeset, mutating or inserting a node at a given path would
involve:
* Walking the tree from root through ancestors to find the node or the spot
where to insert it
* Looking at the previous node if any to decide what counter update is needed
* Performing any node mutation
* Walking the tree *again* to update counters in ancestor nodes
When profiling `hg status` on a large repo, this second walk takes times
while loading a the dirstate from disk.
It turns out we have enough information to decide before he first tree walk
what counter update is needed. This changeset merges the two walks, gaining
~10% of the total time for `hg update` (in the same hyperfine benchmark as
the previous changeset).
---
Profiling was done by compiling with this `.cargo/config`:
[profile.release]
debug = true
then running with:
py-spy record -r 500 -n -o /tmp/hg.json --format speedscope -- \
./hg status -R $REPO --config experimental.dirstate-tree.in-memory=1
then visualizing the recorded JSON file in https://www.speedscope.app/
Differential Revision: https://phab.mercurial-scm.org/D10554
author | Simon Sapin <simon.sapin@octobus.net> |
---|---|
date | Fri, 30 Apr 2021 14:22:14 +0200 |
parents | c5912e35d06d |
children |
rev | line source |
---|---|
12857
a9f91c844a3b
README: add small introduction
Martin Geisler <mg@lazybytes.net>
parents:
12856
diff
changeset
|
1 Mercurial |
a9f91c844a3b
README: add small introduction
Martin Geisler <mg@lazybytes.net>
parents:
12856
diff
changeset
|
2 ========= |
a9f91c844a3b
README: add small introduction
Martin Geisler <mg@lazybytes.net>
parents:
12856
diff
changeset
|
3 |
a9f91c844a3b
README: add small introduction
Martin Geisler <mg@lazybytes.net>
parents:
12856
diff
changeset
|
4 Mercurial is a fast, easy to use, distributed revision control tool |
a9f91c844a3b
README: add small introduction
Martin Geisler <mg@lazybytes.net>
parents:
12856
diff
changeset
|
5 for software developers. |
a9f91c844a3b
README: add small introduction
Martin Geisler <mg@lazybytes.net>
parents:
12856
diff
changeset
|
6 |
33618
76b171209151
README: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26421
diff
changeset
|
7 Basic install:: |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
8 |
3935 | 9 $ make # see install targets |
10 $ make install # do a system-wide install | |
11 $ hg debuginstall # sanity-check setup | |
12 $ hg # see help | |
205
d255d99a7cbd
README: integrate some changes from Kevin Smith
mpm@selenic.com
parents:
204
diff
changeset
|
13 |
33618
76b171209151
README: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26421
diff
changeset
|
14 Running without installing:: |
16217
df5ecb813426
readme: mention how to run in-place
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
12857
diff
changeset
|
15 |
df5ecb813426
readme: mention how to run in-place
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
12857
diff
changeset
|
16 $ make local # build for inplace usage |
df5ecb813426
readme: mention how to run in-place
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
12857
diff
changeset
|
17 $ ./hg --version # should show the latest version |
df5ecb813426
readme: mention how to run in-place
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
12857
diff
changeset
|
18 |
26421
4b0fc75f9403
urls: bulk-change primary website URLs
Matt Mackall <mpm@selenic.com>
parents:
16217
diff
changeset
|
19 See https://mercurial-scm.org/ for detailed installation |
3935 | 20 instructions, platform-specific notes, and Mercurial user information. |
46756
c5912e35d06d
README: document requirement for builtin zstd
Joerg Sonnenberger <joerg@bec.de>
parents:
34579
diff
changeset
|
21 |
c5912e35d06d
README: document requirement for builtin zstd
Joerg Sonnenberger <joerg@bec.de>
parents:
34579
diff
changeset
|
22 Notes for packagers |
c5912e35d06d
README: document requirement for builtin zstd
Joerg Sonnenberger <joerg@bec.de>
parents:
34579
diff
changeset
|
23 =================== |
c5912e35d06d
README: document requirement for builtin zstd
Joerg Sonnenberger <joerg@bec.de>
parents:
34579
diff
changeset
|
24 |
c5912e35d06d
README: document requirement for builtin zstd
Joerg Sonnenberger <joerg@bec.de>
parents:
34579
diff
changeset
|
25 Mercurial ships a copy of the python-zstandard sources. This is used to |
c5912e35d06d
README: document requirement for builtin zstd
Joerg Sonnenberger <joerg@bec.de>
parents:
34579
diff
changeset
|
26 provide support for zstd compression and decompression functionality. The |
c5912e35d06d
README: document requirement for builtin zstd
Joerg Sonnenberger <joerg@bec.de>
parents:
34579
diff
changeset
|
27 module is not intended to be replaced by the plain python-zstandard nor |
c5912e35d06d
README: document requirement for builtin zstd
Joerg Sonnenberger <joerg@bec.de>
parents:
34579
diff
changeset
|
28 is it intended to use a system zstd library. Patches can result in hard |
c5912e35d06d
README: document requirement for builtin zstd
Joerg Sonnenberger <joerg@bec.de>
parents:
34579
diff
changeset
|
29 to diagnose errors and are explicitly discouraged as unsupported |
c5912e35d06d
README: document requirement for builtin zstd
Joerg Sonnenberger <joerg@bec.de>
parents:
34579
diff
changeset
|
30 configuration. |