move_pages(2) | System Calls Manual | move_pages(2) |
move_pages - перемещает отдельные страницы процесса на другой узел
NUMA (Non-Uniform Memory Access) policy library (libnuma, -lnuma)
#include <numaif.h>
long move_pages(int pid, unsigned long count, void *pages[.count], const int nodes[.count], int status[.count], int flags);
Вызов move_pages() перемещает указанные в pages страницы процесса с pid в память узлов, заданных в nodes. Результат перемещения отражается в status. В flags задаются ограничения на перемещаемые страницы.
Значение pid представляет собой идентификатор процесса, в котором перемещаются страницы. Если pid равен 0, то move_pages() перемещается страницы вызывающего процесса.
Для перемещения страниц в другом процессе требуются следующие права:
В аргументе count задаётся количество перемещаемых страниц. Он определяет размер трёх массивов: pages, nodes и status.
Аргумент pages представляет собой массив указателей на страницы, которые должны быть перемещены. Данные указатели должны быть выровнены на границу страницы. Адреса указываются в том же виде, в каком доступны процессу с заданным pid.
Аргумент nodes представляет собой массив целых, которыми задаются желаемые местоположения каждой страницы. Каждый элемент массива представляет собой номер узла. Также, значением nodes может быть NULL; в этом случае move_pages() не перемещает страницы, а записывает в массив status номер узла, на котором расположена каждая страница в данный момент. Получение состояния каждой страницы может потребоваться для определения страниц, которые нужно переместить.
status is an array of integers that return the status of each page. The array contains valid values only if move_pages() did not return an error. Preinitialization of the array to a value which cannot represent a real numa node or valid error of status array could help to identify pages that have been migrated.
В аргументе flags указываются типы перемещаемых страниц. Флаг MPOL_MF_MOVE означает, что будут перемещены только страницы, которые монопольно используются процессом. Флаг MPOL_MF_MOVE_ALL означает, что также будут перемещены страницы, которые используются совместно с другими процессами. Для использования флага MPOL_MF_MOVE_ALL процесс должен быть привилегированным (CAP_SYS_NICE).
В каждом элементе массива status могут возвращаться следующие значения:
On success move_pages() returns zero. On error, it returns -1, and sets errno to indicate the error. If positive value is returned, it is the number of nonmigrated pages.
move_pages() first appeared in Linux 2.6.18.
Данный вызов есть только в Linux.
Информация о библиотеке доступна в numa(7).
Используйте get_mempolicy(2) с флагом MPOL_F_MEMS_ALLOWED для получения набора узлов, которые доступны в текущем наборе ЦП. Заметим, что эта информация может измениться в любое время вручную или при автоматической перенастройке набора ЦП.
Использование этого вызова может привести к тому, что расположение страниц (на узле) нарушит политику памяти, установленную для заданных адресов (см. mbind(2)) и/или заданного процесса (см. set_mempolicy(2)). То есть политика памяти не ограничивает узлы назначения, используемые move_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)
Русский перевод этой страницы руководства был сделан 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 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.
Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.
5 февраля 2023 г. | Linux man-pages 6.03 |