Re: Broken memory management on system with no swap

From: Terry Lambert <tlambert2_at_mindspring.com>
Date: Sat, 19 Apr 2003 11:55:38 -0700
Lucky Green wrote:
> There appears to be a memory management bug that affects systems without
> swap files. Processes are killed off due to the server being "out of
> swap space" even though top shows some 800MB of "inactive" memory
> available.
> 
> Apr 18 18:13:25 pakastelohi kernel: swap_pager_getswapspace: failed

This is generally an attempt to get a swap mapping for backing store
for the process.  It could be that all your "inactive" memory has
been spoken for.


> I suspect that for some reason memory listed as "inactive" by top is not
> being correctly allocated to new processes when no swapfile is
> available, since the errors do not appear until memory listed as "free"
> has dropped to about 1.5-3k.

If you had provided a traceback, I would guess that this happened
as a call from swap_pager_reserve(), as opposed to a call from
swap_pager_strategy() or swap_pager_putpages().  This can only
happen if you are using an md device; are you using an md device
(ramdisk)?  If so: cut it out, or make sure the MD_RESERVE bit is
not set.

Probably the correct thing to do is to remove the reference to
swap_pager_reserve() in md (and make it use the abstract interface)
and remove the reference to swap_pager_putpages() in default_pager.c
default_pager_putpages() (and make it use the abstract interface *).

* All other references in the system are made through struct pagerops
  element dereferences.

If you are using md, you could probably get away with replacing the
swap pager reference with a phys pager reference; same for the default
pager's reference.

You might even want to consider making the pagertab[] a result of a
linker set, instead of a statically declared thing in vm_pager.c,
and making the swap_pager completely optional to the system...

-- Terry
Received on Sat Apr 19 2003 - 09:56:58 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:04 UTC