Re: Thread implementations...

Richard Gooch (Richard.Gooch@atnf.CSIRO.AU)
Thu, 25 Jun 1998 09:41:18 +1000


Eric W. Biederman writes:
> >>>>> "RG" == Richard Gooch <Richard.Gooch@atnf.CSIRO.AU> writes:
>
> RG> If we get madvise(2) right, we don't need sendfile(2), correct?
>
> It looks like it from here. As far as madvise goes, I think we need
> to implement madvise(2) as:
>
> enum madvise_strategy {
> MADV_NORMAL,
> MADV_RANDOM,
> MADV_SEQUENTIAL,
> MADV_WILLNEED,
> MADV_DONTNEED,
> }
> struct madvise_struct {
> caddr_t addr;
> size_t size;
> size_t strategy;
> };
> int sys_madvise(struct madvise_struct *, int count);
>
> With madvise(3) following the traditional format with only one
^
Don't you mean 2?

> advisement can be done easily. The reason I suggest multiple
> arguments is that for apps that have random but predictable access
> patterns will want to use MADV_WILLNEED & MADV_DONTNEED to an optimum
> swapping algorigthm.

I'm not aware of madvise() being a POSIX standard. I've appended the
man page from alpha_OSF1, which looks reasonable. It would be nice to
be compatible with something.

Regards,

Richard....
===============================================================================
madvise(2) madvise(2)

NAME

mmaaddvviissee - Advise the system of the expected paging behavior of a process

SYNOPSIS

##iinncclluuddee <<ssyyss//ttyyppeess..hh>>
##iinncclluuddee <<ssyyss//mmmmaann..hh>>
iinntt mmaaddvviissee ((
ccaaddddrr__tt _a_d_d_r,,
ssiizzee__tt _l_e_n,,
iinntt _b_e_h_a_v ));;

PARAMETERS

_a_d_d_r Specifies the address of the region to which the advice refers.

_l_e_n Specifies the length in bytes of the region specified by the _a_d_d_r
parameter.

_b_e_h_a_v Specifies the behavior of the region. The following values for
the _b_e_h_a_v parameter are defined in the ssyyss//mmmmaann..hh header file:

MMAADDVV__NNOORRMMAALL
No further special treatment

MMAADDVV__RRAANNDDOOMM
Expect random page references

MMAADDVV__SSEEQQUUEENNTTIIAALL
Expect sequential references

MMAADDVV__WWIILLLLNNEEEEDD
Will need these pages

MMAADDVV__DDOONNTTNNEEEEDD
Do not need these pages

The system will free any resident pages that are allo-
cated to the region. All modifications will be lost
and any swapped out pages will be discarded. Subse-
quent access to the region will result in a zero-fill-
on-demand fault as though it is being accessed for the
first time. Reserved swap space is not affected by
this call.

MMAADDVV__SSPPAACCEEAAVVAAIILL
Ensure that resources are reserved

DESCRIPTION

The mmaaddvviissee(()) function permits a process to advise the system about its
expected future behavior in referencing a mapped file or shared memory
region.

NOTES

Only a few values of the bbeehhaavv parameter values are operational on Digital
UNIX systems. Non-operational values cause the system to always return
success (zero).

RETURN VALUES

Upon successful completion, the mmaaddvviissee(()) function returns zero. Other-
wise, -1 is returned and eerrrrnnoo is set to indicate the error.

ERRORS

If the mmaaddvviissee(()) function fails, eerrrrnnoo may be set to one of the following
values:

[[EEIINNVVAALL]] The _b_e_h_a_v parameter is invalid.

[[EENNOOSSPPCC]] The _b_e_h_a_v parameter specifies MADV_SPACEAVAIL and resources can
not be reserved.

RELATED INFORMATION

Functions: mmmmaapp(2)

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu