D12384: rust-status: cap the number of concurrent threads to 16
Alphare (Raphaël Gomès)
phabricator at mercurial-scm.org
Fri Mar 18 16:15:37 UTC 2022
Alphare created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.
REVISION SUMMARY
During benchmarking it was determined that the use of more threads is very
advantageous... until we use more than 16. This is most likely due to some
resource contention (thrashing, etc.). Until we have time to figure out and
fix the underlying cause, let's just cap at 16 threads.
REPOSITORY
rHG Mercurial
BRANCH
stable
REVISION DETAIL
https://phab.mercurial-scm.org/D12384
AFFECTED FILES
rust/hg-core/src/dirstate_tree/status.rs
CHANGE DETAILS
diff --git a/rust/hg-core/src/dirstate_tree/status.rs b/rust/hg-core/src/dirstate_tree/status.rs
--- a/rust/hg-core/src/dirstate_tree/status.rs
+++ b/rust/hg-core/src/dirstate_tree/status.rs
@@ -47,6 +47,17 @@
ignore_files: Vec<PathBuf>,
options: StatusOptions,
) -> Result<(DirstateStatus<'on_disk>, Vec<PatternFileWarning>), StatusError> {
+ // Force the global rayon threadpool to not exceed 16 concurrent threads.
+ // This is a stop-gap measure until we figure out why using more than 16
+ // threads makes `status` slower for each additional thread.
+ // We use `ok()` in case the global threadpool has already been instantiated
+ // in `rhg` or some other caller.
+ // TODO find the underlying cause and fix it, then remove this.
+ rayon::ThreadPoolBuilder::new()
+ .num_threads(16)
+ .build_global()
+ .ok();
+
let (ignore_fn, warnings, patterns_changed): (IgnoreFnType, _, _) =
if options.list_ignored || options.list_unknown {
let mut hasher = Sha1::new();
To: Alphare, #hg-reviewers
Cc: mercurial-patches, mercurial-devel
More information about the Mercurial-devel
mailing list