Re: [PATCH v2] Pre-emption control for userspace

From: Khalid Aziz
Date: Tue Mar 25 2014 - 17:38:31 EST


On 03/25/2014 02:31 PM, ebiederm@xxxxxxxxxxxx wrote:
Yes, it is indeed limited to a cooperating set of userspace
tasks/threads. Tasks/threads will explicitly choose to use this feature. It is a
no-op for every one else.

It is absolutely not a no-op for me if my task can't be scheduled soon
enough because your task executed sched-prempt.

It means my latency goes up and the *random bad thing* will happen
because I missed my deadline because I was not scheduled fast enough.


This patch changes only CFS, so SCHED_RR and SCHED_FIFO are not affected by this change. Does CFS ever guarantee that any task will be scheduled fast enough to meet its critical deadline? Shouldn't a system that requires guarantees to meet deadline use SCHED_FIFO or SCHED_RR? Even if a task that has an important deadline to meet and is ready to run, it can be denied processor time simply based upon which other tasks are ready to run, how long they have run previously and what their priorities are. I don't see how CFS can guarantee temporal determinism other than every task will get a chance to run in a finite time period. Please do correct me if my understanding of CFS is flawed.

Any task that asks for extension of its current timeslice will get charged this additional time in p->se.vruntime and cause it to move to the right on rbtree. This amounts to a task borrowing time from its future runtime as opposed to being able to get more processor time than others.

or (b) limiting this to just a small
cooperating set of threads in a single cgroup.

and that is almost what this patch does. It is not limited to a cgroup, rather
to the tasks/threads that ask to use this feature.

Except you do not appear to be considering what could be scheduled in
your tasks place.

You allow any task to extend it's timeslice.

Would you recommend a policy that determines which tasks are allowed to extend their timeslice?


Which means I will get the question why does why does
really_important_job only miss it's latency guarantees when running on
the same box as sched_preempt_using_job?

I would expect a system that requires latency guarantees to be designed using SCHED_FIFO or SCHED_RR, not SCHED_OTHER.

Hope this makes sense.

Thanks,
Khalid


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/