From dd48b149ca94b7870138c431b1e07c317c177d1a Mon Sep 17 00:00:00 2001 From: Jeff Becker Date: Mon, 25 Nov 2019 16:30:34 -0500 Subject: [PATCH] make job queue size configurable --- llarp/config/config.cpp | 9 +++++++++ llarp/config/config.hpp | 3 +++ llarp/context.cpp | 5 ++++- llarp/util/thread/logic.cpp | 4 ++-- llarp/util/thread/logic.hpp | 2 +- llarp/util/thread/threadpool.cpp | 4 ++-- llarp/util/thread/threadpool.h | 2 +- 7 files changed, 22 insertions(+), 7 deletions(-) diff --git a/llarp/config/config.cpp b/llarp/config/config.cpp index 0ba2b968b..5aa92b9b2 100644 --- a/llarp/config/config.cpp +++ b/llarp/config/config.cpp @@ -51,6 +51,15 @@ namespace llarp void RouterConfig::fromSection(string_view key, string_view val) { + if(key == "job-queue-size") + { + auto sval = svtoi(val); + if(sval >= 1024) + { + m_JobQueueSize = sval; + LogInfo("Set job queue size to ", m_JobQueueSize); + } + } if(key == "default-protocol") { m_DefaultLinkProto = tostr(val); diff --git a/llarp/config/config.hpp b/llarp/config/config.hpp index 83d059df0..51dca57e3 100644 --- a/llarp/config/config.hpp +++ b/llarp/config/config.hpp @@ -121,10 +121,13 @@ namespace llarp int m_workerThreads = 1; int m_numNetThreads = 1; + size_t m_JobQueueSize = size_t{1024 * 8}; + std::string m_DefaultLinkProto = "iwp"; public: // clang-format off + size_t jobQueueSize() const { return fromEnv(m_JobQueueSize, "JOB_QUEUE_SIZE"); } size_t minConnectedRouters() const { return fromEnv(m_minConnectedRouters, "MIN_CONNECTED_ROUTERS"); } size_t maxConnectedRouters() const { return fromEnv(m_maxConnectedRouters, "MAX_CONNECTED_ROUTERS"); } std::string encryptionKeyfile() const { return fromEnv(m_encryptionKeyfile, "ENCRYPTION_KEYFILE"); } diff --git a/llarp/context.cpp b/llarp/context.cpp index 2e79d03bd..3e1c825e3 100644 --- a/llarp/context.cpp +++ b/llarp/context.cpp @@ -51,7 +51,6 @@ namespace llarp bool Context::Configure() { - logic = std::make_shared< Logic >(); // llarp::LogInfo("loading config at ", configfile); if(configfile.size()) { @@ -73,6 +72,10 @@ namespace llarp threads = 1; worker = std::make_shared< llarp::thread::ThreadPool >(threads, 1024, "llarp-worker"); + auto jobQueueSize = config->router.jobQueueSize(); + if(jobQueueSize < 1024) + jobQueueSize = 1024; + logic = std::make_shared< Logic >(jobQueueSize); nodedb_dir = config->netdb.nodedbDir(); diff --git a/llarp/util/thread/logic.cpp b/llarp/util/thread/logic.cpp index ba53e7bd6..6a960d6d6 100644 --- a/llarp/util/thread/logic.cpp +++ b/llarp/util/thread/logic.cpp @@ -13,8 +13,8 @@ namespace llarp llarp_timer_tick_all_async(m_Timer, m_Thread, now); } - Logic::Logic() - : m_Thread(llarp_init_threadpool(1, "llarp-logic")) + Logic::Logic(size_t sz) + : m_Thread(llarp_init_threadpool(1, "llarp-logic", sz)) , m_Timer(llarp_init_timer()) { llarp_threadpool_start(m_Thread); diff --git a/llarp/util/thread/logic.hpp b/llarp/util/thread/logic.hpp index 7d3ed2bb2..465b8e8b5 100644 --- a/llarp/util/thread/logic.hpp +++ b/llarp/util/thread/logic.hpp @@ -11,7 +11,7 @@ namespace llarp class Logic { public: - Logic(); + Logic(size_t queueLength = size_t{1024 * 8}); ~Logic(); diff --git a/llarp/util/thread/threadpool.cpp b/llarp/util/thread/threadpool.cpp index 715271cec..ead887723 100644 --- a/llarp/util/thread/threadpool.cpp +++ b/llarp/util/thread/threadpool.cpp @@ -8,11 +8,11 @@ #include struct llarp_threadpool * -llarp_init_threadpool(int workers, const char *name) +llarp_init_threadpool(int workers, const char *name, size_t queueLength) { if(workers <= 0) workers = 1; - return new llarp_threadpool(workers, name); + return new llarp_threadpool(workers, name, queueLength); } void diff --git a/llarp/util/thread/threadpool.h b/llarp/util/thread/threadpool.h index 6581b1c66..bc180a11f 100644 --- a/llarp/util/thread/threadpool.h +++ b/llarp/util/thread/threadpool.h @@ -48,7 +48,7 @@ struct llarp_threadpool #endif struct llarp_threadpool * -llarp_init_threadpool(int workers, const char *name); +llarp_init_threadpool(int workers, const char *name, size_t queueLength); void llarp_free_threadpool(struct llarp_threadpool **tp);