- bookworm 4.18.1-1
- bookworm-backports 4.22.0-1~bpo12+4
- testing 4.22.0-1
get_mempolicy(2) | System Calls Manual | get_mempolicy(2) |
ИМЯ¶
get_mempolicy - возвращает политику работы с памятью NUMA для нити
LIBRARY¶
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.
Если аргумент 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).
ВЕРСИИ¶
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 <azamat.hackimov@gmail.com>, Dmitry Bolkhovskikh <d20052005@yandex.ru>, Vladislav <ivladislavefimov@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>
Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.
Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.
4 декабря 2022 г. | Linux man-pages 6.02 |