linux-stable/drivers/cpufreq
Arjan van de Ven 6b8fcd9029 ondemand: Solve a big performance issue by counting IOWAIT time as busy
The ondemand cpufreq governor uses CPU busy time (e.g. not-idle
time) as a measure for scaling the CPU frequency up or down.
If the CPU is busy, the CPU frequency scales up, if it's idle,
the CPU frequency scales down. Effectively, it uses the CPU busy
time as proxy variable for the more nebulous "how critical is
performance right now" question.

This algorithm falls flat on its face in the light of workloads
where you're alternatingly disk and CPU bound, such as the ever
popular "git grep", but also things like startup of programs and
maildir using email clients... much to the chagarin of Andrew
Morton.

This patch changes the ondemand algorithm to count iowait time
as busy, not idle, time. As shown in the breakdown cases above,
iowait is performance critical often, and by counting iowait,
the proxy variable becomes a more accurate representation of the
"how critical is performance" question.

The problem and fix are both verified with the "perf timechar"
tool.

Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Dave Jones <davej@redhat.com>
Reviewed-by: Rik van Riel <riel@redhat.com>
Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <20100509082606.3d9f00d0@infradead.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2010-05-09 19:35:27 +02:00
..
cpufreq.c [CPUFREQ] fix a lockdep warning 2010-03-31 12:00:21 -04:00
cpufreq_conservative.c [CPUFREQ] use max load in conservative governor 2010-03-31 12:00:22 -04:00
cpufreq_ondemand.c ondemand: Solve a big performance issue by counting IOWAIT time as busy 2010-05-09 19:35:27 +02:00
cpufreq_performance.c [CPUFREQ] Don't export governors for default governor 2008-10-09 13:52:44 -04:00
cpufreq_powersave.c [CPUFREQ] Don't export governors for default governor 2008-10-09 13:52:44 -04:00
cpufreq_stats.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
cpufreq_userspace.c [CPUFREQ] checkpatch cleanups for userspace governor 2009-02-24 22:47:30 -05:00
freq_table.c percpu: make percpu symbols in cpufreq unique 2009-10-29 22:34:13 +09:00
Kconfig trivial: fix an -> a typos in documentation and comments 2009-01-06 11:28:07 +01:00
Makefile [CPUFREQ] Conservative cpufreq governer 2005-05-31 19:03:47 -07:00