Feature-gate CPU pinning, since it only works on Linux

This commit is contained in:
Joakim Frostegård 2021-11-09 11:40:16 +01:00
parent c90c82fb5c
commit 4f8328b70a
22 changed files with 77 additions and 19 deletions

View file

@ -17,6 +17,7 @@ path = "src/bin/main.rs"
[features]
default = ["with-mio"]
cpu-pinning = ["aquatic_common/cpu-pinning"]
with-glommio = ["async-tungstenite", "futures-lite", "futures", "futures-rustls", "glommio", "rustls-pemfile"]
with-mio = ["crossbeam-channel", "histogram", "mio", "native-tls", "parking_lot", "socket2"]

View file

@ -2,6 +2,7 @@ use std::net::SocketAddr;
#[cfg(feature = "with-glommio")]
use std::path::PathBuf;
#[cfg(feature = "cpu-pinning")]
use aquatic_common::cpu_pinning::CpuPinningConfig;
use aquatic_common::{access_list::AccessListConfig, privileges::PrivilegeConfig};
use serde::{Deserialize, Serialize};
@ -26,6 +27,7 @@ pub struct Config {
pub cleaning: CleaningConfig,
pub privileges: PrivilegeConfig,
pub access_list: AccessListConfig,
#[cfg(feature = "cpu-pinning")]
pub cpu_pinning: CpuPinningConfig,
#[cfg(feature = "with-mio")]
pub statistics: StatisticsConfig,
@ -118,6 +120,7 @@ impl Default for Config {
cleaning: CleaningConfig::default(),
privileges: PrivilegeConfig::default(),
access_list: AccessListConfig::default(),
#[cfg(feature = "cpu-pinning")]
cpu_pinning: Default::default(),
#[cfg(feature = "with-mio")]
statistics: Default::default(),

View file

@ -9,10 +9,9 @@ use std::{
};
use crate::config::Config;
use aquatic_common::{
cpu_pinning::{pin_current_if_configured_to, WorkerIndex},
privileges::drop_privileges_after_socket_binding,
};
#[cfg(feature = "cpu-pinning")]
use aquatic_common::cpu_pinning::{pin_current_if_configured_to, WorkerIndex};
use aquatic_common::privileges::drop_privileges_after_socket_binding;
use self::common::*;
@ -41,6 +40,7 @@ pub fn run_inner(config: Config, state: State) -> anyhow::Result<()> {
let num_bound_sockets = num_bound_sockets.clone();
let executor = LocalExecutorBuilder::default().spawn(move || async move {
#[cfg(feature = "cpu-pinning")]
pin_current_if_configured_to(
&config.cpu_pinning,
config.socket_workers,
@ -68,6 +68,7 @@ pub fn run_inner(config: Config, state: State) -> anyhow::Result<()> {
let response_mesh_builder = response_mesh_builder.clone();
let executor = LocalExecutorBuilder::default().spawn(move || async move {
#[cfg(feature = "cpu-pinning")]
pin_current_if_configured_to(
&config.cpu_pinning,
config.socket_workers,
@ -88,6 +89,7 @@ pub fn run_inner(config: Config, state: State) -> anyhow::Result<()> {
)
.unwrap();
#[cfg(feature = "cpu-pinning")]
pin_current_if_configured_to(
&config.cpu_pinning,
config.socket_workers,

View file

@ -1,7 +1,6 @@
use aquatic_common::{
access_list::update_access_list,
cpu_pinning::{pin_current_if_configured_to, WorkerIndex},
};
#[cfg(feature = "cpu-pinning")]
use aquatic_common::cpu_pinning::{pin_current_if_configured_to, WorkerIndex};
use aquatic_common::access_list::update_access_list;
use cfg_if::cfg_if;
use signal_hook::{consts::SIGUSR1, iterator::Signals};
@ -42,6 +41,7 @@ pub fn run(config: Config) -> ::anyhow::Result<()> {
);
}
#[cfg(feature = "cpu-pinning")]
pin_current_if_configured_to(
&config.cpu_pinning,
config.socket_workers,

View file

@ -5,6 +5,7 @@ use std::thread::Builder;
use std::time::Duration;
use anyhow::Context;
#[cfg(feature = "cpu-pinning")]
use aquatic_common::cpu_pinning::{pin_current_if_configured_to, WorkerIndex};
use histogram::Histogram;
use mio::{Poll, Waker};
@ -26,6 +27,7 @@ pub fn run(config: Config, state: State) -> anyhow::Result<()> {
// TODO: privdrop here instead
#[cfg(feature = "cpu-pinning")]
pin_current_if_configured_to(
&config.cpu_pinning,
config.socket_workers,
@ -76,6 +78,7 @@ pub fn start_workers(config: Config, state: State) -> anyhow::Result<()> {
Builder::new()
.name(format!("socket-{:02}", i + 1))
.spawn(move || {
#[cfg(feature = "cpu-pinning")]
pin_current_if_configured_to(
&config.cpu_pinning,
config.socket_workers,
@ -134,6 +137,7 @@ pub fn start_workers(config: Config, state: State) -> anyhow::Result<()> {
Builder::new()
.name(format!("request-{:02}", i + 1))
.spawn(move || {
#[cfg(feature = "cpu-pinning")]
pin_current_if_configured_to(
&config.cpu_pinning,
config.socket_workers,
@ -157,6 +161,7 @@ pub fn start_workers(config: Config, state: State) -> anyhow::Result<()> {
Builder::new()
.name("statistics".to_string())
.spawn(move || {
#[cfg(feature = "cpu-pinning")]
pin_current_if_configured_to(
&config.cpu_pinning,
config.socket_workers,