Move CoreAffinityConfig to aquatic_common, use in glommio http

This commit is contained in:
Joakim Frostegård 2021-10-27 20:19:02 +02:00
parent 8747f8de4e
commit d659117ae5
7 changed files with 37 additions and 23 deletions

1
Cargo.lock generated
View file

@ -92,6 +92,7 @@ dependencies = [
"aquatic_common", "aquatic_common",
"aquatic_http_protocol", "aquatic_http_protocol",
"cfg-if", "cfg-if",
"core_affinity",
"crossbeam-channel", "crossbeam-channel",
"either", "either",
"futures-lite", "futures-lite",

View file

@ -0,0 +1,17 @@
use serde::{Serialize, Deserialize};
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(default)]
pub struct CoreAffinityConfig {
pub set_affinities: bool,
pub offset: usize,
}
impl Default for CoreAffinityConfig {
fn default() -> Self {
Self {
set_affinities: false,
offset: 0,
}
}
}

View file

@ -5,6 +5,7 @@ use indexmap::IndexMap;
use rand::Rng; use rand::Rng;
pub mod access_list; pub mod access_list;
pub mod cpu_pinning;
/// Peer or connection valid until this instant /// Peer or connection valid until this instant
/// ///

View file

@ -26,6 +26,7 @@ aquatic_cli_helpers = "0.1.0"
aquatic_common = "0.1.0" aquatic_common = "0.1.0"
aquatic_http_protocol = "0.1.0" aquatic_http_protocol = "0.1.0"
cfg-if = "1" cfg-if = "1"
core_affinity = "0.5"
either = "1" either = "1"
hashbrown = "0.11.2" hashbrown = "0.11.2"
indexmap = "1" indexmap = "1"

View file

@ -1,6 +1,7 @@
use std::{net::SocketAddr, path::PathBuf}; use std::{net::SocketAddr, path::PathBuf};
use aquatic_common::access_list::AccessListConfig; use aquatic_common::access_list::AccessListConfig;
use aquatic_common::cpu_pinning::CoreAffinityConfig;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use aquatic_cli_helpers::LogLevel; use aquatic_cli_helpers::LogLevel;
@ -23,6 +24,7 @@ pub struct Config {
pub statistics: StatisticsConfig, pub statistics: StatisticsConfig,
pub privileges: PrivilegeConfig, pub privileges: PrivilegeConfig,
pub access_list: AccessListConfig, pub access_list: AccessListConfig,
pub core_affinity: CoreAffinityConfig,
} }
impl aquatic_cli_helpers::Config for Config { impl aquatic_cli_helpers::Config for Config {
@ -116,6 +118,7 @@ impl Default for Config {
statistics: StatisticsConfig::default(), statistics: StatisticsConfig::default(),
privileges: PrivilegeConfig::default(), privileges: PrivilegeConfig::default(),
access_list: AccessListConfig::default(), access_list: AccessListConfig::default(),
core_affinity: CoreAffinityConfig::default(),
} }
} }
} }

View file

@ -16,6 +16,12 @@ mod network;
const SHARED_CHANNEL_SIZE: usize = 1024; const SHARED_CHANNEL_SIZE: usize = 1024;
pub fn run(config: Config) -> anyhow::Result<()> { pub fn run(config: Config) -> anyhow::Result<()> {
if config.core_affinity.set_affinities {
core_affinity::set_for_current(core_affinity::CoreId {
id: config.core_affinity.offset,
});
}
let access_list = if config.access_list.mode.is_on() { let access_list = if config.access_list.mode.is_on() {
AccessList::create_from_path(&config.access_list.path).expect("Load access list") AccessList::create_from_path(&config.access_list.path).expect("Load access list")
} else { } else {
@ -43,9 +49,9 @@ pub fn run(config: Config) -> anyhow::Result<()> {
let mut builder = LocalExecutorBuilder::default(); let mut builder = LocalExecutorBuilder::default();
// if config.core_affinity.set_affinities { if config.core_affinity.set_affinities {
// builder = builder.pin_to_cpu(config.core_affinity.offset + 1 + i); builder = builder.pin_to_cpu(config.core_affinity.offset + 1 + i);
// } }
let executor = builder.spawn(|| async move { let executor = builder.spawn(|| async move {
network::run_socket_worker( network::run_socket_worker(
@ -70,10 +76,10 @@ pub fn run(config: Config) -> anyhow::Result<()> {
let mut builder = LocalExecutorBuilder::default(); let mut builder = LocalExecutorBuilder::default();
// if config.core_affinity.set_affinities { if config.core_affinity.set_affinities {
// builder = builder =
// builder.pin_to_cpu(config.core_affinity.offset + 1 + config.socket_workers + i); builder.pin_to_cpu(config.core_affinity.offset + 1 + config.socket_workers + i);
// } }
let executor = builder.spawn(|| async move { let executor = builder.spawn(|| async move {
handlers::run_request_worker( handlers::run_request_worker(

View file

@ -1,6 +1,7 @@
use std::net::SocketAddr; use std::net::SocketAddr;
use aquatic_common::access_list::AccessListConfig; use aquatic_common::access_list::AccessListConfig;
use aquatic_common::cpu_pinning::CoreAffinityConfig;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use aquatic_cli_helpers::LogLevel; use aquatic_cli_helpers::LogLevel;
@ -109,13 +110,6 @@ pub struct PrivilegeConfig {
pub user: String, pub user: String,
} }
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(default)]
pub struct CoreAffinityConfig {
pub set_affinities: bool,
pub offset: usize,
}
impl Default for Config { impl Default for Config {
fn default() -> Self { fn default() -> Self {
Self { Self {
@ -193,12 +187,3 @@ impl Default for PrivilegeConfig {
} }
} }
} }
impl Default for CoreAffinityConfig {
fn default() -> Self {
Self {
set_affinities: false,
offset: 0,
}
}
}