• Rafael J. Wysocki's avatar
    x86/sched: Add basic support for CPU capacity scaling · 5a9d1014
    Rafael J. Wysocki authored
    In order be able to compute the sizes of tasks consistently across all
    CPUs in a hybrid system, it is necessary to provide CPU capacity scaling
    information to the scheduler via arch_scale_cpu_capacity().  Moreover,
    the value returned by arch_scale_freq_capacity() for the given CPU must
    correspond to the arch_scale_cpu_capacity() return value for it, or
    utilization computations will be inaccurate.
    
    Add support for it through per-CPU variables holding the capacity and
    maximum-to-base frequency ratio (times SCHED_CAPACITY_SCALE) that will
    be returned by arch_scale_cpu_capacity() and used by scale_freq_tick()
    to compute arch_freq_scale for the current CPU, respectively.
    
    In order to avoid adding measurable overhead for non-hybrid x86 systems,
    which are the vast majority in the field, whether or not the new hybrid
    CPU capacity scaling will be in effect is controlled by a static key.
    This static key is set by calling arch_enable_hybrid_capacity_scale()
    which also allocates memory for the per-CPU data and initializes it.
    Next, arch_set_cpu_capacity() is used to set the per-CPU variables
    mentioned above for each CPU and arch_rebuild_sched_domains() needs
    to be called for the scheduler to realize that capacity-aware
    scheduling can be used going forward.
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: default avatarRicardo Neri <ricardo.neri-calderon@linux.intel.com>
    Tested-by: Ricardo Neri <ricardo.neri-calderon@linux.intel.com> # scale invariance
    Link: https://patch.msgid.link/10523497.nUPlyArG6x@rjwysocki.net
    [ rjw: Added parens to function kerneldoc comments ]
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    5a9d1014
aperfmperf.c 13.6 KB