mirror of
https://github.com/YGGverse/aquatic.git
synced 2026-03-31 17:55:36 +00:00
Move CoreAffinityConfig to aquatic_common, use in glommio http
This commit is contained in:
parent
8747f8de4e
commit
d659117ae5
7 changed files with 37 additions and 23 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
|
@ -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",
|
||||||
|
|
|
||||||
17
aquatic_common/src/cpu_pinning.rs
Normal file
17
aquatic_common/src/cpu_pinning.rs
Normal 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,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
///
|
///
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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(
|
||||||
|
|
|
||||||
|
|
@ -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,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue