get_mempolicy -
возвращает
политику
работы с
памятью NUMA
для нити
NUMA (Non-Uniform Memory Access) policy library (
libnuma,
-lnuma)
#include <numaif.h>
long get_mempolicy(int *mode,
unsigned long nodemask[(.maxnode + ULONG_WIDTH - 1)
/ ULONG_WIDTH],
unsigned long maxnode, void *addr,
unsigned long flags);
Вызов
get_mempolicy()
возвращает
политику NUMA
вызывающей
нити или
адреса
памяти (в
зависимости
от
значения
flags).
Машина с NUMA
имеет
различные
контроллеры
памяти с
различными
расстояниями
до
определённых
ЦП.
Политикой
памяти
задаётся
узел, на
котором
выделяется
память для
нити.
Если
значение
flags
равно 0, то в
буферы,
указанные
в
mode и
nodemask,
возвращается
информация
о политике
по
умолчанию
для
вызывающей
нити
(которая
была
задана с
помощью
set_mempolicy(2)).
Полученное
значение
может
использоваться
для
восстановления
политики
нити в её
состояние
на время
вызова
get_mempolicy()
с помощью
set_mempolicy(2). Если
значение
flags
равно 0, то
значение
addr
должно
быть равно
NULL.
Если
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.
If the
mode argument is not NULL, then
get_mempolicy() will store
the policy mode and any optional
mode flags of the requested NUMA
policy in the location pointed to by this argument. If
nodemask is not
NULL, then the nodemask associated with the policy will be stored in the
location pointed to by this argument.
maxnode specifies the number of
node IDs that can be stored into
nodemask—that is, the maximum
node ID plus one. The value specified by
maxnode is always rounded to a
multiple of
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).
The
get_mempolicy() system call was added in Linux 2.6.7.
Данный
вызов есть
только в Linux.
Информация
о
библиотеке
доступна в
numa(7).
getcpu(2),
mbind(2),
mmap(2),
set_mempolicy(2),
numa(3),
numa(7),
numactl(8)
Русский
перевод
этой
страницы
руководства
был сделан
Azamat Hackimov <
[email protected]>, Dmitry Bolkhovskikh
<
[email protected]>, Vladislav <
[email protected]>,
Yuri Kozlov <
[email protected]> и
Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]