Provided by: manpages-ru-dev_4.19.0-7_all bug

ИМЯ

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

LIBRARY

       NUMA (Non-Uniform Memory Access) policy library (libnuma, -lnuma)

СИНТАКСИС

       #include <numaif.h>

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

ОПИСАНИЕ

       Вызов  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.

ВЕРСИИ

       The migrate_pages()  system call first appeared in 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), numastat(8)

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

ПЕРЕВОД

       Русский  перевод  этой страницы руководства был сделан aereiae <aereiae@gmail.com>, Alexey
       <a.chepugov@gmail.com>, Azamat Hackimov <azamat.hackimov@gmail.com>,  Dmitriy  S.  Seregin
       <dseregin@59.ru>,       Dmitry      Bolkhovskikh      <d20052005@yandex.ru>,      ITriskTI
       <ITriskTI@gmail.com>, Max Is <ismax799@gmail.com>, Yuri Kozlov <yuray@komyakino.ru>,  Иван
       Павлов <pavia00@gmail.com> и Малянов Евгений Викторович <maljanow@outlook.com>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если  вы  обнаружите  ошибки  в  переводе этой страницы руководства, пожалуйста, отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.