All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ross Biro <rossb@google.com>
To: Jason Li <zhjl000@yahoo.com>
Cc: linux-kernel@vger.kernel.org
Subject: Re: out_of_memory called to often
Date: Tue, 11 Mar 2003 12:43:12 -0800	[thread overview]
Message-ID: <3E6E4A60.90001@google.com> (raw)
In-Reply-To: 20030311191342.18575.qmail@web41003.mail.yahoo.com


Jason Li wrote:

>Hi,
>
>We are running an embedded linux (2.4.19) with no swap
>sapce. And we haven't applied any rmap yet.
>
I believe you may be seeing the same issue I brought up in a previous 
email.  Have you tried what I suggested? I've appended the email to this 
message with out the test code.

    Ross


I've verified this in 2.4.21-pre5 by code inspection and can trigger the 
problem on 2.4.18.  It appears to have been fixed in 2.5.

The folowing code vmscan.c assumes that there is available swap space.

       /*
        * this is the non-racy check for busy page.
        */
       if (!page->mapping || !is_page_cache_freeable(page)) {
           spin_unlock(&pagecache_lock);
           UnlockPage(page);
page_mapped:
           if (--max_mapped >= 0)
               continue;

           /*
            * Alert! We've found too many mapped pages on the
            * inactive list, so we start swapping out now!
            */
           spin_unlock(&pagemap_lru_lock);
           swap_out(priority, gfp_mask, classzone);
           return nr_pages;
       }


If there is no swap space, then unfreeable pages are left on the 
inactive queue and the vmtree is walked rather than going through the 
rest of the inactive queue.  I believe something like
       /*
        * this is the non-racy check for busy page.
        */
       if (!page->mapping || !is_page_cache_freeable(page)) {
           spin_unlock(&pagecache_lock);
           UnlockPage(page);
page_mapped:
                       /* If we don't have any swap space left, there
                          is no reason to worry about pages that do
                          not have swap associated with them, there
                          is nothing we can do about it. */
                       if (!page->mapping && !swap_avail()) {
                               /* Let's make the page active since we
                                  cannot swap it out.  It get's it off
                                  the inactive list. */
                               spin_unlock(&pagemap_lru_lock);
                               activate_page(page);
                               ClearPageReferenced(page);
                               spin_lock(&pagemap_lru_lock);
                               continue;
                       }
           if (--max_mapped >= 0)
               continue;

           /*
            * Alert! We've found too many mapped pages on the
            * inactive list, so we start swapping out now!
            */
           spin_unlock(&pagemap_lru_lock);
           swap_out(priority, gfp_mask, classzone);
           return nr_pages;
       }

will work better when there is no swap space available.  If this change 
is made, it may also be necessary to limit refill_inactive to prevent it 
from using too much cpu.  This bug can be triggered with the attached 
code and the correct parameters.  In particular on a 3 gigabyte machine 
with no swap,

for i in $(seq 0 9); do dd if=/dev/zero of=file$i bs=1024k count=512; done
killmm 1032735283 2 9

Usually causes an out of memory error when there is hundreds of 
megabytes of cache.


   Ross


      reply	other threads:[~2003-03-11 20:32 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-03-11 19:13 out_of_memory called to often Jason Li
2003-03-11 20:43 ` Ross Biro [this message]

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=3E6E4A60.90001@google.com \
    --to=rossb@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=zhjl000@yahoo.com \
    /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.