From 7a386ee4430cbab929f3abc294669a5f197e07ce Mon Sep 17 00:00:00 2001 From: Marcus Holland-Moritz Date: Mon, 18 Aug 2025 18:59:29 +0200 Subject: [PATCH] chore: add ability to override hardware concurrency from environment --- .docker/build-linux.sh | 2 ++ src/util.cpp | 9 ++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/.docker/build-linux.sh b/.docker/build-linux.sh index 1f896f81..bdc3910c 100755 --- a/.docker/build-linux.sh +++ b/.docker/build-linux.sh @@ -361,6 +361,8 @@ if [[ "-$BUILD_TYPE-" == *-static-* ]]; then if [[ -n "$CROSS_ARCH" ]]; then CMAKE_ARGS="${CMAKE_ARGS} -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=$_MARCH -DCMAKE_CROSSCOMPILING_EMULATOR=/usr/bin/qemu-$_MARCH -DFOLLY_HAVE_UNALIGNED_ACCESS=OFF -DFOLLY_HAVE_WEAK_SYMBOLS=ON -DFOLLY_HAVE_LINUX_VDSO=OFF -DFOLLY_HAVE_WCHAR_SUPPORT=OFF -DHAVE_VSNPRINTF_ERRORS=OFF" + # Limit emulated parallelism to 4 threads, otherwise the slowdown is substantial + export DWARFS_OVERRIDE_HARDWARE_CONCURRENCY=4 fi fi diff --git a/src/util.cpp b/src/util.cpp index d9b8ca71..4b8b0ef0 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -424,7 +424,14 @@ std::string exception_str(std::exception_ptr const& e) { } unsigned int hardware_concurrency() noexcept { - return folly::hardware_concurrency(); + static auto const env = [] { + std::optional concurrency; + if (auto env = std::getenv("DWARFS_OVERRIDE_HARDWARE_CONCURRENCY")) { + concurrency = try_to(env); + } + return concurrency; + }(); + return env.value_or(folly::hardware_concurrency()); } int get_current_umask() {