public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* buffer/memory strangeness in 2.4.16
       [not found] <200111291201.fATC1pd04206@lists.us.dell.com>
@ 2001-11-29 20:39 ` space-00002
  2001-11-30  9:29   ` Andrew Morton
  2001-12-14  1:30 ` buffer/memory strangeness in 2.4.16; fixed in 2.4.17-rc1 space-00002
  1 sibling, 1 reply; 7+ messages in thread
From: space-00002 @ 2001-11-29 20:39 UTC (permalink / raw)
  To: linux-kernel

Hi,

I am experiencing a bit of strange system behaviour in a vanilla 2.4.16 
kernel (2.95.3, very stable machine etc.)

I noticed, that after running for a while (day) I had significantly less 
memory available for my simulation program than right after booting. Looking 
at the problem using 'xosview' (or 'free'), I noticed that there was a large 
number of MBs filled with 'buffers' that did not get wiped when other 
programs need the memory. The system seems to rather kill an 'offender' than 
clean out buffers.

Right after booting, I can allocate about 650MBs memory using the little 
program attached below. After a day (or after running updatedb), under the 
same conditions, even in single user mode with only a shell running (!) this 
is not possible anymore and the program (below), trying to allocate only 
300-400MBs, gets killed by the system after making it unresponsive for many 
seconds.

Apparently this problem occurs after running 'updatedb', which fills 'free 
memory' and generates lots of filled cache and buffers on my system.

This sort of behaviour must have been introduced after 2.4.13, which does not 
show these problems.

Please tell me if somebody needs more information to debug this, or if this 
behaviour is normal or expected. Please cc: me as I am only on lkml-digest.

Cheers
	Jan


P.S. All RAM slots are full, so please don't suggest buying more memory as a 
solution :^)

-------------------%<-----------------------

#include <stdio.h>
#define ONE_MEG 1024 * 1024

main ()
{
        long mem_avail = ONE_MEG;
        char *buf;
        char userchar = '@';
        int howmany;

        while (1)
        {
                printf ("Number of MBs to allocate? ");
                scanf ("%d", &howmany);
                printf ("Trying to allocate %ld bytes: ", mem_avail*howmany);

                getchar ();
                if ((buf = (char *) malloc ((size_t) mem_avail*howmany))){
                        printf (" success!\n");
                        printf ("Now filling it up...\n");
                        memset (buf, userchar, mem_avail * howmany);
                        printf ("Hit ENTER to free the memory.\n");
                        getchar ();
                        free (buf);
                } else {
                        printf (" failed :(\n");
                }
        }
}

-------------------%<-----------------------

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: buffer/memory strangeness in 2.4.16
  2001-11-29 20:39 ` buffer/memory strangeness in 2.4.16 space-00002
@ 2001-11-30  9:29   ` Andrew Morton
  2001-12-01 22:07     ` buffer/memory strangeness in 2.4.16 / 2.4.17pre2 space-00002
  0 siblings, 1 reply; 7+ messages in thread
From: Andrew Morton @ 2001-11-30  9:29 UTC (permalink / raw)
  To: space-00002; +Cc: linux-kernel

space-00002@vortex.physik.uni-konstanz.de wrote:
> 
> Hi,
> 
> I am experiencing a bit of strange system behaviour in a vanilla 2.4.16
> kernel (2.95.3, very stable machine etc.)
> 
> I noticed, that after running for a while (day) I had significantly less
> memory available for my simulation program than right after booting. Looking
> at the problem using 'xosview' (or 'free'), I noticed that there was a large
> number of MBs filled with 'buffers' that did not get wiped when other
> programs need the memory. The system seems to rather kill an 'offender' than
> clean out buffers.
> 
>

Seconded.   After an updatedb run, my 768 megabyte 2.5.1-pre4 machine
shows:

             total       used       free     shared    buffers     cached
Mem:        770668     384460     386208          0     138548      17744
-/+ buffers/cache:     228168     542500

and, after malloc/memset of 700 megs:

             total       used       free     shared    buffers     cached
Mem:        770668      73340     697328          0      41160       5960
-/+ buffers/cache:      26220     744448
Swap:       499928      18628     481300

I repeated the malloc/memset a few times, wrote a gigabyte file
and was unable to make the 40 megabytes of buffermem go away.

MemTotal:       770668 kB
MemFree:        698008 kB
MemShared:           0 kB
Buffers:         42092 kB
Cached:           6088 kB
SwapCached:       9808 kB
Active:          48064 kB
Inactive:        10112 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:       770668 kB
LowFree:        698008 kB
SwapTotal:      499928 kB
SwapFree:       484512 kB

After running an extremely memory-intensive test program for
two minutes, buffermem fell to 38 megabytes.

Seems broken to me.

-

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: buffer/memory strangeness in 2.4.16 / 2.4.17pre2
  2001-11-30  9:29   ` Andrew Morton
@ 2001-12-01 22:07     ` space-00002
  2001-12-02  4:43       ` Andrew Morton
  0 siblings, 1 reply; 7+ messages in thread
From: space-00002 @ 2001-12-01 22:07 UTC (permalink / raw)
  To: linux-kernel; +Cc: Andrew Morton

It is still the same in 2.4.17pre2 :-(

On Friday 30 November 2001 10:29, Andrew Morton wrote:
> space-00002@vortex.physik.uni-konstanz.de wrote:
> > Hi,
> >
> > I am experiencing a bit of strange system behaviour in a vanilla 2.4.16
> > kernel (2.95.3, very stable machine etc.)
> >
> > I noticed, that after running for a while (day) I had significantly less
> > memory available for my simulation program than right after booting.
> > Looking at the problem using 'xosview' (or 'free'), I noticed that there
> > was a large number of MBs filled with 'buffers' that did not get wiped
> > when other programs need the memory. The system seems to rather kill an
> > 'offender' than clean out buffers.
>
> Seconded.   After an updatedb run, my 768 megabyte 2.5.1-pre4 machine
> shows:
>
>              total       used       free     shared    buffers     cached
> Mem:        770668     384460     386208          0     138548      17744
> -/+ buffers/cache:     228168     542500
>
> and, after malloc/memset of 700 megs:
>
>              total       used       free     shared    buffers     cached
> Mem:        770668      73340     697328          0      41160       5960
> -/+ buffers/cache:      26220     744448
> Swap:       499928      18628     481300
>
> I repeated the malloc/memset a few times, wrote a gigabyte file
> and was unable to make the 40 megabytes of buffermem go away.
>
> MemTotal:       770668 kB
> MemFree:        698008 kB
> MemShared:           0 kB
> Buffers:         42092 kB
> Cached:           6088 kB
> SwapCached:       9808 kB
> Active:          48064 kB
> Inactive:        10112 kB
> HighTotal:           0 kB
> HighFree:            0 kB
> LowTotal:       770668 kB
> LowFree:        698008 kB
> SwapTotal:      499928 kB
> SwapFree:       484512 kB
>
> After running an extremely memory-intensive test program for
> two minutes, buffermem fell to 38 megabytes.
>
> Seems broken to me.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: buffer/memory strangeness in 2.4.16 / 2.4.17pre2
  2001-12-01 22:07     ` buffer/memory strangeness in 2.4.16 / 2.4.17pre2 space-00002
@ 2001-12-02  4:43       ` Andrew Morton
  2001-12-02 12:17         ` Rik van Riel
  0 siblings, 1 reply; 7+ messages in thread
From: Andrew Morton @ 2001-12-02  4:43 UTC (permalink / raw)
  To: space-00002; +Cc: linux-kernel

space-00002@vortex.physik.uni-konstanz.de wrote:
> 
> It is still the same in 2.4.17pre2 :-(
> 

Yes, well, it would be.

It seems that what's happening is that all your buffercache memory
is on the active list, and all your anonymous memory is on the
inactive list.   Consequently the logic in shrink_caches() which
is supposed to move pages onto the inactive list doesn't do anything - it
just sits there calling refill_inactive() with a zero argument all
the time.

You'll find that if you push the machine really hard - allocate
1.5x physical memory and touch it all then the VM will, eventually,
with great reluctance and much swapping, relinquish the 30 megabytes
of buffercache memory.  But it's out of whack.

I tested the pre7aa1 patches and it seemed possibly a little better,
but not right.

If we put anon pages on the active list instead, then shrink_caches()
and refill_inactive() start to do something, and they move that stale
old buffercache memory onto the inactive list where it can be freed.

This is just a random hack.  I don't understand what's going on in
the VM, let alone what's *supposed* to be going on.  And given the
state of documentation available to us,  I never will.


--- linux-2.4.17-pre2/mm/memory.c	Thu Nov 22 23:02:59 2001
+++ linux-akpm/mm/memory.c	Sat Dec  1 20:14:28 2001
@@ -1174,6 +1174,7 @@ static int do_anonymous_page(struct mm_s
 		flush_page_to_ram(page);
 		entry = pte_mkwrite(pte_mkdirty(mk_pte(page, vma->vm_page_prot)));
 		lru_cache_add(page);
+		activate_page(page);
 	}
 
 	set_pte(page_table, entry);

-

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: buffer/memory strangeness in 2.4.16 / 2.4.17pre2
  2001-12-02  4:43       ` Andrew Morton
@ 2001-12-02 12:17         ` Rik van Riel
  2001-12-02 17:08           ` space-00002
  0 siblings, 1 reply; 7+ messages in thread
From: Rik van Riel @ 2001-12-02 12:17 UTC (permalink / raw)
  To: Andrew Morton; +Cc: space-00002, linux-kernel

On Sat, 1 Dec 2001, Andrew Morton wrote:

> You'll find that if you push the machine really hard - allocate
> 1.5x physical memory and touch it all then the VM will, eventually,
> with great reluctance and much swapping, relinquish the 30 megabytes
> of buffercache memory.  But it's out of whack.

This is an expected (and very bad) side effect of use-once.

> If we put anon pages on the active list instead, then shrink_caches()
> and refill_inactive() start to do something, and they move that stale
> old buffercache memory onto the inactive list where it can be freed.

This would fix the problem of not being able to evict stale
active pages, but I have no idea if it would unbalance
something else.

> This is just a random hack.  I don't understand what's going on in
> the VM, let alone what's *supposed* to be going on.  And given the
> state of documentation available to us,  I never will.

The balancing in Andrea's VM is just too subtle to understand
without docs, that is, if there is any particular idea behind
it and it isn't just experimentation.

regards,

Rik
-- 
Shortwave goes a long way:  irc.starchat.net  #swl

http://www.surriel.com/		http://distro.conectiva.com/


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: buffer/memory strangeness in 2.4.16 / 2.4.17pre2
  2001-12-02 12:17         ` Rik van Riel
@ 2001-12-02 17:08           ` space-00002
  0 siblings, 0 replies; 7+ messages in thread
From: space-00002 @ 2001-12-02 17:08 UTC (permalink / raw)
  To: akpm, riel; +Cc: linux-kernel

I verified this by throwing in 1GB of swap. It does lose the buffers 
eventually, but it does so under great pains. However, since I do have 
*plenty* memory and slow disks, I prefer running without swap. These settings 
appear to be broken (2.4.13 worked!).

Without swap, I would have to reboot every day to make my simulation happy.- 
But it needs to allocate and use *only* about 300 of 768MB which *should* be 
available, only because the night before a cron job kicked off 'updatdb' 
filling the buffers.

Without swap, it really is *this* bad in 2.4.16 and the latest pre-releases. 
RAM is full of buffers that just won't disappear to make room for more 
important stuff. My simulation gets killed *every time* until I reboot to 
free 'buffers' or add swap. (This makes everything slower in total.)

:-(

	Jan

On Sunday 02 December 2001 13:17, Rik wrote:
> On Sat, 1 Dec 2001, Andrew Morton wrote:
> > You'll find that if you push the machine really hard - allocate
> > 1.5x physical memory and touch it all then the VM will, eventually,
> > with great reluctance and much swapping, relinquish the 30 megabytes
> > of buffercache memory.  But it's out of whack.
>
> This is an expected (and very bad) side effect of use-once.
>
> > If we put anon pages on the active list instead, then shrink_caches()
> > and refill_inactive() start to do something, and they move that stale
> > old buffercache memory onto the inactive list where it can be freed.
>
> This would fix the problem of not being able to evict stale
> active pages, but I have no idea if it would unbalance
> something else.
>
> > This is just a random hack.  I don't understand what's going on in
> > the VM, let alone what's *supposed* to be going on.  And given the
> > state of documentation available to us,  I never will.
>
> The balancing in Andrea's VM is just too subtle to understand
> without docs, that is, if there is any particular idea behind
> it and it isn't just experimentation.
>
> regards,
>
> Rik

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: buffer/memory strangeness in 2.4.16; fixed in 2.4.17-rc1
       [not found] <200111291201.fATC1pd04206@lists.us.dell.com>
  2001-11-29 20:39 ` buffer/memory strangeness in 2.4.16 space-00002
@ 2001-12-14  1:30 ` space-00002
  1 sibling, 0 replies; 7+ messages in thread
From: space-00002 @ 2001-12-14  1:30 UTC (permalink / raw)
  To: linux-kernel

Hi,

just to let you know the problem described below seems to have been fixed in 
2.4.17-rc1. It behaves as it should. Great work!

Cheers,
	Jan

On Thursday 29 November 2001 21:39, you wrote:
> Hi,
>
> I am experiencing a bit of strange system behaviour in a vanilla 2.4.16
> kernel (2.95.3, very stable machine etc.)
>
> I noticed, that after running for a while (day) I had significantly less
> memory available for my simulation program than right after booting.
> Looking at the problem using 'xosview' (or 'free'), I noticed that there
> was a large number of MBs filled with 'buffers' that did not get wiped when
> other programs need the memory. The system seems to rather kill an
> 'offender' than clean out buffers.
>
> Right after booting, I can allocate about 650MBs memory using the little
> program attached below. After a day (or after running updatedb), under the
> same conditions, even in single user mode with only a shell running (!)
> this is not possible anymore and the program (below), trying to allocate
> only 300-400MBs, gets killed by the system after making it unresponsive for
> many seconds.
>
> Apparently this problem occurs after running 'updatedb', which fills 'free
> memory' and generates lots of filled cache and buffers on my system.
>
> This sort of behaviour must have been introduced after 2.4.13, which does
> not show these problems.

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2001-12-14  1:31 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <200111291201.fATC1pd04206@lists.us.dell.com>
2001-11-29 20:39 ` buffer/memory strangeness in 2.4.16 space-00002
2001-11-30  9:29   ` Andrew Morton
2001-12-01 22:07     ` buffer/memory strangeness in 2.4.16 / 2.4.17pre2 space-00002
2001-12-02  4:43       ` Andrew Morton
2001-12-02 12:17         ` Rik van Riel
2001-12-02 17:08           ` space-00002
2001-12-14  1:30 ` buffer/memory strangeness in 2.4.16; fixed in 2.4.17-rc1 space-00002

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox