You need to sign in or sign up before continuing.
  • Christian Loehle's avatar
    cpuidle: teo: Don't count non-existent intercepts · 4b20b07c
    Christian Loehle authored
    When bailing out early, teo will not query the sleep length anymore
    since commit 6da8f9ba ("cpuidle: teo:
    Skip tick_nohz_get_sleep_length() call in some cases") with an
    expected sleep_length_ns value of KTIME_MAX.
    This lead to state0 accumulating lots of 'intercepts' because
    the actually measured sleep length was < KTIME_MAX, so query the sleep
    length instead for teo to recognize if it still is in an
    intercept-likely scenario without alternating between the two modes.
    
    Fundamentally we can only do one of the two:
     1. Skip sleep_length_ns query when we think intercept is likely.
     2. Have accurate data if sleep_length_ns is actually intercepted when
    we believe it is currently intercepted.
    
    Previously teo did the former while this patch chooses the latter as
    the additional time it takes to query the sleep length was found to be
    negligible and the variants of option 1 (count all unknowns as misses
    or count all unknown as hits) had significant regressions (as misses
    had lots of too shallow idle state selections and as hits had terrible
    performance in intercept-heavy workloads).
    
    Fixes: 6da8f9ba ("cpuidle: teo: Skip tick_nohz_get_sleep_length() call in some cases")
    Link: https://patch.msgid.link/c40acf72-010f-4a8b-80e4-33f133ba266b@arm.com
    
    Signed-off-by: default avatarChristian Loehle <christian.loehle@arm.com>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    4b20b07c
teo.c 17.2 KB