Hi Peter, On Fri, 7 Aug 2020 12:46:18 +0200 peterz@xxxxxxxxxxxxx wrote: > On Fri, Aug 07, 2020 at 11:56:04AM +0200, Juri Lelli wrote: > > Starting deadline server for lower priority classes right away when > > first task is enqueued might break guarantees, as tasks belonging to > > intermediate priority classes could be uselessly preempted. E.g., a > > well behaving (non hog) FIFO task can be preempted by NORMAL tasks > > even if there are still CPU cycles available for NORMAL tasks to > > run, as they'll be running inside the fair deadline server for some > > period of time. > > > > To prevent this issue, implement a starvation monitor mechanism that > > starts the deadline server only if a (fair in this case) task hasn't > > been scheduled for some interval of time after it has been enqueued. > > Use pick/put functions to manage starvation monitor status. > > One thing I considerd was scheduling this as a least-laxity entity -- > such that it runs late, not early Are you thinking about scheduling both RT and non-RT tasks through deadline servers? If yes, then I think that using something like laxity-based scheduling for the SCHED_OTHER server can be a good idea (but then we need to understand how to combine deadline-based scheduling with laxity-based scheduling, etc...) Or are you thinking about keeping the SCHED_OTHER server throttled until its laxity is 0 (or until its laxity is lower than some small value)? In this second case, the approach would work even if RT tasks are not scheduled through a server (but I do not know which kind of performance guarantee we could provide). > -- and start the server when > rq->nr_running != rq->cfs.h_nr_running, IOW when there's !fair tasks > around. Yes, this could be a good optimization. Luca > > Not saying we should do it like that, but that's perhaps more > deterministic than this.