Commit 60836533 authored by Rafael J. Wysocki's avatar Rafael J. Wysocki
Browse files

cpuidle: governors: teo: Avoid fake intercepts produced by tick



Tick wakeups can lead to fake intercepts that may skew idle state
selection towards shallow states, so it is better to avoid counting
them as intercepts.

For this purpose, add a check causing teo_update() to only count
tick wakeups as intercepts if intercepts within the tick period
range are at least twice as frequent as any other events.

Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: default avatarChristian Loehle <christian.loehle@arm.com>
Link: https://patch.msgid.link/3404606.44csPzL39Z@rafael.j.wysocki
parent 4bd2221f
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -239,6 +239,17 @@ static void teo_update(struct cpuidle_driver *drv, struct cpuidle_device *dev)
			cpu_data->state_bins[drv->state_count-1].hits += PULSE;
			return;
		}
		/*
		 * If intercepts within the tick period range are not frequent
		 * enough, count this wakeup as a hit, since it is likely that
		 * the tick has woken up the CPU because an expected intercept
		 * was not there.  Otherwise, one of the intercepts may have
		 * been incidentally preceded by the tick wakeup.
		 */
		if (3 * cpu_data->tick_intercepts < 2 * total) {
			cpu_data->state_bins[idx_timer].hits += PULSE;
			return;
		}
	}

	/*