summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDennis Kobert <dennis@kobert.dev>2025-04-17 16:52:05 +0200
committerDennis Kobert <dennis@kobert.dev>2025-04-17 16:52:05 +0200
commitf7049b9c98c3e6ec1dbe3208ccbfbd008503c60d (patch)
tree124777338e258bdeef73babaaff867c156c57572
parent654c6779adc495235621e41be6cc0000d0a88dce (diff)
Tweak values
-rw-r--r--src/energy.rs3
-rw-r--r--src/energy/budget.rs17
-rw-r--r--src/scheduler.rs3
-rw-r--r--src/socket.rs2
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)