aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMateusz Guzik <mjg@FreeBSD.org>2023-04-02 12:38:49 +0000
committerMateusz Guzik <mjg@FreeBSD.org>2023-04-03 16:05:42 +0000
commit04bab189b8a54974fcd9530140e4eed6ad137f48 (patch)
tree67949f7243c070bef8c8674d9c5bc2d9710f4574
parent2a58b312b62f908ec92311d1bd8536dbaeb8e55b (diff)
downloadsrc-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.cpp15
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);