#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct CoreId(core_affinity::CoreId);
impl CoreId {
pub fn id(self) -> usize {
self.0.id
}
}
impl std::fmt::Display for CoreId {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.0.id)
}
}
pub fn cores() -> Vec<CoreId> {
let cores = core_affinity::get_core_ids().unwrap_or_default();
if cores.is_empty() {
tracing::warn!("could not enumerate CPU cores; workers will not be pinned");
}
cores.into_iter().map(CoreId).collect()
}
pub fn pin(core: CoreId) -> bool {
core_affinity::set_for_current(core.0)
}