mod bpf_skel; pub use bpf_skel::*; pub mod bpf_intf; mod e_core_selector; mod energy; mod scheduler; #[rustfmt::skip] mod bpf; use anyhow::Result; use clap::{Arg, ArgAction, Command}; use scheduler::Scheduler; use std::mem::MaybeUninit; type Pid = i32; fn main() -> Result<()> { let matches = Command::new("Energy User Space Scheduler") .arg( Arg::new("mock") .short('m') .long("mock") .help("Use this flag if to activate kernel module mocking") .action(ArgAction::SetTrue) .required(false), ) .arg( Arg::new("power_cap") .long("energy_cap") .help("Set a power cap for the processor") .required(false) .value_name("power in watts"), ) .get_matches(); let power_cap = *matches.get_one::("power_cap").unwrap_or(&u64::MAX); let use_mocking = matches.get_flag("mock"); // Initialize and load the scheduler. let mut open_object = MaybeUninit::uninit(); loop { let mut sched = Scheduler::init(&mut open_object, use_mocking, power_cap)?; if !sched.run()?.should_restart() { break; } } Ok(()) }