Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 19 Apr 2003 14:01:09 -0700
From:      Terry Lambert <tlambert2@mindspring.com>
To:        Lucky Green <shamrock@cypherpunks.to>
Cc:        freebsd-current@FreeBSD.ORG
Subject:   Re: Broken memory management on system with no swap
Message-ID:  <3EA1B915.D0B26399@mindspring.com>
References:  <000a01c306b5$9092c190$6601a8c0@VAIO650>

next in thread | previous in thread | raw e-mail | index | archive | help
Lucky Green wrote:
> Terry wrote:
> > 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 had been under the impression that inactive pages contained data that
> is no longer being used by a program, but is kept around in case the
> data may be needed again in the future. Is it not the case that inactive
> memory should be available to active processes if the processes require
> more memory?

It is LRU'ed.  If all the cache contents have been more recently
used than the contents of the dirty page that's potentially going
to be swapped, then the cached contents are "more precious" than
the page being swapped, even if no one is currently referencing
them.

In any case, I don't think this is what's happening, but without
a stack traceback, it's hard to tell exactly which of the 3 cases
is really happening.

You really need to give us a stack traceback, so that we don't
have to analyze all three code paths, and can concentrate on the
one that is biting you.


> > 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.
> 
> "device md" is compiled into the kernel, but to my knowledge I am not
> using any MD devices. Should I remove this entry from the kernel config
> file?

I don't know if the problem is coming from there.  Can you give
us a stack traceback?  Compile your kernel with BREAK_TO_DEBUGGER
and DDB, and then replace:

	printf("swap_pager_getswapspace: failed\n");

with:

	panic("swap_pager_getswapspace: failed\n");

in /usr/src/sys/vm/swap_pager.c in swp_pager_getswapspace() at
about line 474.

Then post a traceback so we can tell who called it.

-- Terry



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3EA1B915.D0B26399>