get_mempolicy

GET_MEMPOLICY(2)         Руководство программиста Linux         GET_MEMPOLICY(2)



ИМЯ
       get_mempolicy - возвращает политику работы с памятью NUMA для нити

ОБЗОР
       #include <numaif.h>

       int get_mempolicy(int *mode, unsigned long *nodemask,
                         unsigned long maxnode, void *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)*8.

       Если в 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).

СМОТРИТЕ ТАКЖЕ
       getcpu(2), mbind(2), mmap(2), set_mempolicy(2), numa(3), numa(7),
       numactl(8)



Linux                              2016-07-17                   GET_MEMPOLICY(2)