linux/include
Mel Gorman c89511ab2f mm: compaction: Restart compaction from near where it left off
This is almost entirely based on Rik's previous patches and discussions
with him about how this might be implemented.

Order > 0 compaction stops when enough free pages of the correct page
order have been coalesced.  When doing subsequent higher order
allocations, it is possible for compaction to be invoked many times.

However, the compaction code always starts out looking for things to
compact at the start of the zone, and for free pages to compact things to
at the end of the zone.

This can cause quadratic behaviour, with isolate_freepages starting at the
end of the zone each time, even though previous invocations of the
compaction code already filled up all free memory on that end of the zone.
 This can cause isolate_freepages to take enormous amounts of CPU with
certain workloads on larger memory systems.

This patch caches where the migration and free scanner should start from
on subsequent compaction invocations using the pageblock-skip information.
 When compaction starts it begins from the cached restart points and will
update the cached restart points until a page is isolated or a pageblock
is skipped that would have been scanned by synchronous compaction.

Signed-off-by: Mel Gorman <mgorman@suse.de>
Acked-by: Rik van Riel <riel@redhat.com>
Cc: Richard Davies <richard@arachsys.com>
Cc: Shaohua Li <shli@kernel.org>
Cc: Avi Kivity <avi@redhat.com>
Acked-by: Rafael Aquini <aquini@redhat.com>
Cc: Fengguang Wu <fengguang.wu@intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-10-09 16:22:50 +09:00
..
acpi Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux 2012-10-08 07:14:06 +09:00
asm-generic thp: introduce pmdp_invalidate() 2012-10-09 16:22:29 +09:00
clocksource arm64: Generic timers support 2012-09-17 13:42:20 +01:00
crypto
drm Merge branch 'drm-intel-fixes' of git://people.freedesktop.org/~danvet/drm-intel into drm-next 2012-10-07 21:13:54 +10:00
keys
linux mm: compaction: Restart compaction from near where it left off 2012-10-09 16:22:50 +09:00
math-emu
media Merge branch 'exynos-drm-next' of git://git.infradead.org/users/kmpark/linux-samsung into drm-next 2012-10-07 21:06:33 +10:00
memory
misc
mtd
net Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-10-06 03:11:59 +09:00
pcmcia
ras
rdma IB/core: Add ib_find_exact_cached_pkey() 2012-09-30 20:33:30 -07:00
rxrpc
scsi Prepared for main script 2012-10-03 13:45:43 -07:00
sound Sound updates for 3.7-rc1 2012-10-09 07:07:14 +09:00
target
trace mm: remove __GFP_NO_KSWAPD 2012-10-09 16:22:15 +09:00
uapi UAPI: (Scripted) Disintegrate include/drm 2012-10-04 18:21:50 +01:00
video ARM: clps711x: Remove board support for CEIVA 2012-09-28 21:14:08 +02:00
xen Features: 2012-10-07 07:13:01 +09:00
Kbuild