Improve CPU pinning

This commit is contained in:
Joakim Frostegård 2022-03-30 22:33:23 +02:00
parent 5057ba73bd
commit fb607ac0c2
20 changed files with 219 additions and 143 deletions

View file

@ -12,13 +12,10 @@ readme = "../README.md"
[[bin]]
name = "aquatic_ws_load_test"
[features]
cpu-pinning = ["aquatic_common/cpu-pinning"]
[dependencies]
async-tungstenite = "0.17"
aquatic_cli_helpers = "0.2.0"
aquatic_common = "0.2.0"
aquatic_common = { version = "0.2.0", features = ["with-glommio"] }
aquatic_toml_config = "0.2.0"
aquatic_ws_protocol = "0.2.0"

View file

@ -1,7 +1,6 @@
use std::net::SocketAddr;
use aquatic_cli_helpers::LogLevel;
#[cfg(feature = "cpu-pinning")]
use aquatic_common::cpu_pinning::CpuPinningConfig;
use aquatic_toml_config::TomlConfig;
use serde::Deserialize;
@ -17,7 +16,6 @@ pub struct Config {
pub connection_creation_interval_ms: u64,
pub duration: usize,
pub torrents: TorrentConfig,
#[cfg(feature = "cpu-pinning")]
pub cpu_pinning: CpuPinningConfig,
}
@ -37,7 +35,6 @@ impl Default for Config {
connection_creation_interval_ms: 10,
duration: 0,
torrents: TorrentConfig::default(),
#[cfg(feature = "cpu-pinning")]
cpu_pinning: CpuPinningConfig::default_for_load_test(),
}
}

View file

@ -2,8 +2,8 @@ use std::sync::{atomic::Ordering, Arc};
use std::thread;
use std::time::{Duration, Instant};
#[cfg(feature = "cpu-pinning")]
use aquatic_common::cpu_pinning::{pin_current_if_configured_to, WorkerIndex};
use aquatic_common::cpu_pinning::glommio::{get_worker_placement, set_affinity_for_util_worker};
use aquatic_common::cpu_pinning::WorkerIndex;
use glommio::LocalExecutorBuilder;
use rand::prelude::*;
use rand_distr::Pareto;
@ -59,26 +59,23 @@ fn run(config: Config) -> ::anyhow::Result<()> {
let tls_config = tls_config.clone();
let state = state.clone();
LocalExecutorBuilder::default()
.spawn(move || async move {
#[cfg(feature = "cpu-pinning")]
pin_current_if_configured_to(
&config.cpu_pinning,
config.num_workers,
WorkerIndex::SocketWorker(i),
);
let placement = get_worker_placement(
&config.cpu_pinning,
config.num_workers,
0,
WorkerIndex::SocketWorker(i),
)?;
LocalExecutorBuilder::new(placement)
.spawn(move || async move {
run_socket_thread(config, tls_config, state).await.unwrap();
})
.unwrap();
}
#[cfg(feature = "cpu-pinning")]
pin_current_if_configured_to(
&config.cpu_pinning,
config.num_workers as usize,
WorkerIndex::Other,
);
if config.cpu_pinning.active {
set_affinity_for_util_worker(&config.cpu_pinning, config.num_workers, 0)?;
}
monitor_statistics(state, &config);