Messages in this thread | | | Date | Tue, 24 Oct 2023 14:10:27 +0800 | From | Chen Yu <> | Subject | Re: [RFC PATCH v2 1/2] sched/fair: Introduce UTIL_FITS_CAPACITY feature (v2) |
| |
On 2023-10-23 at 11:04:49 -0400, Mathieu Desnoyers wrote: > On 2023-10-23 10:11, Dietmar Eggemann wrote: > > On 19/10/2023 18:05, Mathieu Desnoyers wrote: > > [...] > > > +static unsigned long scale_rt_capacity(int cpu); > > > + > > > +/* > > > + * Returns true if adding the task utilization to the estimated > > > + * utilization of the runnable tasks on @cpu does not exceed the > > > + * capacity of @cpu. > > > + * > > > + * This considers only the utilization of _runnable_ tasks on the @cpu > > > + * runqueue, excluding blocked and sleeping tasks. This is achieved by > > > + * using the runqueue util_est.enqueued. > > > + */ > > > +static inline bool task_fits_remaining_cpu_capacity(unsigned long task_util, > > > + int cpu) > > > > Or like find_energy_efficient_cpu() (feec(), used in > > Energy-Aware-Scheduling (EAS)) which uses cpu_util(cpu, p, cpu, 0) to get: > > > > max(util_avg(CPU + p), util_est(CPU + p)) > > I've tried using cpu_util(), but unfortunately anything that considers > blocked/sleeping tasks in its utilization total does not work for my > use-case. > > From cpu_util(): > > * CPU utilization is the sum of running time of runnable tasks plus the > * recent utilization of currently non-runnable tasks on that CPU. >
I thought cpu_util() indicates the utilization decay sum of task that was once "running" on this CPU, but will not sum up the "util/load" of the blocked/sleeping task?
accumulate_sum() /* only the running task's util will be sum up */ if (running) sa->util_sum += contrib << SCHED_CAPACITY_SHIFT;
WRITE_ONCE(sa->util_avg, sa->util_sum / divider);
thanks, Chenyu
| |