MEMINFO(2) | System Calls | MEMINFO(2) |
meminfo - provide information about memory
#include <sys/types.h> #include <sys/mman.h> int meminfo(const uint64_t inaddr[], int addr_count,
const uint_t info_req[], int info_count, uint64_t outdata[],
uint_t validity[]);
inaddr
addr_count
info_req
info_count
outdata
validity
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
MEMINFO_VLGRP
MEMINFO_VPAGESIZE
MEMINFO_VREPLCNT
MEMINFO_VREPL | n
MEMINFO_VREPL_LGRP | n
MEMINFO_PLGRP
All but MEMINFO_VLGRP and MEMINFO_VPAGESIZE require the PRIV_PROC_MEMINFO privilege.
All but MEMINFO_VLGRP and MEMINFO_VPAGESIZE require the PRIV_PROC_MEMINFO privilege.
Upon successful completion meminfo() returns 0. Otherwise −1 is returned and errno is set to indicate the error.
The meminfo() function will fail if:
EFAULT
EINVAL
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 corresponding 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);
}
} }
See attributes(7) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
Interface Stability | Stable |
MT-Level | Async-Signal-Safe |
memcntl(2), mmap(2), gethomelgroup(3C), getpagesize(3C), madvise(3C), sysconf(3C), attributes(7), privileges(7)
March 10, 2015 | OmniOS |