From: Christoph Lameter <clameter@sgi.com>
To: linux-mm@kvack.org
Cc: linux-kernel@vger.kernel.org, akpm@linux-foundation.org,
dkegel@google.com, Peter Zijlstra <a.p.zijlstra@chello.nl>,
David Miller <davem@davemloft.net>, Nick Piggin <npiggin@suse.de>
Subject: [RFC 3/3] Test code for PF_MEMALLOC reclaim
Date: Tue, 14 Aug 2007 07:21:06 -0700 [thread overview]
Message-ID: <20070814143303.432960585@sgi.com> (raw)
In-Reply-To: 20070814142103.204771292@sgi.com
[-- Attachment #1: test_reclaim --]
[-- Type: text/plain, Size: 2831 bytes --]
Insert an allocation of 12 MB into shrink_slab(). The allocation occurs every
2 minutes. Reserves are typically around 5-10MB and so it will invariably
exhaust the reserves.
Without the earlier patches this will cause an OOM.
With the patches to allow reclaim with PF_MEMALLOC we will reclaim and
continue
Typical trace output is:
Reclaim: Excessive GFP_KERNEL allocs
Reclaimed 63 pages with NOMEMALLOC
Reclaimed 60 pages with NOMEMALLOC
Reclaimed 52 pages with NOMEMALLOC
Reclaimed 62 pages with NOMEMALLOC
Reclaimed 64 pages with NOMEMALLOC
Reclaimed 64 pages with NOMEMALLOC
Reclaimed 64 pages with NOMEMALLOC
Reclaim: Memory freed
---
mm/vmscan.c | 45 ++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 44 insertions(+), 1 deletion(-)
Index: linux-2.6/mm/vmscan.c
===================================================================
--- linux-2.6.orig/mm/vmscan.c 2007-08-14 00:04:26.000000000 -0700
+++ linux-2.6/mm/vmscan.c 2007-08-14 00:15:41.000000000 -0700
@@ -132,6 +132,14 @@ void unregister_shrinker(struct shrinker
}
EXPORT_SYMBOL(unregister_shrinker);
+/*
+ * Min freekbytes is 2m. 3000 pages give us 12M which is
+ * able to exhaust the reserves
+ */
+#define NR_TEST 3000
+
+static void isittime(void);
+
#define SHRINK_BATCH 128
/*
* Call the shrink functions to age shrinkable caches
@@ -161,6 +169,7 @@ unsigned long shrink_slab(unsigned long
if (scanned == 0)
scanned = SWAP_CLUSTER_MAX;
+ isittime();
/*
* Not sure if we can keep this clean of allocs.
* Better leave it off for now
@@ -1110,7 +1119,36 @@ static unsigned long shrink_zones(int pr
}
return nr_reclaimed;
}
-
+
+
+static void isittime(void)
+{
+ struct page **base;
+ int i;
+ static unsigned long lasttime = 120 * HZ;
+
+ /* Every 2 minutes */
+ if (time_after(jiffies, lasttime)) {
+ lasttime = jiffies + 120 * HZ;
+ printk(KERN_CRIT "Reclaim: Excessive GFP_KERNEL allocs\n");
+ /* Force memory to become exhausted */
+ base = kzalloc(NR_TEST * sizeof(void *), GFP_KERNEL);
+
+ for (i = 0; i < NR_TEST; i++) {
+ base[i] = alloc_page(GFP_KERNEL);
+ if (!base[i]) {
+ printk("Alloc failed at %d\n", i);
+ break;
+ }
+ }
+ for (i = 0; i < NR_TEST; i++)
+ if (base[i])
+ put_page(base[i]);
+ kfree(base);
+ printk(KERN_CRIT "Reclaim: Memory freed\n");
+ }
+}
+
/*
* This is the main entry point to direct page reclaim.
*
@@ -1216,6 +1254,11 @@ out:
zone->prev_priority = priority;
}
+
+ if (gfp_mask & __GFP_NOMEMALLOC)
+ printk(KERN_WARNING "Reclaimed %lu pages with NOMEMALLOC\n",
+ nr_reclaimed);
+
return ret;
}
--
--
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:[~2007-08-14 14:21 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-08-14 14:21 [RFC 0/3] Recursive reclaim (on __PF_MEMALLOC) Christoph Lameter
2007-08-14 14:21 ` [RFC 1/3] Allow reclaim via __GFP_NOMEMALLOC reclaim Christoph Lameter
2007-08-14 14:21 ` [RFC 2/3] Use NOMEMALLOC reclaim to allow reclaim if PF_MEMALLOC is set Christoph Lameter
2007-08-14 14:21 ` Christoph Lameter [this message]
2007-08-14 14:36 ` [RFC 0/3] Recursive reclaim (on __PF_MEMALLOC) Peter Zijlstra
2007-08-14 15:29 ` Christoph Lameter
2007-08-14 19:32 ` Peter Zijlstra
2007-08-14 19:41 ` Christoph Lameter
2007-08-15 12:22 ` Nick Piggin
2007-08-15 13:12 ` Peter Zijlstra
2007-08-15 14:15 ` Andi Kleen
2007-08-15 13:55 ` Peter Zijlstra
2007-08-15 14:34 ` Andi Kleen
2007-08-15 20:32 ` Christoph Lameter
2007-08-15 20:29 ` Christoph Lameter
2007-08-16 3:29 ` Nick Piggin
2007-08-16 20:27 ` Christoph Lameter
2007-08-20 3:51 ` Peter Zijlstra
2007-08-20 19:15 ` Christoph Lameter
2007-08-21 0:32 ` Nick Piggin
2007-08-21 0:28 ` Nick Piggin
2007-08-21 15:29 ` Peter Zijlstra
2007-08-23 3:02 ` Nick Piggin
2007-09-12 22:39 ` Christoph Lameter
2007-09-05 9:20 ` Daniel Phillips
2007-09-05 10:42 ` Christoph Lameter
2007-09-05 11:42 ` Nick Piggin
2007-09-05 12:14 ` Christoph Lameter
2007-09-05 12:19 ` Nick Piggin
2007-09-10 19:29 ` Christoph Lameter
2007-09-10 19:37 ` Peter Zijlstra
2007-09-10 19:41 ` Christoph Lameter
2007-09-10 19:55 ` Peter Zijlstra
2007-09-10 20:17 ` Christoph Lameter
2007-09-10 20:48 ` Peter Zijlstra
2007-09-11 7:41 ` Nick Piggin
2007-09-12 10:52 ` Peter Zijlstra
2007-09-12 22:47 ` Christoph Lameter
2007-09-13 8:19 ` Peter Zijlstra
2007-09-13 18:32 ` Christoph Lameter
2007-09-13 19:24 ` Peter Zijlstra
2007-09-05 16:16 ` Daniel Phillips
2007-09-08 5:12 ` Mike Snitzer
2007-09-18 0:28 ` Daniel Phillips
2007-09-18 3:27 ` Mike Snitzer
[not found] ` <200709172211.26493.phillips@phunq.net>
2007-09-18 8:11 ` Wouter Verhelst
2007-09-18 9:58 ` Peter Zijlstra
2007-09-18 16:56 ` Daniel Phillips
2007-09-18 19:16 ` Peter Zijlstra
2007-09-18 9:30 ` Peter Zijlstra
2007-09-18 18:40 ` Daniel Phillips
2007-09-18 20:13 ` Mike Snitzer
2007-09-10 19:25 ` Christoph Lameter
2007-09-10 19:55 ` Peter Zijlstra
2007-09-10 20:22 ` Christoph Lameter
2007-09-10 20:48 ` Peter Zijlstra
2007-10-26 17:44 ` Pavel Machek
2007-10-26 17:55 ` Christoph Lameter
2007-10-27 22:58 ` Daniel Phillips
2007-10-27 23:08 ` Daniel Phillips
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=20070814143303.432960585@sgi.com \
--to=clameter@sgi.com \
--cc=a.p.zijlstra@chello.nl \
--cc=akpm@linux-foundation.org \
--cc=davem@davemloft.net \
--cc=dkegel@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=npiggin@suse.de \
/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).