Главная » 2017 » Ноябрь » 21 » man 2 migrate_pages
00:52
man 2 migrate_pages

SEO sprint - Всё для максимальной раскрутки!





ИМЯ


migrate_pages - переносит все страницы процесса на другой набор узлов



ОБЗОР


#include <numaif.h>

long migrate_pages(int pid, unsigned long maxnode,
const unsigned long *old_nodes,
const unsigned long *new_nodes);

Компонуется при указании параметра -lnuma.



ОПИСАНИЕ


Вызов migrate_pages() пытается перенести все страницы процесса с идентификатором
pid, находящиеся в памяти узлов old_nodes, в память узлов new_nodes. Страницы, не
расположенные в узлах old_nodes, не переносятся. При переносе на new_nodes ядро в
максимально возможной степени поддерживает относительную топологию связи внутри
old_nodes.

Аргументы old_nodes и new_nodes представляют собой указатели на маски битов
номеров узлов, до maxnode в каждой маске. Эти маски обрабатываются как массивы
беззнаковых целых long (в последнем целом long биты, лежащие за пределом maxnode,
игнорируются). Аргумент maxnode представляет собой максимальный номер узла в
битовой маске плюс 1 (также как в mbind(2), но отличается от select(2)).

В аргументе pid задаётся идентификатор процесса, чьи страницы будут перемещаться.
Чтобы перемещать страницы не своего процесса, вызывающий должен быть
привилегированным (CAP_SYS_NICE) или реальный или эффективный ID пользователя
вызывающего процесса должен совпадать с реальным или сохранённым ID пользователя
процесса назначения. Если pid равен 0, то migrate_pages() перемещает страницы
вызвавшего процесса.

Совместно используемые с другими процессами страницы будут перемещаться только,
если первоначальный процесс имеет мандат CAP_SYS_NICE.



ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ


При нормальном завершении работы migrate_pages() возвращает количество
неперемещённых страниц (то есть, ноль означает, что все страницы успешно
перемещены). В случае ошибки возвращается -1, а errno устанавливается в
соответствующее значение.



ОШИБКИ


EFAULT Часть или весь диапазон памяти, заданный в old_nodes/new_nodes и maxnode,
указывает за пределы доступного адресного пространства.

EINVAL Значение maxnode превышает введённое ядром ограничение. В old_nodes или
new_nodes задан один или более ID узлов, превышающих поддерживаемый
максимальный ID узла. Или ни один из ID узлов, указанных в new_nodes,
включен и доступен из контекста текущего набора процессоров процесса, или
ни один из узлов не содержит память.

EPERM Недостаточно прав (CAP_SYS_NICE) для перемещения страниц процесса,
заданного pid, или недостаточно прав (CAP_SYS_NICE) для доступа к указанным
узлам назначения.

ESRCH Не найден процесс с указанным pid.

Используйте get_mempolicy(2) с флагом MPOL_F_MEMS_ALLOWED для получения набора
узлов, которые доступны в наборе ЦП вызывающему процессу. Заметим, что эта
информация может измениться в любое время вручную или при автоматической
перенастройке набора ЦП.

Использование migrate_pages() может привести к тому, что расположение страниц (на
узле) нарушит политику памяти, установленную для заданных адресов (см. mbind(2))
и/или заданного процесса (см. set_mempolicy(2)). То есть политика памяти не
ограничивает узлы назначения, используемые migrate_pages().

Заголовочный файл <numaif.h> не включён в glibc, его можно найти в пакете с именем
libnuma-devel или подобным названием.



СМОТРИТЕ ТАКЖЕ


get_mempolicy(2), mbind(2), set_mempolicy(2), numa(3), numa_maps(5), cpuset(7),
numa(7), migratepages(8), numastat(8)

Файл Documentation/vm/page_migration в дереве исходного кода ядра Linux



Категория: (2) Системные вызовы ядра (функции языка Си) | Просмотров: 388 | Добавил: Администратор | Рейтинг: 0.0/0
Всего комментариев: 0
avatar