Re: 1gb RAM + 1gb SWAP + make -j bzImage = OOM

Stephan von Krawczynski
2002-01-05T15:17:57Z

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

On Fri, 4 Jan 2002 17:24:18 -0800
Phil Oester <kernel@theoesters.com> wrote:

> On Fri, Jan 04, 2002 at 04:42:43PM -0800, Nicholas Knight wrote:
> > The one catch is that -j is specified without a number.
>
> [snip superfluous description of what 'make -j' implies]
>
> > number, your system is dead. A user issue because it seems the user is
> > using the option without fully comprehending the consequences.
>
> eh? Trust me - i understand the implications of make -j. It's not an
unreasonable test, especially on a machine with 1gb ram/swap. For reference,
read Rik's email regarding his reverse VM patch:>
> http://marc.theaimsgroup.com/?l=linux-kernel&m=101007711817127&w=2
>
> Might be enlightening

I guess this testcase is somewhat driving in the direction of Martins test with
some setis running, meaning it has a lot of standard processes that need files
and try to work out something. Can you try Martins patch at your side, redo the
-j story and give us a result? I attached it for an easy go :-)

Thanks,
Stephan

[-- Attachment #2: vmscan.patch.2.4.17.c --]
[-- Type: text/plain, Size: 1275 bytes --]

--- linux.virgin/mm/vmscan.c Mon Dec 31 12:46:25 2001
+++ linux/mm/vmscan.c Thu Jan 3 19:43:02 2002
@@ -394,9 +394,9 @@
if (PageDirty(page) && is_page_cache_freeable(page) && page->mapping) {
/*
* It is not critical here to write it only if
- * the page is unmapped beause any direct writer
+ * the page is unmapped because any direct writer
* like O_DIRECT would set the PG_dirty bitflag
- * on the phisical page after having successfully
+ * on the physical page after having successfully
* pinned it and after the I/O to the page is finished,
* so the direct writes to the page cannot get lost.
*/
@@ -480,11 +480,14 @@

/*
* Alert! We've found too many mapped pages on the
- * inactive list, so we start swapping out now!
+ * inactive list.
+ * Move referenced pages to the active list.
*/
- spin_unlock(&pagemap_lru_lock);
- swap_out(priority, gfp_mask, classzone);
- return nr_pages;
+ if (PageReferenced(page)) {
+ del_page_from_inactive_list(page);
+ add_page_to_active_list(page);
+ }
+ continue;
}

/*
@@ -521,6 +524,9 @@
}
spin_unlock(&pagemap_lru_lock);

+ if (max_mapped <= 0 && nr_pages > 0)
+ swap_out(priority, gfp_mask, classzone);
+
return nr_pages;
}