Scroll to navigation

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

ИМЯ

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 устанавливается в соответствующее значение.

ОШИБКИ

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

ВЕРСИИ

Вызов migrate_pages() впервые появился в Linux в ядре версии 2.6.16.

СООТВЕТСТВИЕ СТАНДАРТАМ

Данный вызов есть только в Linux.

ЗАМЕЧАНИЯ

Информация о библиотеке доступна в numa(7).

Используйте 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), numa_stat(8);
Файл из дерева исходного кода ядра Documentation/vm/page_migration.

2010-11-01 Linux