use crate::api::{Error, ErrorKind, Result};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum CpuAffinityPolicy {
#[default]
None,
PinWorkers,
NumaLocal,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct AffinityRequest {
pub worker_index: usize,
pub cpus: Vec<usize>,
pub policy: CpuAffinityPolicy,
}
impl AffinityRequest {
pub fn for_worker(policy: CpuAffinityPolicy, worker_index: usize) -> Self {
Self {
worker_index,
cpus: Vec::new(),
policy,
}
}
}
pub fn apply_affinity(req: &AffinityRequest, strict: bool) -> Result<()> {
match req.policy {
CpuAffinityPolicy::None => Ok(()),
CpuAffinityPolicy::PinWorkers | CpuAffinityPolicy::NumaLocal if !strict => Ok(()),
other => Err(Error::new(
ErrorKind::NotImplemented,
format!("CPU affinity policy {other:?} is not yet implemented"),
)),
}
}