Hi, Jörg
Have you noticed this syscall:
======================================================================
Declared in <Sysent.c>:
/* 131 */ SYSENT_CI("memcntl", memcntl, 6),
Defined in <Memcntl.c>
int
memcntl(caddr_t addr, size_t len, int cmd, caddr_t arg, int attr, int mask) {
........
switch ((uintptr_t)arg) {
case MADV_WILLNEED:
fc = as_faulta(as, addr, len);
if (fc) {
if (FC_CODE(fc) == FC_OBJERR)
error = set_errno(FC_ERRNO(fc));
else if (FC_CODE(fc) == FC_NOMAP)
error = set_errno(ENOMEM);
else
error = set_errno(EINVAL);
return (error);
}
break;
case MADV_DONTNEED:
/*
* For now, don't need is turned into an as_ctl(MC_SYNC)
* operation flagged for async invalidate.
*/
error = as_ctl(as, addr, len, MC_SYNC, attr,
MS_ASYNC | MS_INVALIDATE, NULL, 0);
if (error)
(void) set_errno(error);
return (error);
...
=================================================================
We can see MADV_WILLNEED indeed causes a early faulting page in (as_faulta).
Whereas MADV_DONTNEED will flag the page for async invalidate.
Haven't found any callers in the kernel calling into "memcntl" though. Any
ideas?
Thanks
Peng Du
On Mon, 2009-04-06 at 10:26 +0200, Joerg Schilling wrote:
Peng Du <[email protected]> wrote:
>
> > Hello, experts
> >
> > I have a question about syscall "madvise"
> > (http://docs.sun.com/app/docs/doc/816-5168/madvise-3c?a=view). I want to
> > know whether MADV_WILLNEED and MADV_DONTNEED will affect pageout
> > decisions. In my intuition, page scanner should try to keep MADV_WILLNEED
> > pages in physical memory, and prefer MADV_DONTNEED pages for swapping out.
>
> I tried to use this 10 years ago in order to make star faster to no avail.
> I would like to see a way to tell Solaris to do read aheads but to remove
> anything from the cache after it was read once.
>
> Jörg
>
--
This message posted from opensolaris.org
_______________________________________________
opensolaris-code mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/opensolaris-code