summaryrefslogtreecommitdiff
path: root/src/energy.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/energy.rs')
-rw-r--r--src/energy.rs19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/energy.rs b/src/energy.rs
index 9fe37b5..ed8b65e 100644
--- a/src/energy.rs
+++ b/src/energy.rs
@@ -3,10 +3,12 @@ mod rapl;
mod trackers;
use std::collections::{BTreeSet, HashMap};
-use std::sync::{mpsc, Arc};
+use std::ops::RangeInclusive;
+use std::sync::{mpsc, Arc, RwLock};
use std::thread;
use std::time::Duration;
+use crate::freq::FrequencyKHZ;
use crate::Pid;
use dashmap::DashMap;
@@ -32,6 +34,9 @@ pub struct EnergyService {
shared_budgets: Arc<DashMap<Pid, u64>>,
request_receiver: mpsc::Receiver<Request>,
update_interval: Duration,
+ shared_cpu_frequency_ranges: Arc<RwLock<Vec<RangeInclusive<FrequencyKHZ>>>>,
+ shared_policy_frequency_ranges: Arc<RwLock<Vec<RangeInclusive<FrequencyKHZ>>>>,
+ shared_cpu_current_frequencies: Arc<RwLock<Vec<FrequencyKHZ>>>,
}
impl EnergyService {
@@ -41,6 +46,9 @@ impl EnergyService {
shared_budgets: Arc<DashMap<Pid, u64>>,
request_receiver: mpsc::Receiver<Request>,
update_interval: Duration,
+ shared_cpu_frequency_ranges: Arc<RwLock<Vec<RangeInclusive<FrequencyKHZ>>>>,
+ shared_policy_frequency_ranges: Arc<RwLock<Vec<RangeInclusive<FrequencyKHZ>>>>,
+ shared_cpu_current_frequencies: Arc<RwLock<Vec<FrequencyKHZ>>>,
) -> Self {
Self {
estimator,
@@ -50,6 +58,9 @@ impl EnergyService {
shared_budgets,
request_receiver,
update_interval,
+ shared_cpu_frequency_ranges,
+ shared_policy_frequency_ranges,
+ shared_cpu_current_frequencies,
}
}
@@ -152,6 +163,9 @@ pub fn start_energy_service(
use_mocking: bool,
power_cap: u64,
shared_budgets: Arc<DashMap<Pid, u64>>,
+ shared_cpu_frequency_ranges: Arc<RwLock<Vec<RangeInclusive<FrequencyKHZ>>>>,
+ shared_policy_frequency_ranges: Arc<RwLock<Vec<RangeInclusive<FrequencyKHZ>>>>,
+ shared_cpu_current_frequencies: Arc<RwLock<Vec<FrequencyKHZ>>>,
) -> std::io::Result<mpsc::SyncSender<Request>> {
// Potentially convert back to bounded channel
let (request_sender, request_receiver) = mpsc::sync_channel(10000);
@@ -176,6 +190,9 @@ pub fn start_energy_service(
shared_budgets,
request_receiver,
Duration::from_millis(50), // 50ms update interval
+ shared_cpu_frequency_ranges,
+ shared_policy_frequency_ranges,
+ shared_cpu_current_frequencies,
);
service.run();