* [PATCH] page-allocator: Always change pageblock ownership when anti-fragmentation is disabled
@ 2009-09-01 11:00 Mel Gorman
0 siblings, 0 replies; only message in thread
From: Mel Gorman @ 2009-09-01 11:00 UTC (permalink / raw)
To: Linus Torvalds, Andrew Morton
Cc: Paul Mundt, Christoph Lameter, KOSAKI Motohiro, Pekka Enberg,
Peter Zijlstra, Nick Piggin, Dave Hansen, Lee Schermerhorn,
David Howells, linux-mm, linux-kernel
On low-memory systems, anti-fragmentation gets disabled as fragmentation
cannot be avoided on a sufficiently large boundary to be worthwhile.
Once disabled, there is a period of time when all the pageblocks are marked
MOVABLE and the expectation is that they get marked UNMOVABLE at each call
to __rmqueue_fallback().
However, when MAX_ORDER is large the pageblocks do not change ownership
because the normal criteria are not met. This has the effect of prematurely
breaking up too many large contiguous blocks. This is most serious on NOMMU
systems which depend on high-order allocations to boot. This patch causes
pageblocks to change ownership on every fallback when anti-fragmentation is
disabled. This prevents the large blocks being prematurely broken up.
This is a fix to commit 49255c619fbd482d704289b5eb2795f8e3b7ff2e [page
allocator: move check for disabled anti-fragmentation out of fastpath]
and the problem affects 2.6.31-rc8.
Signed-off-by: Mel Gorman <mel@csn.ul.ie>
Tested-by: Paul Mundt <lethal@linux-sh.org>
---
mm/page_alloc.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index d052abb..41eb651 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -817,13 +817,15 @@ __rmqueue_fallback(struct zone *zone, int order, int start_migratetype)
* agressive about taking ownership of free pages
*/
if (unlikely(current_order >= (pageblock_order >> 1)) ||
- start_migratetype == MIGRATE_RECLAIMABLE) {
+ start_migratetype == MIGRATE_RECLAIMABLE ||
+ page_group_by_mobility_disabled) {
unsigned long pages;
pages = move_freepages_block(zone, page,
start_migratetype);
/* Claim the whole block if over half of it is free */
- if (pages >= (1 << (pageblock_order-1)))
+ if (pages >= (1 << (pageblock_order-1)) ||
+ page_group_by_mobility_disabled)
set_pageblock_migratetype(page,
start_migratetype);
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2009-09-01 11:00 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-09-01 11:00 [PATCH] page-allocator: Always change pageblock ownership when anti-fragmentation is disabled Mel Gorman
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox