Thu, 19 Jul 2018 09:57:42 +0200 config: document the purpose of the `format` config section
Boris Feld <boris.feld@octobus.net> [Thu, 19 Jul 2018 09:57:42 +0200] rev 38735
config: document the purpose of the `format` config section The config section now have a top level documentation to clarify its intend and usage. In particular, user are now explain when the option are taken in account and how to convert repository. There are an handful of experimental options in this section that does not match its definition. They should be relocated to other section before getting out of experimental. (see next changeset for one example).
Wed, 18 Jul 2018 18:36:39 -0700 macosx: fixing macOS version generation after db9d1dd01bf0
Rodrigo Damazio <rdamazio@google.com> [Wed, 18 Jul 2018 18:36:39 -0700] rev 38734
macosx: fixing macOS version generation after db9d1dd01bf0 With the Python3 change, the string is now something like version = b'4.6.2+848-88be288e8ac1' where it was previously just: version = '4.6.2+848-88be288e8ac1' Differential Revision: https://phab.mercurial-scm.org/D3964
Tue, 10 Jul 2018 17:01:06 +0530 histedit: add history-editing-backup config option
Sushil khanchi <sushilkhanchi97@gmail.com> [Tue, 10 Jul 2018 17:01:06 +0530] rev 38733
histedit: add history-editing-backup config option Instead of passing --no-backup option every time you don't want to store backup, now you can set config option: [ui] history-editing-backup = False This option aims to operate on every history editing command. Differential Revision: https://phab.mercurial-scm.org/D3901
Wed, 18 Jul 2018 09:49:34 -0700 merge: mark file gets as not thread safe (issue5933)
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 18 Jul 2018 09:49:34 -0700] rev 38732
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
Wed, 18 Jul 2018 09:46:45 -0700 worker: ability to disable thread unsafe tasks
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 18 Jul 2018 09:46:45 -0700] rev 38731
worker: ability to disable thread unsafe tasks The worker on Windows is implemented using a thread pool. If worker tasks are not thread safe, badness can occur. In addition, if tasks are executing CPU bound code and holding onto the GIL, there will be non-substantial overhead in Python context switching between active threads. This can result in significant slowdowns of tasks. This commit teaches the code for determining whether to use a worker to take thread safety into account. Effectively, thread unsafe tasks don't use the thread-based worker on Windows. Differential Revision: https://phab.mercurial-scm.org/D3962
Tue, 17 Jul 2018 16:57:27 -0700 worker: rename variable to reflect constant
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 17 Jul 2018 16:57:27 -0700] rev 38730
worker: rename variable to reflect constant Differential Revision: https://phab.mercurial-scm.org/D3961
Mon, 16 Jul 2018 17:52:17 -0700 worker: use one pipe per posix worker and select() in parent process
Danny Hooper <hooper@google.com> [Mon, 16 Jul 2018 17:52:17 -0700] rev 38729
worker: use one pipe per posix worker and select() in parent process This allows us to pass results larger than PIPE_BUF through the pipes without interleaving them. This is necessary now because "hg fix" sends file contents as the result from workers. Differential Revision: https://phab.mercurial-scm.org/D3960
(0) -30000 -10000 -3000 -1000 -300 -100 -30 -10 -7 +7 +10 +30 +100 +300 +1000 +3000 +10000 tip