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::Arc;
|
||||
|
||||
use std::time::{Duration, SystemTime};
|
||||
use std::time::SystemTime;
|
||||
|
||||
use anyhow::Result;
|
||||
|
||||
@ -46,17 +46,14 @@ impl<'a> Scheduler<'a> {
|
||||
// case we can simply ignore the task.
|
||||
if task.cpu >= 0 {
|
||||
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();
|
||||
}
|
||||
}
|
||||
Ok(None) => {
|
||||
// Notify the BPF component that all tasks have been scheduled and dispatched.
|
||||
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;
|
||||
}
|
||||
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) {
|
||||
|
Loading…
Reference in New Issue
Block a user