Broken memory management on system with no swap
Terry Lambert
tlambert2 at mindspring.com
Sat Apr 19 11:56:59 PDT 2003
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
More information about the freebsd-current
mailing list