diff options
author | Dennis Kobert <dennis@kobert.dev> | 2025-04-17 16:52:05 +0200 |
---|---|---|
committer | Dennis Kobert <dennis@kobert.dev> | 2025-04-17 16:52:05 +0200 |
commit | f7049b9c98c3e6ec1dbe3208ccbfbd008503c60d (patch) | |
tree | 124777338e258bdeef73babaaff867c156c57572 | |
parent | 654c6779adc495235621e41be6cc0000d0a88dce (diff) |
Tweak values
-rw-r--r-- | src/energy.rs | 3 | ||||
-rw-r--r-- | src/energy/budget.rs | 17 | ||||
-rw-r--r-- | src/scheduler.rs | 3 | ||||
-rw-r--r-- | src/socket.rs | 2 |
4 files changed, 16 insertions, 9 deletions
diff --git a/src/energy.rs b/src/energy.rs index 9f218e7..754ecac 100644 --- a/src/energy.rs +++ b/src/energy.rs @@ -1,4 +1,4 @@ -mod budget; +pub mod budget; pub mod estimator; pub mod rapl; mod trackers; @@ -260,6 +260,7 @@ impl EnergyService { .map(|info| info.tree_energy_j) .unwrap_or(0.); let elapsed = self.last_measurement.elapsed(); + let mut i = 0; for pid in &self.active_processes { let mut process_info = self.process_info.write().unwrap(); if let Some(info) = process_info.get_mut(pid) { 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 } } diff --git a/src/scheduler.rs b/src/scheduler.rs index dfd879b..8909d57 100644 --- a/src/scheduler.rs +++ b/src/scheduler.rs @@ -191,7 +191,7 @@ impl<'a> Scheduler<'a> { task.weight = 0; self.no_budget_task_queue.push_back(task) } - x if x < 1000 => { + x if x < energy::budget::MAX_BUDGET_MJ / 10 => { task.weight = 0; self.task_queue.push_back(task) } @@ -212,7 +212,6 @@ impl<'a> Scheduler<'a> { if cpu >= 0 { dispatched_task.cpu = cpu; } else { - //dispatched_task.cpu = self.p_core_selector.next_core(task.cpu); dispatched_task.flags |= RL_CPU_ANY as u64; } diff --git a/src/socket.rs b/src/socket.rs index ce3fbdc..13f7a1d 100644 --- a/src/socket.rs +++ b/src/socket.rs @@ -97,7 +97,7 @@ pub fn start_logging_socket_service( if Path::new(path).exists() { fs::remove_file(path)?; } - let arc = Arc::new(AtomicU32::new(100)); + let arc = Arc::new(AtomicU32::new(50)); let socket = LoggingSocketService::new(path, process_info, arc.clone()); socket.run(); Ok(arc) |