Messages in this thread | | | From | Paul Turner <> | Date | Thu, 14 Oct 2010 02:58:33 -0700 | Subject | Re: [PATCH v3 3/7] sched: throttle cfs_rq entities which exceed their local quota |
| |
On Thu, Oct 14, 2010 at 2:12 AM, Peter Zijlstra <peterz@infradead.org> wrote: > On Wed, 2010-10-13 at 15:34 +0900, KAMEZAWA Hiroyuki wrote: >> cpu.share and bandwidth control can't be used simultaneously or... >> is this fair ? I'm not familiar with scheduler but this allows boost this tg. >> Could you add a brief documentaion of a spec/feature. in the next post ? > > Like explained, shares control the proportional distribution of time > between groups, bandwidth puts a limit on how much time a group can > take. It can cause a group to receive less than its fair share, but > never more. > > There is, however, a problem with all this, and that is that all this > explicit idling of tasks can lead to a form of priority inversion. > Regular preemptive scheduling already suffers from this, but explicitly > idling tasks exacerbates the situation. > > You basically get to add the longest induced idle time to all your lock > hold times. >
This is a concern (especially for exit starvation, since the task needs to be scheduled for reaping); the way throttling is enacted should help to mitigate the risk / starvation here. When a group exceeds its bandwidth we don't actively force it off the cpu, we only set TIF_RESCHED; this the "enforcement" of throttling until we drop back down through put_prev_task().
This should mean we won't extend a semaphore wait time unless someone explicitly issues something a cond_resched() within it [at which point they are choosing a potentially arbitrary latency delay anyway, although this does expand it relative to the target sched_latency_period].
> >
| |