mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
High priority rayon threads (if they're pinned).
This commit is contained in:
parent
ac5ae40baf
commit
cec414cd25
17
Cargo.lock
generated
17
Cargo.lock
generated
@ -3053,9 +3053,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.121"
|
version = "0.2.132"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "efaa7b300f3b5fe8eb6bf21ce3895e1751d9665086af2d64b42f19701015ff4f"
|
checksum = "8371e4e5341c3a96db127eb2465ac681ced4c433e01dd0e938adbef26ba93ba5"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libgit2-sys"
|
name = "libgit2-sys"
|
||||||
@ -6079,6 +6079,18 @@ dependencies = [
|
|||||||
"syn 1.0.90",
|
"syn 1.0.90",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "thread-priority"
|
||||||
|
version = "0.9.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5a8a950b52fd40d98ac6ed41c7fa9e8dd62b131f48b74f418e810476b01a7460"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if 1.0.0",
|
||||||
|
"libc",
|
||||||
|
"log",
|
||||||
|
"winapi 0.3.9",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "thread_local"
|
name = "thread_local"
|
||||||
version = "1.1.4"
|
version = "1.1.4"
|
||||||
@ -6705,6 +6717,7 @@ dependencies = [
|
|||||||
"serde",
|
"serde",
|
||||||
"specs",
|
"specs",
|
||||||
"tar",
|
"tar",
|
||||||
|
"thread-priority",
|
||||||
"toml",
|
"toml",
|
||||||
"tracing",
|
"tracing",
|
||||||
"vek 0.15.8",
|
"vek 0.15.8",
|
||||||
|
@ -19,6 +19,7 @@ common-base = { package = "veloren-common-base", path = "../base" }
|
|||||||
core_affinity = "0.5"
|
core_affinity = "0.5"
|
||||||
rayon = "1.5"
|
rayon = "1.5"
|
||||||
num_cpus = "1.0"
|
num_cpus = "1.0"
|
||||||
|
thread-priority = { version = "0.9.2" }
|
||||||
tracing = { version = "0.1", default-features = false }
|
tracing = { version = "0.1", default-features = false }
|
||||||
vek = { version = "0.15.8", features = ["serde"] }
|
vek = { version = "0.15.8", features = ["serde"] }
|
||||||
|
|
||||||
|
@ -35,6 +35,7 @@ use specs::{
|
|||||||
storage::{MaskedStorage as EcsMaskedStorage, Storage as EcsStorage},
|
storage::{MaskedStorage as EcsMaskedStorage, Storage as EcsStorage},
|
||||||
Component, DispatcherBuilder, Entity as EcsEntity, WorldExt,
|
Component, DispatcherBuilder, Entity as EcsEntity, WorldExt,
|
||||||
};
|
};
|
||||||
|
use thread_priority::{ThreadBuilder, ThreadPriority};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use vek::*;
|
use vek::*;
|
||||||
|
|
||||||
@ -124,11 +125,28 @@ impl State {
|
|||||||
GameMode::Singleplayer => num_cpu / 4,
|
GameMode::Singleplayer => num_cpu / 4,
|
||||||
}*/num_cpu.max(common::consts::MIN_RECOMMENDED_RAYON_THREADS);
|
}*/num_cpu.max(common::consts::MIN_RECOMMENDED_RAYON_THREADS);
|
||||||
let core_ids = /*(rayon_threads >= 16).then(|| */core_affinity::get_core_ids().unwrap_or(vec![])/*).unwrap_or(vec![])*/;
|
let core_ids = /*(rayon_threads >= 16).then(|| */core_affinity::get_core_ids().unwrap_or(vec![])/*).unwrap_or(vec![])*/;
|
||||||
|
let core_count = core_ids.len();
|
||||||
let rayon_pool = Arc::new(
|
let rayon_pool = Arc::new(
|
||||||
ThreadPoolBuilder::new()
|
ThreadPoolBuilder::new()
|
||||||
.num_threads(rayon_threads/*.saturating_sub(rayon_offset)*/)
|
.num_threads(rayon_threads/*.saturating_sub(rayon_offset)*/)
|
||||||
// .thread_name(move |i| format!("rayon-{}", i))
|
// .thread_name(move |i| format!("rayon-{}", i))
|
||||||
.thread_name(move |i| format!("rayon-{}-{}", thread_name_infix, i))
|
.thread_name(move |i| format!("rayon-{}-{}", thread_name_infix, i))
|
||||||
|
.spawn_handler(move |thread| {
|
||||||
|
let mut b = ThreadBuilder::default();
|
||||||
|
if let Some(name) = thread.name() {
|
||||||
|
b = b.name(name.to_owned());
|
||||||
|
}
|
||||||
|
if let Some(stack_size) = thread.stack_size() {
|
||||||
|
b = b.stack_size(stack_size);
|
||||||
|
}
|
||||||
|
// pinned rayon threads run with high priority
|
||||||
|
let index = thread.index();
|
||||||
|
if index.checked_sub(rayon_offset).map_or(false, |i| i < core_count) {
|
||||||
|
b = b.priority(ThreadPriority::Max);
|
||||||
|
}
|
||||||
|
b.spawn_careless(|| thread.run())?;
|
||||||
|
Ok(())
|
||||||
|
})
|
||||||
.start_handler(move |i| {
|
.start_handler(move |i| {
|
||||||
if let Some(&core_id) = i.checked_sub(rayon_offset).and_then(|i| core_ids.get(i)) {
|
if let Some(&core_id) = i.checked_sub(rayon_offset).and_then(|i| core_ids.get(i)) {
|
||||||
core_affinity::set_for_current(core_id);
|
core_affinity::set_for_current(core_id);
|
||||||
|
@ -1 +1 @@
|
|||||||
nightly-2022-08-18
|
nightly-2022-09-08
|
||||||
|
Loading…
Reference in New Issue
Block a user