use { c::sched_setscheduler, std::{ env, mem, sync::atomic::{AtomicBool, Ordering::Relaxed}, }, uapi::c::{self, SCHED_RESET_ON_FORK, SCHED_RR, sched_param}, }; static DID_ELEVATE_SCHEDULER: AtomicBool = AtomicBool::new(false); pub const JAY_NO_REALTIME: &str = "JAY_NO_REALTIME"; pub fn elevate_scheduler() { if env::var(JAY_NO_REALTIME).as_deref().unwrap_or_default() == "1" { return; } let mut param = unsafe { mem::zeroed::() }; param.sched_priority = 1; let res = unsafe { sched_setscheduler(0, SCHED_RR | SCHED_RESET_ON_FORK, ¶m) }; if res == 0 { DID_ELEVATE_SCHEDULER.store(true, Relaxed); } } pub fn did_elevate_scheduler() -> bool { DID_ELEVATE_SCHEDULER.load(Relaxed) }