public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Nick Piggin <piggin@cyberone.com.au>
To: Stefan Schmidt <zaphodb@zaphods.net>
Cc: Andrew Morton <akpm@osdl.org>,
	marcelo.tosatti@cyclades.com, linux-kernel@vger.kernel.org,
	netdev@oss.sgi.com
Subject: Re: 2.6.10-rc1-mm4 -1 EAGAIN after allocation failure was: Re: Kernel 2.6.9 Multiple Page Allocation Failures
Date: Wed, 10 Nov 2004 15:24:10 +1100	[thread overview]
Message-ID: <419197EA.9090809@cyberone.com.au> (raw)
In-Reply-To: <20041110020327.GE20754@zaphods.net>

[-- Attachment #1: Type: text/plain, Size: 1356 bytes --]



Stefan Schmidt wrote:

>On Tue, Nov 09, 2004 at 05:39:20PM -0800, Andrew Morton wrote:
>
>>Well you've definitely used up all the memory which is available for atomic
>>allocations.  Are you using an increased /proc/sys/vm/min_free_kbytes there?
>>
>Yes, vm.min_free_kbytes=8192.
>For other vm-settings find sysctl.conf attached.
>
>Netdev: tg3 BCM5704r03, TSO off, ~32kpps rx, ~35kpps tx, ~2 rx errors/s
>
>
>>As for the application collapse: dunno.  Maybe networking broke.  It would
>>be interesting to test Linus's current tree, at
>>ftp://ftp.kernel.org/pub/linux/kernel/v2.6/snapshots/patch-2.6.10-rc1-bk19.gz
>>
>Will try that tomorrow. Would you suggest printing out show_free_areas();
>there too? I don't know what kind of an overhead that will generate on
>subsequent stack traces.
>
>

Stefan,
Can you try the following patch, please? It is diffed against 2.6.10-rc1,
but I think it should apply to -mm kernels as well.

Basically 2.6.8 and earlier kernels had some quirks in the page allocator
that would allow for example, a large portion of "DMA" memory to be reserved
for network memory allocations (atomic allocations). After 'fixing' this
problem, 2.6.9 is effectively left with about a quarter the amount of memory
reserved for network allocations compared with 2.6.8.

The following patch roughly restores parity there. Thanks.

Nick


[-- Attachment #2: mm-restore-atomic-buffer.patch --]
[-- Type: text/x-patch, Size: 2334 bytes --]




---

 linux-2.6-npiggin/mm/page_alloc.c |   41 +++++++++++++++++++++-----------------
 1 files changed, 23 insertions(+), 18 deletions(-)

diff -puN mm/page_alloc.c~mm-restore-atomic-buffer mm/page_alloc.c
--- linux-2.6/mm/page_alloc.c~mm-restore-atomic-buffer	2004-11-10 15:13:33.000000000 +1100
+++ linux-2.6-npiggin/mm/page_alloc.c	2004-11-10 14:57:54.000000000 +1100
@@ -1935,8 +1935,12 @@ static void setup_per_zone_pages_min(voi
 			                   lowmem_pages;
 		}
 
-		zone->pages_low = zone->pages_min * 2;
-		zone->pages_high = zone->pages_min * 3;
+		/*
+		 * When interpreting these watermarks, just keep in mind that:
+		 * zone->pages_min == (zone->pages_min * 4) / 4;
+		 */
+		zone->pages_low   = (zone->pages_min * 5) / 4;
+		zone->pages_high  = (zone->pages_min * 6) / 4;
 		spin_unlock_irqrestore(&zone->lru_lock, flags);
 	}
 }
@@ -1945,24 +1949,25 @@ static void setup_per_zone_pages_min(voi
  * Initialise min_free_kbytes.
  *
  * For small machines we want it small (128k min).  For large machines
- * we want it large (16MB max).  But it is not linear, because network
+ * we want it large (64MB max).  But it is not linear, because network
  * bandwidth does not increase linearly with machine size.  We use
  *
- *	min_free_kbytes = sqrt(lowmem_kbytes)
+ * 	min_free_kbytes = 4 * sqrt(lowmem_kbytes), for better accuracy:
+ *	min_free_kbytes = sqrt(lowmem_kbytes * 16)
  *
  * which yields
  *
- * 16MB:	128k
- * 32MB:	181k
- * 64MB:	256k
- * 128MB:	362k
- * 256MB:	512k
- * 512MB:	724k
- * 1024MB:	1024k
- * 2048MB:	1448k
- * 4096MB:	2048k
- * 8192MB:	2896k
- * 16384MB:	4096k
+ * 16MB:	512k
+ * 32MB:	724k
+ * 64MB:	1024k
+ * 128MB:	1448k
+ * 256MB:	2048k
+ * 512MB:	2896k
+ * 1024MB:	4096k
+ * 2048MB:	5792k
+ * 4096MB:	8192k
+ * 8192MB:	11584k
+ * 16384MB:	16384k
  */
 static int __init init_per_zone_pages_min(void)
 {
@@ -1970,11 +1975,11 @@ static int __init init_per_zone_pages_mi
 
 	lowmem_kbytes = nr_free_buffer_pages() * (PAGE_SIZE >> 10);
 
-	min_free_kbytes = int_sqrt(lowmem_kbytes);
+	min_free_kbytes = int_sqrt(lowmem_kbytes * 16);
 	if (min_free_kbytes < 128)
 		min_free_kbytes = 128;
-	if (min_free_kbytes > 16384)
-		min_free_kbytes = 16384;
+	if (min_free_kbytes > 65536)
+		min_free_kbytes = 65536;
 	setup_per_zone_pages_min();
 	setup_per_zone_protection();
 	return 0;

_

  parent reply	other threads:[~2004-11-10  4:27 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-11-03 22:24 Kernel 2.6.9 Multiple Page Allocation Failures (Part 2) Stefan Schmidt
2004-11-04 12:17 ` Marcelo Tosatti
2004-11-04 18:18   ` Stefan Schmidt
2004-11-09 16:41     ` Kernel 2.6.9 Multiple Page Allocation Failures Marcelo Tosatti
2004-11-09 22:35       ` Lukas Hejtmanek
2004-11-09 22:46         ` Andrew Morton
2004-11-09 22:44           ` Lukas Hejtmanek
2004-11-09 20:33             ` Marcelo Tosatti
2004-11-10 20:35               ` Lukas Hejtmanek
2004-11-10 21:09                 ` Andrew Morton
2004-11-10 21:24                   ` Lukas Hejtmanek
2004-11-10 21:47                     ` Andrew Morton
2004-11-10 21:28               ` Lukas Hejtmanek
2004-11-10 18:11                 ` Marcelo Tosatti
2004-11-11  1:04                   ` Lukas Hejtmanek
2004-11-11 21:44                   ` Lukas Hejtmanek
2004-11-12 12:09                     ` Nick Piggin
2004-11-13 14:47                       ` Stefan Schmidt
2004-11-16  9:33                         ` Marcelo Tosatti
2004-11-16 17:05                           ` Lukas Hejtmanek
2004-11-21  1:43                             ` Stefan Schmidt
2004-11-21  2:42                               ` Stefan Schmidt
2004-12-02 19:54                                 ` Lukas Hejtmanek
2004-12-02 20:25                                   ` Andrew Morton
2004-12-02 21:03                                     ` Lukas Hejtmanek
2004-12-02 22:31                                       ` Stefan Schmidt
2004-12-02 22:48                                         ` Lukas Hejtmanek
2004-12-02 22:56                                         ` Andrew Morton
2004-12-02 23:18                                           ` Lukas Hejtmanek
2004-12-03  0:18                                             ` Andrew Morton
2004-12-03 12:11                                               ` Lukas Hejtmanek
2004-12-03 12:17                                                 ` Lukas Hejtmanek
2004-12-07 22:52                                                 ` Nick Piggin
2004-12-07 22:59                                                   ` Lukas Hejtmanek
2004-12-07 23:05                                                     ` Nick Piggin
2004-12-08 11:18                                                       ` Lukas Hejtmanek
2004-12-08 11:23                                                         ` Nick Piggin
2004-12-08 11:46                                                           ` Lukas Hejtmanek
2004-12-08 13:14                                                           ` Lukas Hejtmanek
2004-12-09  8:52                                                             ` Nick Piggin
2004-12-09  9:02                                                               ` Lukas Hejtmanek
2004-12-09 10:29                                                                 ` Nick Piggin
2004-12-09 10:37                                                                   ` Lukas Hejtmanek
2004-12-03  6:18                                           ` Nathan Scott
2004-12-03  7:06                                             ` Andrew Morton
2004-12-07 11:17                                             ` Lukas Hejtmanek
2004-12-08  0:15                                               ` Nathan Scott
2004-12-08  0:36                                                 ` Lukas Hejtmanek
2004-12-03 10:35                                           ` Christoph Hellwig
2004-12-03 10:58                                     ` P
2004-12-03 17:11                                       ` Andrew Morton
2004-11-09 23:52           ` Stefan Schmidt
2004-11-10  1:27             ` 2.6.10-rc1-mm4 -1 EAGAIN after allocation failure was: " Stefan Schmidt
2004-11-10  1:39               ` Andrew Morton
2004-11-10  2:03                 ` Stefan Schmidt
2004-11-10  2:21                   ` Andrew Morton
2004-11-10  4:24                   ` Nick Piggin [this message]
2004-11-10 10:28                     ` Stefan Schmidt
2004-11-10 12:06                       ` Stefan Schmidt
2004-11-10  8:58                         ` Marcelo Tosatti
2004-11-10 12:48                           ` Stefan Schmidt
2004-11-10 10:56                             ` Marcelo Tosatti
2004-11-11  1:23                             ` Nick Piggin
2004-11-11 18:31                               ` jhigdon

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=419197EA.9090809@cyberone.com.au \
    --to=piggin@cyberone.com.au \
    --cc=akpm@osdl.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=marcelo.tosatti@cyclades.com \
    --cc=netdev@oss.sgi.com \
    --cc=zaphodb@zaphods.net \
    /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