summaryrefslogtreecommitdiff
path: root/src/energy
diff options
context:
space:
mode:
Diffstat (limited to 'src/energy')
-rw-r--r--src/energy/budget.rs17
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
}
}