Hi Alex, On Sat, 30 Mar 2013 22:34:57 +0800, Alex Shi wrote: > Since the rt task priority is higher than fair tasks, cfs_rq utilization > is just the left of rt utilization. > > When there are some cfs tasks in queue, the potential utilization may > be yielded, so mulitiplying cfs task number to get max potential > utilization of cfs. Then the rq utilization is sum of rt util and cfs > util. > > Signed-off-by: Alex Shi <alex....@intel.com> > --- > kernel/sched/fair.c | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c > index ae87dab..0feeaee 100644 > --- a/kernel/sched/fair.c > +++ b/kernel/sched/fair.c > @@ -3350,6 +3350,22 @@ struct sg_lb_stats { > unsigned int group_util; /* sum utilization of group */ > }; > > +static unsigned long scale_rt_util(int cpu); > + > +static unsigned int max_rq_util(int cpu) > +{ > + struct rq *rq = cpu_rq(cpu); > + unsigned int rt_util = scale_rt_util(cpu); > + unsigned int cfs_util; > + unsigned int nr_running; > + > + cfs_util = (FULL_UTIL - rt_util) > rq->util ? rq->util > + : (FULL_UTIL - rt_util); > + nr_running = rq->nr_running ? rq->nr_running : 1;
This can be cleaned up with proper min/max(). > + > + return rt_util + cfs_util * nr_running; Should this nr_running consider tasks in cfs_rq only? Also it seems there's no upper bound so that it can possibly exceed FULL_UTIL. Thanks, Namhyung > +} > + > /* > * sched_balance_self: balance the current task (running on cpu) in domains > * that have the 'flag' flag set. In practice, this is SD_BALANCE_FORK and -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/