• Philippe Longepe's avatar
    cpufreq: intel_pstate: Use average P-State instead of current P-State · bdcaa23f
    Philippe Longepe authored
    The result returned by pid_calc() is subtracted from current_pstate
    (which is the P-State requested during the last period) in order to
    obtain the target P-State for the current iteration.
    
    However, current_pstate may not reflect the real current P-State of
    the CPU. In particular, that P-State may be higher because of the
    frequency sharing per module.
    
    The theory is:
     - The load is the percentage of time spent in C0 and is related to
       the average P-State during the same period.
     - The last requested P-State can be completely different than the
       average P-State (because of frequency sharing or throttling).
     - The P-State shift computed by the pid_calc is based on the load
       computed at average P-State, so the shift must be relative to
       this average P-State.
    
    Using the average P-State instead of current P-State improves power
    without significant performance penalty in cases when a task migrates
    from one core to other core sharing frequency and voltage.
    
    Performance and power comparison with this patch on Cherry Trail
    platform using Android:
    
    Benchmark               ?Perf    ?Power
    FishTank                10.45%    3.1%
    SmartBench-Gaming       -0.1%   -10.4%
    SmartBench-Productivity -0.8%   -10.4%
    CandyCrush                n/a   -17.4%
    AngryBirds                n/a    -5.9%
    videoPlayback             n/a   -13.9%
    audioPlayback             n/a    -4.9%
    IcyRocks-20-50           0.0%   -38.4%
    iozone RR               -0.16%  -1.3%
    iozone RW                0.74%  -1.3%
    Signed-off-by: default avatarPhilippe Longepe <philippe.longepe@linux.intel.com>
    Signed-off-by: default avatarSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    bdcaa23f
intel_pstate.c 41.8 KB