Messages in this thread |  | | Date | Mon, 3 Feb 2020 11:14:51 -0500 | From | Steven Rostedt <> | Subject | Re: [PATCH v2] sched: rt: Make RT capacity aware |
| |
On Mon, 3 Feb 2020 14:27:14 +0000 Qais Yousef <qais.yousef@arm.com> wrote:
> I don't see one right answer here. The current mechanism could certainly do > better; but it's not clear what better means without delving into system > specific details. I am open to any suggestions to improve it.
The way I see this is that if there's no big cores available but little cores are, and the RT task has those cores in its affinity mask then the task most definitely should consider moving to the little core. The cpu_find() should return them!
But, what we can do is to mark the little core that's running an RT task on a it that prefers bigger cores, as "rt-overloaded". This will add this core into the being looked at when another core schedules out an RT task. When that happens, the RT task on the little core will get pulled back to the big core.
Here's what I propose.
1. Scheduling of an RT task that wants big cores, but has little cores in its affinity.
2. Calls cpu_find() which will look to place it first on a big core, if there's a core that is running a task that is lower priority than itself.
3. If all the big cores have RT tasks it can not preempt, look to find a little core.
4. If a little core is returned, and we schedule an RT task that prefers big cores on it, we mark it overloaded.
5. An RT task on a big core schedules out. Start looking at the RT overloaded run queues.
6. See that there's an RT task on the little core, and migrate it over.
Note, this will require a bit more logic as the overloaded code wasn't designed for migration of running tasks, but that could be added.
-- Steve
|  |