From: sandeep patil <psandeep.s@gmail.com>
To: Mel Gorman <mel@csn.ul.ie>
Cc: Marek Szyprowski <m.szyprowski@samsung.com>,
Ohad Ben-Cohen <ohad@wizery.com>,
Daniel Walker <dwalker@codeaurora.org>,
Russell King <linux@arm.linux.org.uk>,
Arnd Bergmann <arnd@arndb.de>,
Jesse Barker <jesse.barker@linaro.org>,
Jonathan Corbet <corbet@lwn.net>,
linux-kernel@vger.kernel.org,
Michal Nazarewicz <mina86@mina86.com>,
Dave Hansen <dave@linux.vnet.ibm.com>,
linaro-mm-sig@lists.linaro.org, linux-mm@kvack.org,
Kyungmin Park <kyungmin.park@samsung.com>,
KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
Andrew Morton <akpm@linux-foundation.org>,
Rob Clark <rob.clark@linaro.org>,
linux-arm-kernel@lists.infradead.org,
linux-media@vger.kernel.org
Subject: Re: [Linaro-mm-sig] [PATCH 11/15] mm: trigger page reclaim in alloc_contig_range() to stabilize watermarks
Date: Tue, 7 Feb 2012 18:04:18 -0800 [thread overview]
Message-ID: <CA+K6fF49BQiNer=7Di+gCU_EX4E41q-teXJJUBjEd2xc12-j4w@mail.gmail.com> (raw)
In-Reply-To: <20120203140428.GG5796@csn.ul.ie>
On Fri, Feb 3, 2012 at 6:04 AM, Mel Gorman <mel@csn.ul.ie> wrote:
> On Fri, Feb 03, 2012 at 01:18:54PM +0100, Marek Szyprowski wrote:
>
> Nothing prevents two or more processes updating the wmarks at the same
> time which is racy and unpredictable. Today it is not much of a problem
> but CMA makes this path hotter than it was and you may see weirdness
> if two processes are updating zonelists at the same time. Swap-over-NFS
> actually starts with a patch that serialises setup_per_zone_wmarks()
>
> You also potentially have a BIG problem here if this happens
>
> min_free_kbytes = 32768
> Process a: min_free_kbytes += 65536
> Process a: start direct reclaim
> echo 16374 > /proc/sys/vm/min_free_kbytes
> Process a: exit direct_reclaim
> Process a: min_free_kbytes -= 65536
>
> min_free_kbytes now wraps negative and the machine hangs.
>
There's another problem I am facing with zone watermarks and CMA.
Test details:
Memory : 480 MB of total memory, 128 MB CMA region
Test case : around 600 MB of file transfer over USB RNDIS onto target
System Load : ftpd with console running on target.
No one is doing CMA allocations except for the DMA allocations done by the
drivers.
Result : After about 300MB transfer, I start getting GFP_ATOMIC
allocation failures.
This only happens if CMA region is reserved.
Here's the free_list before I start the test
Free pages count per migrate type at order 0 1 2
3 4 5 6 7 8 9 10
Node 0, zone Normal, type Unmovable 2 9 6
7 3 3 3 4 2 1 0
Node 0, zone Normal, type Reclaimable 31 4 1
2 1 1 0 1 1 0 0
Node 0, zone Normal, type Movable 22 20 23
14 3 4 4 3 1 0 70
Node 0, zone Normal, type Reserve 0 0 0
0 0 0 0 0 0 0 1
Node 0, zone Normal, type CMA 2 0 0
2 1 1 1 1 1 1 34
Node 0, zone Normal, type Isolate 0 0 0
0 0 0 0 0 0 0 0
and here's what I get when I print the same when allocation fails.
Normal: Free pages count per migrate type at order 0 1
2 3 4 5 6 7 8 9 10
[ 401.887634] zone Normal, type Unmovable
0 0 0 0 0 0 0 0 0 0
0
[ 401.901916] zone Normal, type Reclaimable
0 0 0 0 0 0 0 0 0 0
0
[ 401.916229] zone Normal, type Movable
0 0 0 0 0 0 0 0 0 0
0
[ 401.930541] zone Normal, type Reserve
0 0 0 0 0 0 0 0 0 0
0
[ 401.944824] zone Normal, type CMA
6582 6580 2380 0 0 0 0 0 0 0
0
[ 401.961486] zone Normal, type Isolate
0 0 0 0 0 0 0 0 0 0
0
Total memory available is way above the zone watermarks. So, we ended
up starving
UNMOVABLE/RECLAIMABLE atomic allocations that cannot fallback on CMA region.
I know the CMA region is big, but I think reducing the region size
will only delay the problem.
it walso on't recover as long as most of the CMA region pages get
allocated and the zone
watermark is hit
To check my theory, I changed __zone_watermark_ok() to ignore free CMA pages
With this change, the transfer succeeds w/o any failures.
The patch does make things slow of course. Ideally, I would have liked
to do this only if
the watermark is being checked for non-Movable allocations, but I couldn't find
an easy way to do that.
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 371a79f..b672d97 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -1580,6 +1580,21 @@ static bool __zone_watermark_ok(struct zone *z,
int order, unsigned long mark,
if (free_pages <= min)
return false;
}
+
+#ifdef CONFIG_CMA
+ /* If cma is enabled, ignore free pages from MIGRATE_CMA list
+ * for watermark checks
+ */
+ for (o = order; o < MAX_ORDER; o++) {
+ struct list_head *curr;
+ list_for_each(curr, &z->free_area[o].free_list[MIGRATE_CMA]) {
+ free_pages -= (1 << o);
+ if (free_pages <= min)
+ return false;
+ }
+ }
+#endif
+
return true;
}
Sandeep
next prev parent reply other threads:[~2012-02-08 2:05 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-02-03 12:18 [PATCHv20 00/15] Contiguous Memory Allocator Marek Szyprowski
2012-02-03 12:18 ` [PATCH 01/15] mm: page_alloc: remove trailing whitespace Marek Szyprowski
2012-02-03 12:18 ` [PATCH 02/15] mm: compaction: introduce isolate_migratepages_range() Marek Szyprowski
2012-02-03 12:18 ` [PATCH 03/15] mm: compaction: introduce map_pages() Marek Szyprowski
2012-02-03 13:30 ` Mel Gorman
2012-02-03 12:18 ` [PATCH 04/15] mm: compaction: introduce isolate_freepages_range() Marek Szyprowski
2012-02-03 12:18 ` [PATCH 05/15] mm: compaction: export some of the functions Marek Szyprowski
2012-02-05 7:40 ` Hillf Danton
2012-02-05 14:34 ` Michal Nazarewicz
2012-02-06 12:46 ` Hillf Danton
2012-02-03 12:18 ` [PATCH 06/15] mm: page_alloc: introduce alloc_contig_range() Marek Szyprowski
2012-02-03 12:18 ` [PATCH 07/15] mm: page_alloc: change fallbacks array handling Marek Szyprowski
2012-02-03 12:18 ` [PATCH 08/15] mm: mmzone: MIGRATE_CMA migration type added Marek Szyprowski
2012-02-03 13:53 ` Mel Gorman
2012-02-03 14:19 ` Hillf Danton
2012-02-03 15:50 ` Michal Nazarewicz
2012-02-04 9:09 ` Hillf Danton
2012-02-05 14:37 ` Michal Nazarewicz
2012-02-03 12:18 ` [PATCH 09/15] mm: page_isolation: MIGRATE_CMA isolation functions added Marek Szyprowski
2012-02-03 12:18 ` [PATCH 10/15] mm: extract reclaim code from __alloc_pages_direct_reclaim() Marek Szyprowski
2012-02-03 12:18 ` [PATCH 11/15] mm: trigger page reclaim in alloc_contig_range() to stabilize watermarks Marek Szyprowski
2012-02-03 14:04 ` Mel Gorman
2012-02-08 2:04 ` sandeep patil [this message]
2012-02-08 9:21 ` [Linaro-mm-sig] " Michal Nazarewicz
2012-02-08 19:26 ` sandeep patil
2012-02-08 15:14 ` Marek Szyprowski
2012-02-10 11:19 ` Mel Gorman
2012-02-10 15:36 ` Marek Szyprowski
2012-02-03 12:18 ` [PATCH 12/15] drivers: add Contiguous Memory Allocator Marek Szyprowski
2012-02-05 4:25 ` Hillf Danton
2012-02-05 14:33 ` Michal Nazarewicz
2012-02-06 12:51 ` Hillf Danton
2012-02-03 12:18 ` [PATCH 13/15] X86: integrate CMA with DMA-mapping subsystem Marek Szyprowski
2012-02-03 12:18 ` [PATCH 14/15] ARM: " Marek Szyprowski
2012-02-03 12:18 ` [PATCH 15/15] ARM: Samsung: use CMA for 2 memory banks for s5p-mfc device Marek Szyprowski
2012-02-03 14:09 ` [PATCHv20 00/15] Contiguous Memory Allocator Mel Gorman
2012-02-07 9:06 ` Contiguous Memory Allocator on HIGHMEM cp.zou
2012-02-07 9:48 ` Marek Szyprowski
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='CA+K6fF49BQiNer=7Di+gCU_EX4E41q-teXJJUBjEd2xc12-j4w@mail.gmail.com' \
--to=psandeep.s@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=arnd@arndb.de \
--cc=corbet@lwn.net \
--cc=dave@linux.vnet.ibm.com \
--cc=dwalker@codeaurora.org \
--cc=jesse.barker@linaro.org \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=kyungmin.park@samsung.com \
--cc=linaro-mm-sig@lists.linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux@arm.linux.org.uk \
--cc=m.szyprowski@samsung.com \
--cc=mel@csn.ul.ie \
--cc=mina86@mina86.com \
--cc=ohad@wizery.com \
--cc=rob.clark@linaro.org \
/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).