diff options
Diffstat (limited to 'src/energy')
-rw-r--r-- | src/energy/budget.rs | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/energy/budget.rs b/src/energy/budget.rs index 6356132..d7c38c3 100644 --- a/src/energy/budget.rs +++ b/src/energy/budget.rs @@ -5,7 +5,7 @@ use std::sync::Arc; use super::rapl; -pub const MAX_BUDGET_MJ: i64 = 30_000; +pub const MAX_BUDGET_MJ: i64 = 10_000; pub struct SimpleCappingPolicy { power_cap: Arc<AtomicU32>, @@ -26,7 +26,7 @@ impl SimpleCappingPolicy { } impl SimpleCappingPolicy { - pub fn calculate_budgets(&mut self, energy_service: &mut EnergyService) -> i64 { + pub fn calculate_budgets(&mut self, energy_service: &EnergyService) -> i64 { let active_processes = energy_service.active_processes.len(); let rapl = rapl::read_package_energy().unwrap(); let actual_energy = rapl - self.last_energy; @@ -38,8 +38,15 @@ impl SimpleCappingPolicy { let base_energy_per_process = energy_cap / active_processes as f64; let ratio = energy_cap / actual_energy * self.last_ratio; - self.last_ratio = ratio.clamp(0.001, 1000.0); - - (((ratio * base_energy_per_process) * 1000.) as i64).min(MAX_BUDGET_MJ) + if self.last_ratio > ratio { + self.last_ratio = 0.9 * self.last_ratio + 0.1 * ratio.clamp(0.001, 100.0); + } else { + self.last_ratio = 0.99 * self.last_ratio + 0.01 * ratio.clamp(0.001, 100.0); + } + let a = (((self.last_ratio * base_energy_per_process) * 1000.) as i64).min(MAX_BUDGET_MJ); + // println!( + // "budget: {a} ration: {ratio} actual_energy: {actual_energy} energy_cap: {energy_cap}" + // ); + a } } |