|
memalloc_attr(3)
Contents
|
memalloc_attr - Query the memory allocation policy and
attributes (libnuma library)
#include <numa.h>
int memalloc_attr(
vm_offset_t va, memalloc_attr_t *attr );
The user virtual address for which the memory allocation
policy is requested. Points to a buffer to receive the
memory allocation policy and attributes for the page containing
the specified virtual address.
The memalloc_attr() function returns the current memory
allocation policy and associated attributes in the buffer
pointed to by attr for the address specified by va.
If radset information about the memory allocation policy
is desired, a radset must be allocated through the radsetcreate()
function, and the mattr_radset element of the
attr argument must point to that radset. Otherwise, a 0
must be specified for the mattr_radset.
#include <numa.h> main() {
vm_offset_t va;
memalloc_attr_t attr;
int id;
int flags = SET_CURSOR_CONSUME;
rad_cursor_t cursor = SET_CURSOR_INIT;
radsetcreate(&attr.mattr_radset);
va = (vm_offset_t)&attr;
/* no policy in effect - return zeroes */
if (memalloc_attr(va, &attr) == -1) {
perror("memalloc_attr");
radsetdestroy(&attr.mattr_radset); return 0;
}
printf("mattr_policy = 0x%lx\n", attr.mattr_policy);
printf("mattr_rad = 0x%lx\n", attr.mattr_rad);
printf("mattr_stride = 0x%lx\n", attr.mattr_stride);
printf("mattr_distance = 0x%lx\n", attr.mattr_distance);
printf("mattr_pagesz = 0x%lx\n\n", attr.mattr_pagesz);
/* set policy */
attr.mattr_policy = MPOL_DIRECTED;
attr.mattr_rad = 0;
if (nmadvise((void *)va, sizeof(memalloc_attr_t), 0,
&attr) == -1) {
perror("nmadvise");
radsetdestroy(&attr.mattr_radset); return 0;
}
if (memalloc_attr(va, &attr) == -1) {
perror("memalloc_attr");
radsetdestroy(&attr.mattr_radset);
return 0;
}
printf("mattr_policy = 0x%lx\n", attr.mattr_policy);
printf("mattr_rad = 0x%lx\n", attr.mattr_rad);
printf("mattr_stride = 0x%lx\n", attr.mattr_stride);
printf("mattr_distance = 0x%lx\n", attr.mattr_distance);
printf("mattr_pagesz = 0x%lx\n", attr.mattr_pagesz);
/* enumerate the mattr_radset */
printf("\nEnumerating radset members:\n");
while ((id = rad_foreach(attr.mattr_radset, flags,
&cursor)) != RAD_NONE) {
if ((id % 8) == 0)
printf("\n");
printf("%3d, ", id);
}
printf("\n"); }
Success. In this case, the function stores the requested
memory allocation policy and attributes in the buffer
pointed to by attr. If no memory allocation policy has
been set for the specified virtual address (e.g., madvise()
or nmadvise()) not called for that address), a
zeroed attr structure is returned. Failure. In this case,
the function sets errno to indicate the error.
If the memalloc_attr() function fails, it sets errno to
one of the following values: The address pointed to by va,
attr, or mattr_radset is invalid. The mattr_radset element
of the attr argument points to an invalid RAD set,
possibly one that has not been created by a radsetcreate()
call.
Functions: numa_intro(3)
Files: numa_types(4)
memalloc_attr(3)
[ Back ] |