From f3ff8ae5f7632320813b3d9f0ad6cd8c9792529c Mon Sep 17 00:00:00 2001 From: asonix Date: Thu, 27 Jul 2023 11:08:20 -0500 Subject: [PATCH] Split available signature threads between sign & verify --- src/config.rs | 14 ++++++++------ src/main.rs | 22 ++++++++++++++++++++-- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/config.rs b/src/config.rs index be46fc6..3cbf79d 100644 --- a/src/config.rs +++ b/src/config.rs @@ -259,12 +259,14 @@ impl Config { } pub(crate) fn signature_threads(&self) -> usize { - self.signature_threads.unwrap_or_else(|| { - std::thread::available_parallelism() - .map(usize::from) - .map_err(|e| tracing::warn!("Failed to get parallelism, {e}")) - .unwrap_or(1) - }) + self.signature_threads + .unwrap_or_else(|| { + std::thread::available_parallelism() + .map(usize::from) + .map_err(|e| tracing::warn!("Failed to get parallelism, {e}")) + .unwrap_or(1) + }) + .max(1) } pub(crate) fn client_timeout(&self) -> u64 { diff --git a/src/main.rs b/src/main.rs index 9cd1fd4..cc60996 100644 --- a/src/main.rs +++ b/src/main.rs @@ -242,6 +242,8 @@ fn server_main( actix_rt::spawn(do_server_main(db, actors, media, collector, config)) } +const VERIFY_RATIO: usize = 7; + async fn do_server_main( db: Db, actors: ActorCache, @@ -259,8 +261,24 @@ async fn do_server_main( let keys = config.open_keys()?; - let spawner = Spawner::build("signature-thread", config.signature_threads())?; - let verify_spawner = Spawner::build("verify-thread", (config.signature_threads() / 8).max(1))?; + let (signature_threads, verify_threads) = match config.signature_threads() { + 0 | 1 => (1, 1), + n if n <= VERIFY_RATIO => { + let verify_threads = (n / VERIFY_RATIO).max(1); + let signature_threads = n.saturating_sub(verify_threads).max(n); + + (signature_threads, verify_threads) + } + n => { + let verify_threads = (n / VERIFY_RATIO).max(1); + let signature_threads = n.saturating_sub(verify_threads).max(VERIFY_RATIO); + + (signature_threads, verify_threads) + } + }; + + let spawner = Spawner::build("signature-thread", signature_threads)?; + let verify_spawner = Spawner::build("verify-thread", verify_threads)?; let bind_address = config.bind_address(); let server = HttpServer::new(move || {