sched/deadline: Support DL task migration during CPU hotplug
authorWanpeng Li <wanpeng.li@linux.intel.com>
Thu, 26 Mar 2015 23:08:35 +0000 (07:08 +0800)
committerIngo Molnar <mingo@kernel.org>
Thu, 2 Apr 2015 15:42:57 +0000 (17:42 +0200)
commitfa9c9d10e97e38d9903fad1829535175ad261f45
tree97e9c6ab665c313a43149e96faf031f2f175ed14
parent3c18d447b3b36a8d3c90dc37dfbd363cdb685d0a
sched/deadline: Support DL task migration during CPU hotplug

I observed that DL tasks can't be migrated to other CPUs during CPU
hotplug, in addition, task may/may not be running again if CPU is
added back.

The root cause which I found is that DL tasks will be throtted and
removed from the DL rq after comsuming all their budget, which
leads to the situation that stop task can't pick them up from the
DL rq and migrate them to other CPUs during hotplug.

The method to reproduce:

  schedtool -E -t 50000:100000 -e ./test

Actually './test' is just a simple for loop. Then observe which CPU the
test task is on and offline it:

  echo 0 > /sys/devices/system/cpu/cpuN/online

This patch adds the DL task migration during CPU hotplug by finding a
most suitable later deadline rq after DL timer fires if current rq is
offline.

If it fails to find a suitable later deadline rq then it falls back to
any eligible online CPU in so that the deadline task will come back
to us, and the push/pull mechanism should then move it around properly.

Suggested-and-Acked-by: Juri Lelli <juri.lelli@arm.com>
Signed-off-by: Wanpeng Li <wanpeng.li@linux.intel.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: http://lkml.kernel.org/r/1427411315-4298-1-git-send-email-wanpeng.li@linux.intel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
kernel/sched/deadline.c