 |
Index for Section 3 |
|
 |
Alphabetical listing for M |
|
 |
Bottom of page |
|
memalloc_attr(3)
NAME
memalloc_attr - Query the memory allocation policy and attributes (libnuma
library)
SYNOPSIS
#include <numa.h>
int memalloc_attr(
vm_offset_t va, memalloc_attr_t *attr );
PARAMETERS
va The user virtual address for which the memory allocation policy is
requested.
attr
Points to a buffer to receive the memory allocation policy and
attributes for the page containing the specified virtual address.
DESCRIPTION
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.
EXAMPLE
#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");
}
RETURN VALUES
0 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.
-1 Failure. In this case, the function sets errno to indicate the error.
ERRORS
If the memalloc_attr() function fails, it sets errno to one of the
following values:
[EFAULT]
The address pointed to by va, attr, or mattr_radset is invalid.
[EINVAL]
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.
SEE ALSO
Functions: numa_intro(3)
Files: numa_types(4)
 |
Index for Section 3 |
|
 |
Alphabetical listing for M |
|
 |
Top of page |
|