Mercurial > hg
annotate README.rst @ 38732:be4984261611
merge: mark file gets as not thread safe (issue5933)
In default installs, this has the effect of disabling the thread-based
worker on Windows when manifesting files in the working directory. My
measurements have shown that with revlog-based repositories, Mercurial
spends a lot of CPU time in revlog code resolving file data. This ends
up incurring a lot of context switching across threads and slows down
`hg update` operations when going from an empty working directory to
the tip of the repo.
On mozilla-unified (246,351 files) on an i7-6700K (4+4 CPUs):
before: 487s wall
after: 360s wall (equivalent to worker.enabled=false)
cpus=2: 379s wall
Even with only 2 threads, the thread pool is still slower.
The introduction of the thread-based worker (02b36e860e0b) states that
it resulted in a "~50%" speedup for `hg sparse --enable-profile` and
`hg sparse --disable-profile`. This disagrees with my measurement
above. I theorize a few reasons for this:
1) Removal of files from the working directory is I/O - not CPU - bound
and should benefit from a thread pool (unless I/O is insanely fast
and the GIL release is near instantaneous). So tests like `hg sparse
--enable-profile` may exercise deletion throughput and aren't good
benchmarks for worker tasks that are CPU heavy.
2) The patch was authored by someone at Facebook. The results were
likely measured against a repository using remotefilelog. And I
believe that revision retrieval during working directory updates with
remotefilelog will often use a remote store, thus being I/O and not
CPU bound. This probably resulted in an overstated performance gain.
Since there appears to be a need to enable the thread-based worker with
some stores, I've made the flagging of file gets as thread safe
configurable. I've made it experimental because I don't want to formalize
a boolean flag for this option and because this attribute is best
captured against the store implementation. But we don't have a proper
store API for this yet. I'd rather cross this bridge later.
It is possible there are revlog-based repositories that do benefit from
a thread-based worker. I didn't do very comprehensive testing. If there
are, we may want to devise a more proper algorithm for whether to use
the thread-based worker, including possibly config options to limit the
number of threads to use. But until I see evidence that justifies
complexity, simplicity wins.
Differential Revision: https://phab.mercurial-scm.org/D3963
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Wed, 18 Jul 2018 09:49:34 -0700 |
parents | 1b59287a1cfa |
children | c5912e35d06d |
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. |