mirror of
https://github.com/JakeHillion/scx.git
synced 2024-11-29 20:50:22 +00:00
scx_rlfifo: replace 1ms sleep with sched_yield()
Small improvement to make the scheduler a bit more responsive, without introducing too much complexity or too much CPU overhead. This can be achieved by replacing a sleep of 1ms with a sched_yield() every time that the scheduler has finished to dispatch all the queued tasks. This also makes the code a bit smaller and easier to read. Signed-off-by: Andrea Righi <andrea.righi@canonical.com>
This commit is contained in:
parent
db17905930
commit
fe19754132
@ -15,7 +15,7 @@ use std::sync::atomic::AtomicBool;
|
|||||||
use std::sync::atomic::Ordering;
|
use std::sync::atomic::Ordering;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use std::time::{Duration, SystemTime};
|
use std::time::SystemTime;
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
|
|
||||||
@ -46,17 +46,14 @@ impl<'a> Scheduler<'a> {
|
|||||||
// case we can simply ignore the task.
|
// case we can simply ignore the task.
|
||||||
if task.cpu >= 0 {
|
if task.cpu >= 0 {
|
||||||
let _ = self.bpf.dispatch_task(&DispatchedTask::new(&task));
|
let _ = self.bpf.dispatch_task(&DispatchedTask::new(&task));
|
||||||
|
|
||||||
|
// Give the task a chance to run and prevent overflowing the dispatch queue.
|
||||||
|
std::thread::yield_now();
|
||||||
}
|
}
|
||||||
// Give the task a chance to run and prevent overflowing the dispatch queue.
|
|
||||||
std::thread::yield_now();
|
|
||||||
}
|
}
|
||||||
Ok(None) => {
|
Ok(None) => {
|
||||||
// Notify the BPF component that all tasks have been scheduled and dispatched.
|
// Notify the BPF component that all tasks have been scheduled and dispatched.
|
||||||
self.bpf.update_tasks(Some(0), Some(0));
|
self.bpf.update_tasks(Some(0), Some(0));
|
||||||
|
|
||||||
// All queued tasks have been dipatched, add a short sleep to reduce
|
|
||||||
// scheduler's CPU consuption.
|
|
||||||
std::thread::sleep(Duration::from_millis(1));
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
@ -64,6 +61,8 @@ impl<'a> Scheduler<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// All queued tasks have been dipatched, yield to reduce scheduler's CPU consumption.
|
||||||
|
std::thread::yield_now();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn print_stats(&mut self) {
|
fn print_stats(&mut self) {
|
||||||
|
Loading…
Reference in New Issue
Block a user