mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-04 14:44:55 -04:00
sched/fair: Rename cfs_rq::avg_load to cfs_rq::sum_weight
The ::avg_load field is a long-standing misnomer: it says it's an
'average load', but in reality it's the momentary sum of the load
of all currently runnable tasks. We'd have to also perform a
division by nr_running (or use time-decay) to arrive at any sort
of average value.
This is clear from comments about the math of fair scheduling:
* \Sum w_i := cfs_rq->avg_load
The sum of all weights is ... the sum of all weights, not
the average of all weights.
To make it doubly confusing, there's also an ::avg_load
in the load-balancing struct sg_lb_stats, which *is* a
true average.
The second part of the field's name is a minor misnomer
as well: it says 'load', and it is indeed a load_weight
structure as it shares code with the load-balancer - but
it's only in an SMP load-balancing context where
load = weight, in the fair scheduling context the primary
purpose is the weighting of different nice levels.
So rename the field to ::sum_weight instead, which makes
the terminology of the EEVDF math match up with our
implementation of it:
* \Sum w_i := cfs_rq->sum_weight
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Link: https://patch.msgid.link/20251201064647.1851919-6-mingo@kernel.org
This commit is contained in:
@@ -608,7 +608,7 @@ static inline s64 entity_key(struct cfs_rq *cfs_rq, struct sched_entity *se)
|
||||
*
|
||||
* v0 := cfs_rq->zero_vruntime
|
||||
* \Sum (v_i - v0) * w_i := cfs_rq->avg_vruntime
|
||||
* \Sum w_i := cfs_rq->avg_load
|
||||
* \Sum w_i := cfs_rq->sum_weight
|
||||
*
|
||||
* Since zero_vruntime closely tracks the per-task service, these
|
||||
* deltas: (v_i - v), will be in the order of the maximal (virtual) lag
|
||||
@@ -625,7 +625,7 @@ avg_vruntime_add(struct cfs_rq *cfs_rq, struct sched_entity *se)
|
||||
s64 key = entity_key(cfs_rq, se);
|
||||
|
||||
cfs_rq->avg_vruntime += key * weight;
|
||||
cfs_rq->avg_load += weight;
|
||||
cfs_rq->sum_weight += weight;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -635,16 +635,16 @@ avg_vruntime_sub(struct cfs_rq *cfs_rq, struct sched_entity *se)
|
||||
s64 key = entity_key(cfs_rq, se);
|
||||
|
||||
cfs_rq->avg_vruntime -= key * weight;
|
||||
cfs_rq->avg_load -= weight;
|
||||
cfs_rq->sum_weight -= weight;
|
||||
}
|
||||
|
||||
static inline
|
||||
void avg_vruntime_update(struct cfs_rq *cfs_rq, s64 delta)
|
||||
{
|
||||
/*
|
||||
* v' = v + d ==> avg_vruntime' = avg_runtime - d*avg_load
|
||||
* v' = v + d ==> avg_vruntime' = avg_runtime - d*sum_weight
|
||||
*/
|
||||
cfs_rq->avg_vruntime -= cfs_rq->avg_load * delta;
|
||||
cfs_rq->avg_vruntime -= cfs_rq->sum_weight * delta;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -655,7 +655,7 @@ u64 avg_vruntime(struct cfs_rq *cfs_rq)
|
||||
{
|
||||
struct sched_entity *curr = cfs_rq->curr;
|
||||
s64 avg = cfs_rq->avg_vruntime;
|
||||
long load = cfs_rq->avg_load;
|
||||
long load = cfs_rq->sum_weight;
|
||||
|
||||
if (curr && curr->on_rq) {
|
||||
unsigned long weight = scale_load_down(curr->load.weight);
|
||||
@@ -723,7 +723,7 @@ static int vruntime_eligible(struct cfs_rq *cfs_rq, u64 vruntime)
|
||||
{
|
||||
struct sched_entity *curr = cfs_rq->curr;
|
||||
s64 avg = cfs_rq->avg_vruntime;
|
||||
long load = cfs_rq->avg_load;
|
||||
long load = cfs_rq->sum_weight;
|
||||
|
||||
if (curr && curr->on_rq) {
|
||||
unsigned long weight = scale_load_down(curr->load.weight);
|
||||
@@ -5131,7 +5131,7 @@ place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags)
|
||||
*
|
||||
* vl_i = (W + w_i)*vl'_i / W
|
||||
*/
|
||||
load = cfs_rq->avg_load;
|
||||
load = cfs_rq->sum_weight;
|
||||
if (curr && curr->on_rq)
|
||||
load += scale_load_down(curr->load.weight);
|
||||
|
||||
|
||||
@@ -679,7 +679,7 @@ struct cfs_rq {
|
||||
unsigned int h_nr_idle; /* SCHED_IDLE */
|
||||
|
||||
s64 avg_vruntime;
|
||||
u64 avg_load;
|
||||
u64 sum_weight;
|
||||
|
||||
u64 zero_vruntime;
|
||||
#ifdef CONFIG_SCHED_CORE
|
||||
|
||||
Reference in New Issue
Block a user