aboutsummaryrefslogtreecommitdiff
path: root/src/node/chainstatemanager_args.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/node/chainstatemanager_args.cpp')
-rw-r--r--src/node/chainstatemanager_args.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/node/chainstatemanager_args.cpp b/src/node/chainstatemanager_args.cpp
index 87d9238c18..e61deca3ec 100644
--- a/src/node/chainstatemanager_args.cpp
+++ b/src/node/chainstatemanager_args.cpp
@@ -6,7 +6,9 @@
#include <arith_uint256.h>
#include <common/args.h>
+#include <common/system.h>
#include <kernel/chainstatemanager_opts.h>
+#include <logging.h>
#include <node/coins_view_args.h>
#include <node/database_args.h>
#include <tinyformat.h>
@@ -16,6 +18,7 @@
#include <util/translation.h>
#include <validation.h>
+#include <algorithm>
#include <chrono>
#include <string>
@@ -41,6 +44,16 @@ util::Result<void> ApplyArgsManOptions(const ArgsManager& args, ChainstateManage
ReadDatabaseArgs(args, opts.coins_db);
ReadCoinsViewArgs(args, opts.coins_view);
+ int script_threads = args.GetIntArg("-par", DEFAULT_SCRIPTCHECK_THREADS);
+ if (script_threads <= 0) {
+ // -par=0 means autodetect (number of cores - 1 script threads)
+ // -par=-n means "leave n cores free" (number of cores - n - 1 script threads)
+ script_threads += GetNumCores();
+ }
+ // Subtract 1 because the main thread counts towards the par threads.
+ opts.worker_threads_num = std::clamp(script_threads - 1, 0, MAX_SCRIPTCHECK_THREADS);
+ LogPrintf("Script verification uses %d additional threads\n", opts.worker_threads_num);
+
return {};
}
} // namespace node