sched/fair: Always update CPU capacity when load balancing
Limiting CPU capacity updates, which are quite cheap, results in worse balancing decisions during opportunistic balancing (e.g., SD_BALANCE_WAKE). This causes opportunistic placement decisions to be skewed using stale CPU capacity data, and when a CPU isn't idling much, its capacity suffers from even more staleness since the only exception to the 100 ms capacity update ratelimit is a CPU exiting idle. Since the capacity updates are cheap, always do it when load balancing in order to improve opportunistic task placement decisions. Change-Id: If1d451ce742fd093010057e31e71012d47fad70a Signed-off-by: Sultan Alsawaf <sultan@kerneltoast.com>
This commit is contained in:
parent
323a4009a4
commit
fa6b06bf46
1 changed files with 0 additions and 9 deletions
|
@ -8535,11 +8535,6 @@ void update_group_capacity(struct sched_domain *sd, int cpu)
|
|||
struct sched_domain *child = sd->child;
|
||||
struct sched_group *group, *sdg = sd->groups;
|
||||
unsigned long capacity, min_capacity, max_capacity;
|
||||
unsigned long interval;
|
||||
|
||||
interval = msecs_to_jiffies(sd->balance_interval);
|
||||
interval = clamp(interval, 1UL, max_load_balance_interval);
|
||||
sdg->sgc->next_update = jiffies + interval;
|
||||
|
||||
if (!child) {
|
||||
update_cpu_capacity(sd, cpu);
|
||||
|
@ -9331,10 +9326,6 @@ static inline void update_sd_lb_stats(struct lb_env *env, struct sd_lb_stats *sd
|
|||
if (local_group) {
|
||||
sds->local = sg;
|
||||
sgs = local;
|
||||
|
||||
if (env->idle != CPU_NEWLY_IDLE ||
|
||||
time_after_eq(jiffies, sg->sgc->next_update))
|
||||
update_group_capacity(env->sd, env->dst_cpu);
|
||||
}
|
||||
|
||||
update_sg_lb_stats(env, sg, sgs, &sg_status);
|
||||
|
|
Loading…
Reference in a new issue