diff options
author | Dennis Kobert <dennis@kobert.dev> | 2025-03-31 16:42:17 +0200 |
---|---|---|
committer | Dennis Kobert <dennis@kobert.dev> | 2025-03-31 16:42:17 +0200 |
commit | 90dc696e41db726cb43b5783212bd76872c108b7 (patch) | |
tree | 1ad4da5066d1d79f09c304a8d3007a071f4e98ef | |
parent | 5572834e86dc24284e8bd9e063936004adf02894 (diff) |
Peridiodcally intersperse tasks from no budget queue
-rw-r--r-- | src/scheduler.rs | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/scheduler.rs b/src/scheduler.rs index e0530b5..05a4986 100644 --- a/src/scheduler.rs +++ b/src/scheduler.rs @@ -31,6 +31,7 @@ pub struct Scheduler<'a> { no_budget_task_queue: VecDeque<QueuedTask>, managed_tasks: HashMap<Pid, Task>, maximum_budget: u64, + tasks_scheduled: u64, own_pid: Pid, p_cores: Range<i32>, e_cores: Range<i32>, @@ -117,6 +118,7 @@ impl<'a> Scheduler<'a> { maximum_budget: u64::MAX, own_pid: process::id() as i32, p_cores, + tasks_scheduled: 0, e_cores, topology, e_core_selector: selector, @@ -186,6 +188,7 @@ impl<'a> Scheduler<'a> { } fn dispatch_next_task(&mut self) { + self.tasks_scheduled += 1; if let Some(task) = self.task_queue.pop_front() { let mut dispatched_task = DispatchedTask::new(&task); //TODO: do we have to migrate tasks back from e cores? @@ -212,7 +215,11 @@ impl<'a> Scheduler<'a> { self.bpf.notify_complete( self.task_queue.len() as u64 + self.no_budget_task_queue.len() as u64, ); - } else if let Some(task) = self.no_budget_task_queue.pop_front() { + } + if !(self.task_queue.is_empty() || self.tasks_scheduled % 10 == 0) { + return; + } + if let Some(task) = self.no_budget_task_queue.pop_front() { let mut dispatched_task = DispatchedTask::new(&task); // Low budget tasks go to e-cores |