set_mempolicy(2) | System Calls Manual | set_mempolicy(2) |
set_mempolicy - настраивает политику работы с памятью NUMA для потока и его потомков
NUMA (Non-Uniform Memory Access) policy library (libnuma, -lnuma)
#include <numaif.h>
long set_mempolicy(int mode, const unsigned long *nodemask, unsigned long maxnode);
Вызов set_mempolicy() устанавливает политику работы с памятью NUMA для вызывающей нити, которая определяется режимом политики и нулём или более узлами (задаются в аргументах mode, nodemask и maxnode).
Машина с NUMA имеет различные контроллеры памяти с различными расстояниями до определённых ЦП. Политикой памяти задаётся узел, на котором выделяется память для нити.
Этот системный вызов устанавливает в нити политику по умолчанию. Политика нити управляет выделением страниц в адресном пространстве процесса из областей памяти, которые не контролируются специальной политикой, заданной с помощью mbind(2). Политикой нити по умолчанию также контролируется выделение любых страниц для отображаемых в память файлов с помощью вызова mmap(2) с флагом MAP_PRIVATE (которые читаются (загружаются) только этой нитью) и для отображаемых в память файлов с помощью вызова mmap(2) с флагом MAP_SHARED (независимо от типа доступа). Эта политика применяется только когда нить запрашивает выделение новой страницы. Для анонимной памяти это применяется, когда страница впервые затрагивается приложением.
В аргументе mode должно быть указано одно из следующих значений: MPOL_DEFAULT, MPOL_BIND, MPOL_INTERLEAVE, MPOL_PREFERRED или MPOL_LOCAL (описано далее). Для всех режимов, за исключением MPOL_DEFAULT, требуется, чтобы вызывающий указывал в аргументе nodemask узел или узлы, для которых применяется режим.
Аргумент mode также может содержать необязательный флаг режима. Поддерживаемые флаги режима:
В nodemask указывается битовая маска идентификаторов узлов, которая может содержать до maxnode бит. Размер битовой маски округляется до следующего значение кратного sizeof(unsigned long), но ядро будет использовать биты только до maxnode. Значение NULL в nodemask или maxnode указывает на пустой набор узлов. Если значение maxnode равно нулю, то аргумент nodemask игнорируется.
Если требуется аргумент nodemask, то его значение должно содержать не менее одного работающего узла, разрешённого процессу из текущего контекста набора процессоров (если не указан флаг режима MPOL_F_STATIC_NODES) и имеющего память. Если в mode установлен флаг MPOL_F_STATIC_NODES и требуемое значение nodemask не содержит узлов, разрешённых процессу из текущего контекста набора процессоров, то политика памяти возвращается обратно к локальному выделению. Это эффективно заменяет указанную политику до тех пор, пока в текущий контекст набора процессоров процесса не добавится один или более узлов, указанных nodemask.
Аргумент mode должен включать одно из следующих значений:
Политика памяти нити сохраняется при вызове execve(2) и наследуется дочерними нитями, созданными с помощью fork(2) или clone(2).
При успешном выполнении set_mempolicy() возвращается 0; при ошибке возвращается -1, а в errno содержится код ошибки.
The set_mempolicy() system call was added in Linux 2.6.7.
Данный вызов есть только в Linux.
Политика памяти не запоминается, если страница помещается в пространство подкачки. Когда страница возвращается в основную память, будет использована политика нити или диапазона памяти, действующая на момент выделения страницы.
Информация о библиотеке доступна в numa(7).
get_mempolicy(2), getcpu(2), mbind(2), mmap(2), numa(3), cpuset(7), numa(7), numactl(8)
Русский перевод этой страницы руководства был сделан Alexander Golubev <fatzer2@gmail.com>, Azamat Hackimov <azamat.hackimov@gmail.com>, Hotellook, Nikita <zxcvbnm3230@mail.ru>, Spiros Georgaras <sng@hellug.gr>, Vladislav <ivladislavefimov@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>
Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.
Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.
5 февраля 2023 г. | Linux man-pages 6.03 |