From: Alan Cox <alan@lxorguk.ukuu.org.uk>
To: Sami Farin <safari-kernel@safari.iki.fi>
Cc: Linux kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: Linux 2.6.24.4+mmap with overcommit >= 1
Date: Wed, 30 Apr 2008 11:24:53 +0100 [thread overview]
Message-ID: <20080430112453.406b243a@core> (raw)
In-Reply-To: <20080430011953.c5ftilonkabvwmkp@m.safari.iki.fi>
On Wed, 30 Apr 2008 04:19:54 +0300
Sami Farin <safari-kernel@safari.iki.fi> wrote:
> I have arch x86_64, glibc-2.7.90-7 from Fedora.
> When I have vm.overcommit_memory == 1 or 2,
> mmap succeeds for really huge values.
> These ranges succeed (approximate):
> 8793870000000 - 17500387000000
> 26390387000000 - 35180387000000
Fun fun fun
This should fix strict overcommit (== 2) I think
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.25-mm1/include/linux/mman.h linux-2.6.25-mm1/include/linux/mman.h
--- linux.vanilla-2.6.25-mm1/include/linux/mman.h 2008-04-28 11:35:21.000000000 +0100
+++ linux-2.6.25-mm1/include/linux/mman.h 2008-04-30 11:21:10.000000000 +0100
@@ -15,16 +15,31 @@
#include <asm/atomic.h>
+/* 32bit platforms have a virtual address space in pages we
+ can fit into an atomic_t. We want to avoid atomic64_t on
+ such boxes as it is often expensive and most strict overcommit
+ users turn out to be embedded low power processors */
+
+#if (BITS_PER_LONG == 32)
+#define vm_atomic_t atomic_t
+#define vm_atomic_read atomic_read
+#define vm_atomic_add atomic_add
+#else
+#define vm_atomic_t atomic64_t
+#define vm_atomic_read atomic64_read
+#define vm_atomic_add atomic64_add
+#endif
+
extern int sysctl_overcommit_memory;
extern int sysctl_overcommit_ratio;
-extern atomic_t vm_committed_space;
+extern vm_atomic_t vm_committed_space;
#ifdef CONFIG_SMP
extern void vm_acct_memory(long pages);
#else
static inline void vm_acct_memory(long pages)
{
- atomic_add(pages, &vm_committed_space);
+ vm_atomic_add(pages, &vm_committed_space);
}
#endif
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.25-mm1/mm/mmap.c linux-2.6.25-mm1/mm/mmap.c
--- linux.vanilla-2.6.25-mm1/mm/mmap.c 2008-04-28 11:36:52.000000000 +0100
+++ linux-2.6.25-mm1/mm/mmap.c 2008-04-30 11:17:03.000000000 +0100
@@ -80,7 +80,7 @@
int sysctl_overcommit_memory = OVERCOMMIT_GUESS; /* heuristic overcommit */
int sysctl_overcommit_ratio = 50; /* default is 50% */
int sysctl_max_map_count __read_mostly = DEFAULT_MAX_MAP_COUNT;
-atomic_t vm_committed_space = ATOMIC_INIT(0);
+vm_atomic_t vm_committed_space = ATOMIC_INIT(0);
/*
* Check that a process has enough memory to allocate a new virtual
@@ -177,7 +177,7 @@
* cast `allowed' as a signed long because vm_committed_space
* sometimes has a negative value
*/
- if (atomic_read(&vm_committed_space) < (long)allowed)
+ if (vm_atomic_read(&vm_committed_space) < (long)allowed)
return 0;
error:
vm_unacct_memory(pages);
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.25-mm1/mm/swap.c linux-2.6.25-mm1/mm/swap.c
--- linux.vanilla-2.6.25-mm1/mm/swap.c 2008-04-28 11:36:52.000000000 +0100
+++ linux-2.6.25-mm1/mm/swap.c 2008-04-30 11:18:05.000000000 +0100
@@ -503,7 +503,7 @@
local = &__get_cpu_var(committed_space);
*local += pages;
if (*local > ACCT_THRESHOLD || *local < -ACCT_THRESHOLD) {
- atomic_add(*local, &vm_committed_space);
+ vm_atomic_add(*local, &vm_committed_space);
*local = 0;
}
preempt_enable();
next prev parent reply other threads:[~2008-04-30 10:32 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-04-30 1:19 Linux 2.6.24.4+mmap with overcommit >= 1 Sami Farin
2008-04-30 10:24 ` Alan Cox [this message]
2008-04-30 11:47 ` Sami Farin
2008-04-30 14:06 ` Sami Farin
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=20080430112453.406b243a@core \
--to=alan@lxorguk.ukuu.org.uk \
--cc=linux-kernel@vger.kernel.org \
--cc=safari-kernel@safari.iki.fi \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.