unixdev.net


Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (SunOS-5.10)
Page:
Section:
Apropos / Subsearch:
optional field

meminfo(2)                       System Calls                       meminfo(2)



NAME
       meminfo - provide information about memory

SYNOPSIS
       #include <&lt;sys/types.h>&gt;
       #include <&lt;sys/mman.h>&gt;

       int  meminfo(const  uint64_t  inaddr[],  int  addr_count,  const uint_t
       info_req[], int info_count, uint64_t outdata[], uint_t validity[]);

PARAMETERS
       inaddr          array  of  input  addresses;  the  maximum  number   of
                       addresses  that  can  be  processed  for  each  call is
                       MAX_MEMINFO_CNT



       addr_count      number of addresses



       info_req        array of types of information requested



       info_count      number of pieces  of  information  requested  for  each
                       address in inaddr



       outdata         array into which results are placed; array size must be
                       the product of info_count and addr_count



       validity        array of  size  addr_count  containing  bitwise  result
                       codes;  0th  bit  evaluates  validity  of corresponding
                       input address, 1st bit validity of  response  to  first
                       member of info_req, and so on



DESCRIPTION
       The  meminfo() function provides information about virtual and physical
       memory particular to the calling process.  The  user  or  developer  of
       performance utilities can use this information to analyze system memory
       allocations and develop a better understanding of the factors affecting
       application performance.

       The  caller  of meminfo() can obtain the following types of information
       about both virtual and physical memory.

       MEMINFO_VPHYSICAL       physical  address  corresponding   to   virtual
                               address



       MEMINFO_VLGRP           locality  group  of physical page corresponding
                               to virtual address



       MEMINFO_VPAGESIZE       size of physical page corresponding to  virtual
                               address



       MEMINFO_VREPLCNT        number of replicated physical pages correspond-
                               ing to specified virtual address



       MEMINFO_VREPL | n       nth  physical  replica  of  specified   virtual
                               address



       MEMINFO_VREPL_LGRP | n  lgrp  of nth physical replica of specified vir-
                               tual address



       MEMINFO_PLGRP           locality group of specified physical address



RETURN VALUES
       Upon  successful  completion  meminfo()  returns  0.  Otherwise  -1  is
       returned and errno is set to indicate the error.

ERRORS
       The meminfo() function will fail if:

       EFAULT          The area pointed to by outdata or validity could not be
                       written, or the data pointed to by info_req  or  inaddr
                       could not be read.



       EINVAL          The value of info_count is greater than 31 or less than
                       1, or the value of addr_count is less than 1.



EXAMPLES
       Example 1: Print physical pages and page sizes corresponding to  a  set
       of virtual addresses.

       The  following  example prints the physical pages and page sizes corre-
       sponding to a set of virtual addresses.

       void
       print_info(void **addrvec, int how_many)
       {
           static const uint_t info[] = {
               MEMINFO_VPHYSICAL,
               MEMINFO_VPAGESIZE
           };

           int info_num = sizeof (info) / sizeof (info[0]);
           int i;

           uint64_t *inaddr = alloca(sizeof (uint64_t) * how_many);
           uint64_t *outdata = alloca(sizeof (uint64_t) * how_many * info_num);
           uint_t *validity = alloca(sizeof (uint_t) * how_many);

           for (i = 0; i < how_many; i++)
               inaddr[i] = (uint64_t)addrvec[i];

           if (meminfo(inaddr, how_many, info, info_num, outdata, validity) < 0) {
               perror("meminfo");
               return;
           }

           for (i = 0; i < how_many; i++) {
               if ((validity[i] & 1) == 0)
                   printf("address 0x%llx not part of address space\n",
                       inaddr[i]);

               else if ((validity[i] & 2) == 0)
                   printf("address 0x%llx has no physical page "
                       "associated with it\n", inaddr[i]);

               else {
                   char buff[80];
                   if ((validity[i] & 4) == 0)
                       strcpy(buff, "<Unknown>");
                   else
                       sprintf(buff, "%lld",
                           outdata[i * info_num + 1]);

                   printf("address 0x%llx is backed by physical "
                       "page 0x%llx of size %s\n",
                       inaddr[i], outdata[i * info_num], buff);
               }
           }
       }


ATTRIBUTES
       See attributes(5) for descriptions of the following attributes:


       tab()    allbox;    cw(2.750000i)|     cw(2.750000i)     lw(2.750000i)|
       lw(2.750000i).  ATTRIBUTE TYPEATTRIBUTE VALUE Interface StabilityStable
       MT-LevelAsync-Signal-Safe


SEE ALSO
       memcntl(2), mmap(2), gethomelgroup(3C),  getpagesize(3C),  madvise(3C),
       sysconf(3C), attributes(5)



SunOS 5.10                        21 Feb 2003                       meminfo(2)