mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
limit tokio threads to 1/4 of num_cpus
make sure that rayon has at least 2 threads even on 1cpu systems to increase stability
This commit is contained in:
parent
6e3a74b476
commit
0142cf37f0
2
Cargo.lock
generated
2
Cargo.lock
generated
@ -5607,6 +5607,7 @@ version = "0.9.0"
|
||||
dependencies = [
|
||||
"bincode",
|
||||
"hashbrown",
|
||||
"num_cpus",
|
||||
"rayon",
|
||||
"scopeguard",
|
||||
"serde",
|
||||
@ -5766,6 +5767,7 @@ dependencies = [
|
||||
"clap",
|
||||
"crossterm 0.19.0",
|
||||
"lazy_static",
|
||||
"num_cpus",
|
||||
"ron",
|
||||
"serde",
|
||||
"signal-hook 0.3.8",
|
||||
|
@ -18,6 +18,7 @@ common-ecs = { package = "veloren-common-ecs", path = "../ecs" }
|
||||
common-base = { package = "veloren-common-base", path = "../base" }
|
||||
|
||||
rayon = "1.5"
|
||||
num_cpus = "1.0"
|
||||
tracing = { version = "0.1", default-features = false }
|
||||
vek = { version = "=0.14.1", features = ["serde"] }
|
||||
|
||||
|
@ -103,6 +103,9 @@ impl State {
|
||||
|
||||
let thread_pool = Arc::new(
|
||||
ThreadPoolBuilder::new()
|
||||
.num_threads(
|
||||
num_cpus::get().max(2), /* Have AT LEAST 2 rayon threads */
|
||||
)
|
||||
.thread_name(move |i| format!("rayon-{}-{}", thread_name_infix, i))
|
||||
.build()
|
||||
.unwrap(),
|
||||
@ -208,7 +211,7 @@ impl State {
|
||||
ecs.insert(Vec::<common::outcome::Outcome>::new());
|
||||
ecs.insert(common::CachedSpatialGrid::default());
|
||||
|
||||
let slow_limit = thread_pool.current_num_threads().max(2) as u64;
|
||||
let slow_limit = num_cpus::get().max(2) as u64;
|
||||
let slow_limit = slow_limit / 2 + slow_limit / 4;
|
||||
tracing::trace!(?slow_limit, "Slow Thread limit");
|
||||
ecs.insert(SlowJobPool::new(slow_limit, Arc::clone(&thread_pool)));
|
||||
|
@ -28,6 +28,7 @@ common-net = { package = "veloren-common-net", path = "../common/net" }
|
||||
common-frontend = { package = "veloren-common-frontend", path = "../common/frontend" }
|
||||
|
||||
tokio = { version = "1", default-features = false, features = ["rt-multi-thread"] }
|
||||
num_cpus = "1.0"
|
||||
ansi-parser = "0.7"
|
||||
clap = "2.33"
|
||||
crossterm = "0.19"
|
||||
|
@ -117,9 +117,12 @@ fn main() -> io::Result<()> {
|
||||
path
|
||||
};
|
||||
|
||||
// We don't need that many threads in the async pool, at least 2 but generally
|
||||
// 25% of all available will do
|
||||
let runtime = Arc::new(
|
||||
tokio::runtime::Builder::new_multi_thread()
|
||||
.enable_all()
|
||||
.worker_threads((num_cpus::get() / 4).max(2))
|
||||
.thread_name_fn(|| {
|
||||
static ATOMIC_ID: AtomicUsize = AtomicUsize::new(0);
|
||||
let id = ATOMIC_ID.fetch_add(1, Ordering::SeqCst);
|
||||
|
@ -66,7 +66,7 @@ impl ClientInit {
|
||||
Arc::new(
|
||||
runtime::Builder::new_multi_thread()
|
||||
.enable_all()
|
||||
.worker_threads(if cores > 4 { cores - 1 } else { cores })
|
||||
.worker_threads((cores / 4).max(2))
|
||||
.thread_name_fn(|| {
|
||||
static ATOMIC_ID: AtomicUsize = AtomicUsize::new(0);
|
||||
let id = ATOMIC_ID.fetch_add(1, Ordering::SeqCst);
|
||||
|
@ -87,7 +87,7 @@ impl Singleplayer {
|
||||
let runtime = Arc::new(
|
||||
tokio::runtime::Builder::new_multi_thread()
|
||||
.enable_all()
|
||||
.worker_threads(if cores > 4 { cores - 1 } else { cores })
|
||||
.worker_threads((cores / 4).max(2))
|
||||
.thread_name_fn(|| {
|
||||
static ATOMIC_ID: AtomicUsize = AtomicUsize::new(0);
|
||||
let id = ATOMIC_ID.fetch_add(1, Ordering::SeqCst);
|
||||
|
Loading…
Reference in New Issue
Block a user