You need to sign in or sign up before continuing.
  • Rafael J. Wysocki's avatar
    cpuidle: teo: Change the main idle state selection logic · c410a9a1
    Rafael J. Wysocki authored
    
    
    Two aspects of the current main idle state selection logic in the
    TEO (Timer Events Oriented) cpuidle governor are quite questionable.
    
    First of all, the "hits" and "misses" metrics used by it are only
    updated for a given idle state if the time till the next timer event
    ("sleep length") is between the target residency of that state and
    the target residency of the next one.  Consequently, they are likely
    to become stale if the sleep length tends to fall outside that
    interval which increases the likelihood of subomtimal idle state
    selection.
    
    Second, the decision on whether or not to select the idle state
    "matching" the sleep length is based on the metrics collected for
    that state alone, whereas in principle the metrics collected for
    the other idle states should be taken into consideration when that
    decision is made.  For example, if the measured idle duration is less
    than the target residency of the idle state "matching" the sleep
    length, then it is also less than the target residency of any deeper
    idle state and that should be taken into account when considering
    whether or not to select any of those states, but currently it is
    not.
    
    In order to address the above shortcomings, modify the main idle
    state selection logic in the TEO governor to take the metrics
    collected for all of the idle states into account when deciding
    whether or not to select the one "matching" the sleep length.
    
    Moreover, drop the "misses" metric that becomes redundant after the
    above change and rename the "early_hits" metric to "intercepts" so
    that its role is better reflected by its name (the idea being that
    if a CPU wakes up earlier than indicated by the sleep length, then
    it must be a result of a non-timer interrupt that "intercepts" the
    CPU).
    
    Also rename the states[] array in struct struct teo_cpu to
    state_bins[] to avoid confusing it with the states[] array in
    struct cpuidle_driver and update the documentation to match the
    new code (and make it more comprehensive while at it).
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    c410a9a1
teo.c 16.3 KB