From 90dc696e41db726cb43b5783212bd76872c108b7 Mon Sep 17 00:00:00 2001 From: Dennis Kobert Date: Mon, 31 Mar 2025 16:42:17 +0200 Subject: Peridiodcally intersperse tasks from no budget queue --- src/scheduler.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src') 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, managed_tasks: HashMap, maximum_budget: u64, + tasks_scheduled: u64, own_pid: Pid, p_cores: Range, e_cores: Range, @@ -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 -- cgit v1.3.1