get_mempolicy - возвращает политику работы с памятью NUMA для нити
get_mempolicy(2)
возвращает политику работы с памятью NUMA для нити
ОБЗОР
#include <numaif.h>
int get_mempolicy(int *mode, unsigned long *nodemask,
unsigned long maxnode, unsigned long addr,
unsigned long flags);
Компонуется при указании параметра -lnuma.
ОПИСАНИЕ
Вызов
get_mempolicy() возвращает политику NUMA вызывающей нити или адреса
памяти (в зависимости от значения
flags).
Машина с NUMA имеет различные контроллеры памяти с различными расстояниями
до определённых ЦП. Политикой памяти задаётся узел, на котором выделяется
память для нити.
Если flags равно 0, то возвращается информация о политике по умолчанию
для вызывающей нити (которая была задана с помощью
set_mempolicy(2)). Возвращаемая политика [mode и nodemask] может
использоваться для восстановления политики нити в её состояние на время
вызова get_mempolicy() с помощью set_mempolicy(2).
Если flags равно MPOL_F_MEMS_ALLOWED (доступно, начиная с Linux
2.6.24), то аргумент mode игнорируется и набор узлов [их памяти], которые
разрешено указывать нити в последующих вызовах mbind(2) или
set_mempolicy(2) [в отсутствии любых значений флагов режима],
возвращается в nodemask. Не разрешено объединять MPOL_F_MEMS_ALLOWED с
MPOL_F_ADDR или MPOL_F_NODE.
Если flags равно MPOL_F_ADDR, то возвращается информация об
управляющей политике адреса памяти, указанного в addr. Эта политика может
отличаться от политики нити по умолчанию, если mbind(2) или одна из
вспомогательных функций, описанных в numa(3), были использованы при
установлении политики для диапазона памяти, содержащего addr.
Если аргумент mode не равен NULL, то get_mempolicy() сохранит режим
политики и все необязательные флаги режима запрашиваемой политики NUMA в
место, указанное этим аргументом. Если nodemask не равно NULL, то
значение nodemask, связанной с политикой, будет сохранено в место, указанное
этим аргументом. В maxnode задаётся количество идентификаторов узлов,
которые могут быть сохранены в nodemask; то есть, максимальный
идентификатор узла плюс один. Значение, указанное в maxnode, всегда
округляется до кратного sizeof(unsigned long).
Если в flags указано MPOL_F_NODE и MPOL_F_ADDR, то
get_mempolicy() вернёт идентификатор узла, на котором расположен адрес
addr в расположение, заданное mode. Если для указанного адреса
страница ещё не выделена, то get_mempolicy() выделит страницу, как если
бы нить выполнила чтение [загрузку] по этому адресу, и вернёт идентификатор
узла, на котором была размещена страница.
Если flags содержит MPOL_F_NODE, но не MPOL_F_ADDR, и значение
текущей политики нити равно MPOL_INTERLEAVE, то get_mempolicy() вернёт
в расположение, указанное в аргументе mode (не равно NULL), идентификатор
узла следующего узла, который будет использован при чередовании внутренних
страниц ядра, выделяемых для нити. Эти выделения содержат страницы памяти
отображённых файлов в диапазоне памяти процесса, отображённых с помощью
вызова mmap(2) с флагом MAP_PRIVATE для чтения, и в диапазонах памяти,
отображённых с флагом MAP_SHARED, для всех операций.
Другие значения флагов зарезервированы.
Обзор возможных политик смотрите в set_mempolicy(2).
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении
get_mempolicy() возвращает 0; при ошибке --- -1,
а в
errno задаётся причина ошибки.
ОШИБКИ
EFAULT
Часть всего диапазона памяти, заданная в nodemask и maxnode, указывает
за пределы доступного адресного пространства.
EINVAL
Значение, указанное в maxnode, меньше количества идентификаторов узлов,
поддерживаемых системой. Или в flags указаны значения, отличные от
MPOL_F_NODE или MPOL_F_ADDR; или в flags указано MPOL_F_ADDR и
addr равно NULL, или в flags не указано MPOL_F_ADDR и addr не
равно NULL. Или в flags указано MPOL_F_NODE, но не MPOL_F_ADDR и
значение текущей политики нити не равно MPOL_INTERLEAVE. Или в flags
указано MPOL_F_MEMS_ALLOWED вместе с MPOL_F_ADDR или MPOL_F_NODE (и
есть другие случаи возврата EINVAL).
ВЕРСИИ
Системный вызов
get_mempolicy() был добавлен в ядро Linux версии 2.6.7.
СООТВЕТСТВИЕ СТАНДАРТАМ
Данный вызов есть только в Linux.
ЗАМЕЧАНИЯ
Информация о библиотеке доступна в
numa(7).