• Qais Yousef's avatar
    sched/uclamp: Fix relationship between uclamp and migration margin · 48d5e9da
    Qais Yousef authored
    fits_capacity() verifies that a util is within 20% margin of the
    capacity of a CPU, which is an attempt to speed up upmigration.
    
    But when uclamp is used, this 20% margin is problematic because for
    example if a task is boosted to 1024, then it will not fit on any CPU
    according to fits_capacity() logic.
    
    Or if a task is boosted to capacity_orig_of(medium_cpu). The task will
    end up on big instead on the desired medium CPU.
    
    Similar corner cases exist for uclamp and usage of capacity_of().
    Slightest irq pressure on biggest CPU for example will make a 1024
    boosted task look like it can't fit.
    
    What we really want is for uclamp comparisons to ignore the migration
    margin and capacity pressure, yet retain them for when checking the
    _actual_ util signal.
    
    For example, task p:
    
    	p->util_avg = 300
    	p->uclamp[UCLAMP_MIN] = 1024
    
    Will fit a big CPU. But
    
    	p->util_avg = 900
    	p->uclamp[UCLAMP_MIN] = 1024
    
    will not, this should trigger overutilized state because the big CPU is
    now *actually* being saturated.
    
    Similar reasoning applies to capping tasks with UCLAMP_MAX. For example:
    
    	p->util_avg = 1024
    	p->uclamp[UCLAMP_MAX] = capacity_orig_of(medium_cpu)
    
    Should fit the task on medium cpus without triggering overutilized
    state.
    
    Inlined comments expand more on desired behavior in more scenarios.
    
    Introduce new util_fits_cpu() function which encapsulates the new logic.
    The new function is not used anywhere yet, but will be used to update
    various users of fits_capacity() in later patches.
    
    Fixes: af24bde8 ("sched/uclamp: Add uclamp support to energy_compute()")
    Signed-off-by: default avatarQais Yousef <qais.yousef@arm.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lore.kernel.org/r/20220804143609.515789-2-qais.yousef@arm.com
    48d5e9da
fair.c 326 KB