diff options
author | Mateusz Guzik <mjg@FreeBSD.org> | 2023-04-02 12:38:49 +0000 |
---|---|---|
committer | Mateusz Guzik <mjg@FreeBSD.org> | 2023-04-03 16:05:42 +0000 |
commit | 04bab189b8a54974fcd9530140e4eed6ad137f48 (patch) | |
tree | 67949f7243c070bef8c8674d9c5bc2d9710f4574 | |
parent | 2a58b312b62f908ec92311d1bd8536dbaeb8e55b (diff) | |
download | src-04bab189b8a54974fcd9530140e4eed6ad137f48.tar.gz src-04bab189b8a54974fcd9530140e4eed6ad137f48.zip |
llvm/lld: damage control threading
See the comment inside.
Reviewed by: dim
Differential Revision: https://reviews.freebsd.org/D39389
-rw-r--r-- | contrib/llvm-project/llvm/lib/Support/Threading.cpp | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/contrib/llvm-project/llvm/lib/Support/Threading.cpp b/contrib/llvm-project/llvm/lib/Support/Threading.cpp index 04a1a9e19428..3ac3695fa9ed 100644 --- a/contrib/llvm-project/llvm/lib/Support/Threading.cpp +++ b/contrib/llvm-project/llvm/lib/Support/Threading.cpp @@ -62,8 +62,19 @@ unsigned llvm::ThreadPoolStrategy::compute_thread_count() const { : sys::getHostNumPhysicalCores(); if (MaxThreadCount <= 0) MaxThreadCount = 1; - if (ThreadsRequested == 0) - return MaxThreadCount; + // Damage control threading. + // + // There are no heuristics to figure out how many threads makes sense to spawn, + // all while rolling with all available hw threads starts being detrimental to + // performance really early. + // + // Work around by putting a hard cap unless the user explicitly requested a certain amount. + // + // See https://discourse.llvm.org/t/avoidable-overhead-from-threading-by-default/69160 + // for more details. + if (ThreadsRequested == 0) { + return std::min(MaxThreadCount, 4); + } if (!Limit) return ThreadsRequested; return std::min((unsigned)MaxThreadCount, ThreadsRequested); |