*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->Tru64 Unix man pages -> nmadvise (3)              
Title
Content
Arch
Section
 

nmadvise(3)

Contents


NAME    [Toc]    [Back]

       nmadvise - Advise the system of the expected paging behavior
 of a process (libnuma)

SYNOPSIS    [Toc]    [Back]

       #include <numa.h> #include <sys/nman.h>

       int nmadvise(
               void *addr,
               long len,
               int behav,
               memalloc_attr_t *attr );

PARAMETERS    [Toc]    [Back]

       The parameters to the nmadvise() function are the same  as
       for  madvise(),  with  the addition of the attr parameter:
       Points to the starting address of the range  of  pages  to
       which  the  advice refers.  Starting at the address specified
 by the  addr  parameter,  specifies  the  length  (in
       bytes) of the memory range.  Specifies the expected behavior
 pattern for referencing pages in the specified  range.
       See  DESCRIPTION  for details.  Points to a structure containing
 the memory allocation policy and  attributes  that
       will be assigned to the specified range. See the entry for
       memalloc_attr_t in numa_types(4) for a description of this
       structure.

DESCRIPTION    [Toc]    [Back]

       The  nmadvise()  function  permits a process to advise the
       system about its expected behavior in referencing  a  particular
  range of pages in the process address space. This
       advice includes reference patterns that the system can use
       to optimize page fault behavior (as also supported by madvise()),
 plus NUMA locality information  that  the  system
       can  use  to  optimize the placement of the pages that are
       allocated in response to page faults.

       The nmadvise() function supports the following flags to be
       ORed  with  one  of  the  behav  values documented in madvise(2). The normal practice is to OR one or more  of  the
       following  flags  with  the MADV_NORMAL behavior to advise
       the system about page  placement  without  specifying  any
       particular paging behavior: Prepare the specified range or
       object for migration to the memory region specified by the
       memory allocation policy and associated attributes. Migration
 means that pages already allocated in  the  specified
       range  will  be  copied  to  new  pages that are allocated
       according to the NUMA policy and attributes  as  specified
       by the attr parameter. Without this flag, only new allocations
 in the specified range will be  allocated  according
       to the specified policy and attributes.

              See the discussion following this list for information
 about the effect of ORing this flag  with  the
              MADV_DONTNEED  behavior  value.   This  flag may be
              logically ORed with another behav flag to  indicate
              that  the  requested  operation be performed before
              returning from the function call.

              Without this flag,  the  nmadvise()  function  will
              return  as soon as the new memory allocation policy
              and attributes are in place and,  if  MADV_DONTNEED
              is  also  specified,  the currently allocated pages
              are discarded. In this case, migration of page contents
  (if MADV_CURRENT is specified and MADV_DONTNEED
 is not specified) or new allocations of zeroed
              pages  in  accordance with the specified policy and
              attributes does not occur until the program touches
              a  page  in  the specified range.  This flag may be
              logically ORed with another  behavflag  to  request
              that the program be notified if the specified operation
 cannot be performed. This flag  is  currently
              ignored.

       Except  for  MADV_DONTNEED,  the  behav flags supported by
       both madvise() and nmadvise()  are  equivalent.  In  other
       words,  the  behav  information is orthogonal to the additional
 NUMA information (the memory allocation policy  and
       associated  attributes)  that the nmadvise() function provides.
 However, MADV_DONTNEED has special significance  in
       the  context  of  memory  location changes within the NUMA
       topology. The nmadvise() call uses behav flags as  follows
       to specify how currently allocated pages are to be handled
       when the requested NUMA allocation policy  and  attributes
       are applied: MADV_DONTNEED tells the system to discard the
       contents of any pages currently allocated for the  process
       or thread and then perform future allocations according to
       the specified NUMA policy  and  attributes.   MADV_CURRENT
       (without  MADV_DONTNEED) requests that, if the NUMA policy
       and attributes indicate that page allocations should start
       in a location different from the location of pages already
       allocated, the contents of  the  already  allocated  pages
       should be migrated to the new location.

              The   MADV_CURRENT   is   ignored  when  ORed  with
              MADV_DONTNEED because the specified behavior is  to
              discard  currently  allocated pages.  Omitting both
              MADV_CURRENT and MADV_DONTNEED preserves  the  contents
  of  already allocated pages at their current
              location and allows only future page allocations to
              be  made according to the specified NUMA policy and
              attributes.

       Future page allocations that are  performed  according  to
       the  specified NUMA policy and attributes will be initialized
 to zero unless the memory allocation is performed  to
       map  a  file from disk, in which case the memory pages are
       inititalized from disk.

       If, in the structure pointed to by attr, the  mattr_policy
       member  is  MPOL_DIRECTED,  then  the  mattr_radset member
       specifies the Resource Affinity Domain  (RAD)  from  which
       pages will be allocated for virtual addresses in the specified
 range (addr to addr+len). If the mattr_policy member
       is  MPOL_THREAD,  then  pages for the virtual addresses in
       the specified thread will be allocated from  the  faulting
       thread's home RAD.

       If   the   mattr_policy   member   is   MPOL_DIRECTED   or
       MPOL_THREAD, then the mattr_radset  member  specifies  the
       overflow behavior when there is no free memory on the preferred
 RAD. If mattr_radset is NULL (in  other  words,  no
       RAD  set), then the overflow set is taken to be the set of
       all RADs in the caller's partition. If mattr_radset specifies
  an  empty  RAD set, no overflow RAD set is requested
       and the process or thread will wait for memory  to  become
       available on the preferred RAD.

       If  the  attr parameter is a NULL pointer, any behav flags
       specific to nmadvise()are ignored,  and  the  function  is
       equivalent  to  madvise().   In this case, any behav flags
       specific to nmadvise() (in other words, not  supported  by
       the madvise() function) are treated as invalid.

NOTES    [Toc]    [Back]

       As with madvise(), the behaviors specified with nmadvise()
       are considered by the system to be hints, and may in fact,
       be  unimplemented.  Unimplemented  behaviors  will  always
       return success.

       Furthermore,  the  operating  system  always  attempts  to
       replicate  program  text  and  shared  library text on all
       RADs, so any request to change the memory allocation  policy
  for these parts of the application's address space is
       always silently ignored.

RETURN VALUES    [Toc]    [Back]

       Success.  Failure. In this case, errno is set to  indicate
       the error.

ERRORS    [Toc]    [Back]

       If the nmadvise() function fails,  it sets errno to one of
       the following values for the reason specified:  MADV_DONTNEED
  was  specified  but  pages  could not be freed, most
       likely because the specified memory range includes a wired
       page.   A  non-NULL  attr  argument  points  to an invalid
       address, or the range of  pages  (addr,  len)  includes  a
       wired page or "hole" in the virtual address space.  One of
       the following conditions is true: The value of  the  behav
       parameter or a member of the attr structure (the specified
       RAD, RAD set, or memory  allocation  policy)  is  invalid.
       The  attr  parameter  is  a  NULL pointer (which makes the
       nmadvise() call equivalent to an madvise() call)  and  the
       logical  OR operation on behav values includes one or more
       flags supported only by nmadvise().   The  attr  structure
       specifies  a  RAD that has no memory.  The behav parameter
       specifies  MADV_SPACEAVAIL,  and   resources   cannot   be
       reserved.

SEE ALSO    [Toc]    [Back]

      
      
       Functions: madvise(2), nshmget(3), nmmap(3), numa_intro(3)

       Files: numa_types(4)



                                                      nmadvise(3)
[ Back ]
 Similar pages
Name OS Title
madvise Tru64 Advise the system of the expected paging behavior of a process
madvise HP-UX advise the system of a process's expected paging behavior
thrash IRIX thrash memory to explore paging behavior
rad_bind_pid Tru64 Attaches or binds a process to a Resource Affinity Domain by process ID (libnuma library)
rad_attach_pid Tru64 Attaches or binds a process to a Resource Affinity Domain by process ID (libnuma library)
nsg_attach_pid Tru64 Attaches a process to, or detaches a process from a NUMA Scheduling Group (libnuma library)
nsg_detach_pid Tru64 Attaches a process to, or detaches a process from a NUMA Scheduling Group (libnuma library)
munlockall Linux reenable paging for calling process
mlockall Linux disable paging for calling process
uswitch Tru64 Get or set compatibility environment specific behavior for a calling process through the uswitch val...
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service