Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=46dafbca2bba811665b01d8cedf911204820623c
Commit:     46dafbca2bba811665b01d8cedf911204820623c
Parent:     5adc5be7cd1bcef6bb64f5255d2a33f20a3cf5be
Author:     Mel Gorman <[EMAIL PROTECTED]>
AuthorDate: Tue Oct 16 01:25:55 2007 -0700
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Tue Oct 16 09:43:00 2007 -0700

    Be more agressive about stealing when MIGRATE_RECLAIMABLE allocations 
fallback
    
    MIGRATE_RECLAIMABLE allocations tend to be very bursty in nature like when
    updatedb starts.  It is likely this will occur in situations where MAX_ORDER
    blocks of pages are not free.  This means that updatedb can scatter
    MIGRATE_RECLAIMABLE pages throughout the address space.  This patch is more
    agressive about stealing blocks of pages for MIGRATE_RECLAIMABLE.
    
    Signed-off-by: Mel Gorman <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 mm/page_alloc.c |   18 +++++++++++++++---
 1 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index e1d87ee..b864584 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -821,11 +821,23 @@ retry:
 
                        /*
                         * If breaking a large block of pages, move all free
-                        * pages to the preferred allocation list
+                        * pages to the preferred allocation list. If falling
+                        * back for a reclaimable kernel allocation, be more
+                        * agressive about taking ownership of free pages
                         */
-                       if (unlikely(current_order >= MAX_ORDER / 2)) {
+                       if (unlikely(current_order >= MAX_ORDER / 2) ||
+                                       start_migratetype == 
MIGRATE_RECLAIMABLE) {
+                               unsigned long pages;
+                               pages = move_freepages_block(zone, page,
+                                                               
start_migratetype);
+
+                               /* Claim the whole block if over half of it is 
free */
+                               if ((pages << current_order) >= (1 << 
(MAX_ORDER-2)) &&
+                                               migratetype != 
MIGRATE_HIGHATOMIC)
+                                       set_pageblock_migratetype(page,
+                                                               
start_migratetype);
+
                                migratetype = start_migratetype;
-                               move_freepages_block(zone, page, migratetype);
                        }
 
                        /* Remove the page from the freelists */
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to