summaryrefslogtreecommitdiffstats
path: root/kernel/sched
diff options
context:
space:
mode:
authorLiang Chen <cl@rock-chips.com>2020-03-06 08:01:33 +0100
committerPeter Zijlstra <peterz@infradead.org>2020-03-20 13:06:20 +0100
commit26c7295be0c5e6da3fa45970e9748be983175b1b (patch)
treef8343709aea173894a49fd741a90819c5e2c09b8 /kernel/sched
parentsched/fair: Improve spreading of utilization (diff)
downloadlinux-26c7295be0c5e6da3fa45970e9748be983175b1b.tar.xz
linux-26c7295be0c5e6da3fa45970e9748be983175b1b.zip
kthread: Do not preempt current task if it is going to call schedule()
when we create a kthread with ktrhead_create_on_cpu(),the child thread entry is ktread.c:ktrhead() which will be preempted by the parent after call complete(done) while schedule() is not called yet,then the parent will call wait_task_inactive(child) but the child is still on the runqueue, so the parent will schedule_hrtimeout() for 1 jiffy,it will waste a lot of time,especially on startup. parent child ktrhead_create_on_cpu() wait_fo_completion(&done) -----> ktread.c:ktrhead() |----- complete(done);--wakeup and preempted by parent kthread_bind() <------------| |-> schedule();--dequeue here wait_task_inactive(child) | schedule_hrtimeout(1 jiffy) -| So we hope the child just wakeup parent but not preempted by parent, and the child is going to call schedule() soon,then the parent will not call schedule_hrtimeout(1 jiffy) as the child is already dequeue. The same issue for ktrhead_park()&&kthread_parkme(). This patch can save 120ms on rk312x startup with CONFIG_HZ=300. Signed-off-by: Liang Chen <cl@rock-chips.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Reviewed-by: Steven Rostedt (VMware) <rostedt@goodmis.org> Link: https://lkml.kernel.org/r/20200306070133.18335-2-cl@rock-chips.com
Diffstat (limited to 'kernel/sched')
0 files changed, 0 insertions, 0 deletions