Provided by: manpages-ru-dev_4.27.0-1_all bug

НАИМЕНОВАНИЕ

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

БИБЛИОТЕКА

       Библиотека политик NUMA (неоднородный доступ к памяти) (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.

СТАНДАРТЫ

       Linux.

ИСТОРИЯ

       Linux 2.6.16.

ПРИМЕЧАНИЯ

       Информация о библиотеке доступна в 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> и Kirill Rekhov <krekhov.dev@gmail.com>

       Этот  перевод является свободной программной документацией; он распространяется на условиях общедоступной
       лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html  версии  3  или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

       Если  вы  обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом
       разработчику(ам)  по  его(их)  адресу(ам)  электронной  почты  или  по   адресу   списка рассылки русских
       переводчиков.

Справочные страницы Linux 6.9.1                   2 мая 2024 г.                                 migrate_pages(2)