• Ionela Voinescu's avatar
    arm64: Rebuild sched domains on invariance status changes · ecec9e86
    Ionela Voinescu authored
    Task scheduler behavior depends on frequency invariance (FI) support and
    the resulting invariant load tracking signals. For example, in order to
    make accurate predictions across CPUs for all performance states, Energy
    Aware Scheduling (EAS) needs frequency-invariant load tracking signals
    and therefore it has a direct dependency on FI. This dependency is known,
    but EAS enablement is not yet conditioned on the presence of FI during
    the built of the scheduling domain hierarchy.
    
    Before this is done, the following must be considered: while
    arch_scale_freq_invariant() will see changes in FI support and could
    be used to condition the use of EAS, it could return different values
    during system initialisation.
    
    For arm64, such a scenario will happen for a system that does not support
    cpufreq driven FI, but does support counter-driven FI. For such a system,
    arch_scale_freq_invariant() will return false if called before counter
    based FI initialisation, but change its status to true after it.
    If EAS becomes explicitly dependent on FI this would affect the task
    scheduler behavior which builds its scheduling domain hierarchy well
    before the late counter-based FI init. During that process, EAS would be
    disabled due to its dependency on FI.
    
    Two points of future early calls to arch_scale_freq_invariant() which
    would determine EAS enablement are:
     - (1) drivers/base/arch_topology.c:126 <<update_topology_flags_workfn>>
    		rebuild_sched_domains();
           This will happen after CPU capacity initialisation.
     - (2) kernel/sched/cpufreq_schedutil.c:917 <<rebuild_sd_workfn>>
    		rebuild_sched_domains_energy();
    		-->rebuild_sched_domains();
           This will happen during sched_cpufreq_governor_change() for the
           schedutil cpufreq governor.
    
    Therefore, before enforcing the presence of FI support for the use of EAS,
    ensure the following: if there is a change in FI support status after
    counter init, use the existing rebuild_sched_domains_energy() function to
    trigger a rebuild of the scheduling and performance domains that in turn
    will determine the enablement of EAS.
    Signed-off-by: default avatarIonela Voinescu <ionela.voinescu@arm.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Acked-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    Link: https://lkml.kernel.org/r/20201027180713.7642-3-ionela.voinescu@arm.com
    ecec9e86
topology.c 8.74 KB