mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 01:53:29 +02:00
cpuidle: teo: Skip sleep length computation for low latency constraints
If the idle state exit latency constraint is sufficiently low, it is better to avoid the additional latency related to calling tick_nohz_get_sleep_length(). It is also not necessary to compute the sleep length in that case because shallow idle state selection will be forced then regardless of the recent wakeup history. Accordingly, skip the sleep length computation and subsequent checks of the exit latency constraint is low enough. Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Reviewed-by: Christian Loehle <christian.loehle@arm.com> Link: https://patch.msgid.link/6122398.lOV4Wx5bFT@rjwysocki.net
This commit is contained in:
parent
65e18e6544
commit
16c8d7586c
|
|
@ -105,6 +105,12 @@
|
|||
|
||||
#include "gov.h"
|
||||
|
||||
/*
|
||||
* Idle state exit latency threshold used for deciding whether or not to check
|
||||
* the time till the closest expected timer event.
|
||||
*/
|
||||
#define LATENCY_THRESHOLD_NS (RESIDENCY_THRESHOLD_NS / 2)
|
||||
|
||||
/*
|
||||
* The PULSE value is added to metrics when they grow and the DECAY_SHIFT value
|
||||
* is used for decreasing metrics on a regular basis.
|
||||
|
|
@ -432,9 +438,14 @@ static int teo_select(struct cpuidle_driver *drv, struct cpuidle_device *dev,
|
|||
* duration falls into that range in the majority of cases, assume
|
||||
* non-timer wakeups to be dominant and skip updating the sleep length
|
||||
* to reduce latency.
|
||||
*
|
||||
* Also, if the latency constraint is sufficiently low, it will force
|
||||
* shallow idle states regardless of the wakeup type, so the sleep
|
||||
* length need not be known in that case.
|
||||
*/
|
||||
if ((!idx || drv->states[idx].target_residency_ns < RESIDENCY_THRESHOLD_NS) &&
|
||||
2 * cpu_data->short_idles >= cpu_data->total)
|
||||
(2 * cpu_data->short_idles >= cpu_data->total ||
|
||||
latency_req < LATENCY_THRESHOLD_NS))
|
||||
goto out_tick;
|
||||
|
||||
duration_ns = tick_nohz_get_sleep_length(&delta_tick);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user