From: "Arve Hjønnevåg" <arve@android.com>
To: Mel Gorman <mel@csn.ul.ie>
Cc: "KOSAKI Motohiro" <kosaki.motohiro@jp.fujitsu.com>,
"TAO HU" <tghk48@motorola.com>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
"Ye Yuan.Bo-A22116" <yuan-bo.ye@motorola.com>,
"Chang Qing-A21550" <Qing.Chang@motorola.com>,
linux-arm-kernel@lists.infradead.org,
"Arve Hjønnevåg" <arve@android.com>
Subject: [PATCH] mm: Check if any page in a pageblock is reserved before marking it MIGRATE_RESERVE
Date: Mon, 5 Apr 2010 20:09:16 -0700 [thread overview]
Message-ID: <1270523356-1728-1-git-send-email-arve@android.com> (raw)
In-Reply-To: <20100405101424.GA21207@csn.ul.ie>
This fixes a problem where the first pageblock got marked MIGRATE_RESERVE even
though it only had a few free pages. This in turn caused no contiguous memory
to be reserved and frequent kswapd wakeups that emptied the caches to get more
contiguous memory.
Signed-off-by: Arve HjA,nnevAJPYg <arve@android.com>
---
mm/page_alloc.c | 16 +++++++++++++++-
1 files changed, 15 insertions(+), 1 deletions(-)
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index fb7df1d..46ade16 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -2860,6 +2860,20 @@ static inline unsigned long wait_table_bits(unsigned long size)
#define LONG_ALIGN(x) (((x)+(sizeof(long))-1)&~((sizeof(long))-1))
/*
+ * Check if a pageblock contains reserved pages
+ */
+static int pageblock_is_reserved(unsigned long start_pfn)
+{
+ unsigned long end_pfn = start_pfn + pageblock_nr_pages;
+ unsigned long pfn;
+
+ for (pfn = start_pfn; pfn < end_pfn; pfn++)
+ if (!pfn_valid_within(pfn) || PageReserved(pfn_to_page(pfn)))
+ return 1;
+ return 0;
+}
+
+/*
* Mark a number of pageblocks as MIGRATE_RESERVE. The number
* of blocks reserved is based on min_wmark_pages(zone). The memory within
* the reserve will tend to store contiguous free pages. Setting min_free_kbytes
@@ -2898,7 +2912,7 @@ static void setup_zone_migrate_reserve(struct zone *zone)
continue;
/* Blocks with reserved pages will never free, skip them. */
- if (PageReserved(page))
+ if (pageblock_is_reserved(pfn))
continue;
block_migratetype = get_pageblock_migratetype(page);
--
1.6.5.1
--
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>
next prev parent reply other threads:[~2010-04-06 3:09 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-04-01 4:05 [Question] race condition in mm/page_alloc.c regarding page->lru? TAO HU
2010-04-02 3:51 ` TAO HU
2010-04-02 5:03 ` KOSAKI Motohiro
2010-04-02 5:19 ` TAO HU
2010-04-02 9:48 ` Mel Gorman
2010-04-03 0:59 ` Arve Hjønnevåg
2010-04-04 22:45 ` KOSAKI Motohiro
2010-04-05 10:14 ` Mel Gorman
2010-04-05 10:49 ` Minchan Kim
2010-04-06 3:09 ` Arve Hjønnevåg [this message]
2010-04-06 4:15 ` [PATCH] mm: Check if any page in a pageblock is reserved before marking it MIGRATE_RESERVE Minchan Kim
2010-04-06 15:11 ` Mel Gorman
2010-04-02 5:04 ` [Question] race condition in mm/page_alloc.c regarding page->lru? KAMEZAWA Hiroyuki
2010-04-02 5:15 ` Minchan Kim
2010-04-02 7:00 ` TAO HU
2010-04-02 7:22 ` Minchan Kim
2010-04-02 5:13 ` Minchan Kim
2010-04-02 6:48 ` TAO HU
2010-04-02 7:06 ` Daniel Mack
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1270523356-1728-1-git-send-email-arve@android.com \
--to=arve@android.com \
--cc=Qing.Chang@motorola.com \
--cc=kosaki.motohiro@jp.fujitsu.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mel@csn.ul.ie \
--cc=tghk48@motorola.com \
--cc=yuan-bo.ye@motorola.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).