mirror of
https://github.com/JakeHillion/scx.git
synced 2024-10-29 18:42:19 +00:00
scx_rustland: bypass user-space scheduler for short-lived kthreads
Bypass the user-space scheduler for kthreads that still have more than half of their runtime budget. As they are likely to release the CPU soon, granting them a substantial priority boost can enhance the overall system performance. In the event that one of these kthreads turns into a CPU hog, it will deplete its runtime budget and therefore it will be scheduled like any other normal task through the user-space scheduler. Signed-off-by: Andrea Righi <andrea.righi@canonical.com>
This commit is contained in:
parent
405a11308e
commit
a7677fdf28
@ -314,7 +314,7 @@ static bool is_task_cpu_available(struct task_struct *p, u64 enq_flags)
|
|||||||
struct task_ctx *tctx;
|
struct task_ctx *tctx;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Always dispatch per-CPU kthread on the same CPU, bypassing the
|
* Always dispatch per-CPU kthreads on the same CPU, bypassing the
|
||||||
* user-space scheduler (in this way we can to prioritize critical
|
* user-space scheduler (in this way we can to prioritize critical
|
||||||
* kernel threads that may potentially slow down the entire system if
|
* kernel threads that may potentially slow down the entire system if
|
||||||
* they are blocked for too long).
|
* they are blocked for too long).
|
||||||
@ -322,6 +322,19 @@ static bool is_task_cpu_available(struct task_struct *p, u64 enq_flags)
|
|||||||
if (is_kthread(p) && p->nr_cpus_allowed == 1)
|
if (is_kthread(p) && p->nr_cpus_allowed == 1)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Moreover, immediately dispatch kthreads that still have more than
|
||||||
|
* half of their runtime budget. As they are likely to release the CPU
|
||||||
|
* soon, granting them a substantial priority boost can enhance the
|
||||||
|
* overall system performance.
|
||||||
|
*
|
||||||
|
* In the event that one of these kthreads turns into a CPU hog, it
|
||||||
|
* will deplete its runtime budget and therefore it will be scheduled
|
||||||
|
* like any other normal task.
|
||||||
|
*/
|
||||||
|
if (is_kthread(p) && p->scx.slice > slice_ns / 2)
|
||||||
|
return true;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* No scheduling required if it's the last task running.
|
* No scheduling required if it's the last task running.
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user